ARM Cortex-A8: Cuál es la diferencia entre VFP y NEON


En el procesador ARM Cortex-A8, entiendo lo que es NEON, es un coprocesador SIMD.

Pero, ¿la unidad VFP(Vector Floating Point), que también es un coprocesador, funciona como un procesador SIMD? Si es así, ¿cuál es mejor usar?

He leído algunos enlaces como -

  1. Link1

  2. Link2.

Pero no muy claro lo que significan. Dicen que VFP nunca fue pensado para ser utilizado para SIMD pero en Wiki I lea lo siguiente: "La arquitectura VFP también admite la ejecución de instrucciones vectoriales cortas, pero estas operan en cada elemento vectorial secuencialmente y, por lo tanto, no ofrecen el rendimiento del paralelismo SIMD (Single Instruction Multiple Data) verdadero."

No está tan claro qué creer, ¿puede alguien elaborar más sobre este tema?

Author: Tamar E. Granor, 2010-11-04

4 answers

Hay bastante diferencia entre los dos. Neon es un procesador acelerador SIMD (Single Instruction Multiple Data) como parte del núcleo ARM. Esto significa que durante la ejecución de una instrucción se producirá la misma operación en hasta 16 conjuntos de datos en paralelo. Dado que hay paralelismo dentro del Neon, puede obtener más MIPS o FLOPS de Neon que un procesador SISD estándar que se ejecuta a la misma velocidad de reloj.

El mayor beneficio de Neon es si desea ejecutar operación con vectores, es decir, codificación/decodificación de vídeo. También puede realizar operaciones de punto flotante(float) de precisión única en paralelo.

VFP es un acelerador de hardware de punto flotante clásico. No es una arquitectura paralela como el neón. Básicamente realiza una operación en un conjunto de entradas y devuelve una salida. Su propósito es acelerar los cálculos de punto flotante. Es compatible con punto flotante de precisión simple y doble.

Usted tiene 3 posibilidades de utilizar Neon:

  • use funciones intrínsecas #include "arm_neon.h "
  • en línea el código de ensamblaje
  • deje que el gcc haga las optimizaciones por usted proporcionando -mfpu=neon como argumento (gcc 4.5 es bueno en esto)
 37
Author: Cosmin Cojocar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-07-05 15:20:26

Arquitectónicamente, VFP (no se llamó Vector Floating Point por nada) de hecho tiene una provisión para operar en un vector de punto flotante en una sola instrucción. No creo que nunca ejecute operaciones múltiples simultáneamente (como true SIMD), pero podría ahorrar algo de tamaño de código. Sin embargo, si lee el Manual de Referencia de Arquitectura ARM en la ayuda de Shark (como describo en mi introducción a NEON, enlace 1 en la pregunta), verá en la sección A2. 6 que la característica vectorial de VFP está en desuso en ARMv7 (que es lo que implementa Cortex A8), y el software debe usar SIMD avanzado para operaciones vectoriales de coma flotante.

Peor aún, en la implementación de Cortex A8, VFP se implementa con una unidad de ejecución VFP Lite (lea lite como ocupando una superficie de silicio más pequeña, no como teniendo menos características), lo que significa que en realidad es más lento que en el ARM11, por ejemplo! Afortunadamente, la mayoría de las instrucciones de VFP de precisión única se ejecutan con la unidad de NEÓN, pero no claro que las operaciones VFP vectoriales lo hacen; e incluso si lo hacen, ciertamente se ejecutan más lento que con instrucciones de NEÓN.

Espero que eso aclare las cosas!

 16
Author: Pierre Lebeaupin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-11-06 22:04:46

Para la ISA armv7 (y variantes)

El NEON es una unidad de procesamiento de datos SIMD y paralelo para datos enteros y de punto flotante y el VFP es una unidad de punto flotante totalmente compatible con IEEE-754. En particular en el A8, la unidad NEON es mucho más rápida para casi todo, incluso si no tiene datos altamente paralelos, ya que el VFP no está canalizado.

Entonces, ¿por qué usarías el VFP?!

La diferencia más importante es que el VFP proporciona doble precisión punto flotante.

En segundo lugar, hay algunas instrucciones especializadas que VFP ofrece que no hay implementaciones equivalentes en la unidad NEON. SQRT viene a la mente, tal vez algunas conversiones de tipo.

Pero la diferencia más importante no mencionada en la respuesta de Cosmin es que la tubería de punto flotante de NEÓN no es totalmente compatible con IEEE-754. La mejor descripción de las diferencias se encuentra en la Descripción del Registro FPSCR .

Porque no es Compatible con IEEE-754, un compilador no puede generar estas instrucciones a menos que le diga al compilador que no está interesado en el cumplimiento total. Esto se puede hacer de varias maneras.

  1. Usando una función intrínseca para forzar el uso de NEÓN, por ejemplo vea la Lista de Funciones Intrínsecas de Neón GCC.
  2. Pregunte al compilador, muy bien. Incluso las versiones más nuevas de GCC con -mfpu=neon no generarán instrucciones de neón de coma flotante a menos que también especifique -funsafe-math-optimizations.

Para armv8 + ISA (y variantes) [Actualización]

NEON es ahora totalmente compatible con IEE-754, y desde el punto de vista del programador (y compilador), en realidad no hay demasiada diferencia. La doble precisión ha sido vectorizada. Desde el punto de vista de la microarquitectura dudo que sean incluso diferentes unidades de hardware. ARM documenta instrucciones escalares y vectoriales por separado, pero ambas son parte de " Advanced SIMD."

 15
Author: Peter M,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-06-19 23:02:28

IIRC, el VFP es un coprocesador de coma flotante que funciona secuencialmente.

Esto significa que puede usar instrucción en un vector de flotadores para un comportamiento similar a SIMD, pero internamente, la instrucción se realiza en cada elemento del vector en secuencia.

Mientras que el tiempo total requerido para la instrucción se reduce por esto debido a la instrucción de carga única, el VFP todavía necesita tiempo para procesar todos los elementos del vector.

True SIMD ganará más rendimiento neto de punto flotante, pero el uso de la VFP con vectores sigue siendo más rápido que el uso puramente secuencial.

 2
Author: sum1stolemyname,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-11-04 13:58:40