2010-11-18 23 views
8

Estoy usando el procesador Cortex-A8 y no entiendo cómo usar la bandera -mfpu.ARM Cortex-A8: Cómo hacer uso de NEON y vfpv3

En el Cortex-A8, existen tanto vfpv3 y neón coprocesadores. Anteriormente era no saber cómo utilizar el neón por lo que sólo estaba usando

gcc -marm -mfloat-abi=softfp -mfpu=vfpv3

Ahora he entendido cómo funcionan los procesadores SIMD y he escrito determinado código usando las características intrínsecas de neón. Para utilizar el neón coprocesador ahora mi bandera -mfpu tiene que cambiar para -mfpu=neon, por lo que mi línea de comandos del compilador se ve así

gcc -marm -mfloat-abi=softfp -mfpu=neon

Ahora bien, ¿significa esto que mi vfpv3 no se utiliza más? Tengo un montón de código que no está haciendo uso de NEON, esas partes no hacen uso de vfpv3.

Si todavía se usan tanto neon como vfpv3, entonces no tengo problemas, pero si solo se usa uno de ellos, ¿cómo puedo usar ambos?

Respuesta

10

NEON implica contar también con el soporte VFP tradicional. VFP se puede usar para cálculos "normales" (no vectoriales) de coma flotante. Además, NEON no admite FP de precisión doble, por lo que solo se pueden usar las instrucciones de VFP.
Lo que puede hacer es agregar -S a la línea de comando de gcc y verificar el ensamblaje. Las instrucciones que comienzan con V (por ejemplo, vld1.32, vmla.f32) son instrucciones NEON, y las que comienzan con F (fldd, fmacd) son VFP. (Aunque los documentos ARM ahora prefieren usar el prefijo V incluso para las instrucciones VFP, GCC no lo hace).

+0

Igor Tengo solo valores de punto flotante de precisión simple. De hecho, veo un montón de instrucciones f (fadds, fsitos), así que creo que las instrucciones vfp todavía están siendo emitidas por el compilador. – HaggarTheHorrible

+0

Una pregunta no relacionada, ¿sabes lo que significa un procesador de doble emisión? Cortex-A8 es un procesador de doble emisión, ¿qué significa? ¿Puedes indicarme algún enlace? Mi búsqueda no fue tan productiva. – HaggarTheHorrible

+0

Vikram, Coretex A8 es un procesador fuera de servicio de doble orden. Eso significa (de manera variada) que puede hacer una o todas 1) decodificar y poner en cola para ejecución fuera de orden dos instrucciones por reloj, 2) ejecutar dos instrucciones en cola por reloj y/o 3) puede retirar dos de tales resultados por reloj. En otras palabras, en las mejores condiciones puede ejecutar dos instrucciones por reloj, sostenido. Las mejores condiciones solo ocurren cuando no hay errores de caché, errores de predicción de sucursales, etc. –

Cuestiones relacionadas