2012-07-17 10 views
8

He estado aprendiendo un poco sobre las características de la CPU y tropecé con NEON.¿Cómo utilizan los programas de Android NEON SIMD?

Por lo que he leído, parece que NEON requiere una programación específica para usar esto, pero esto es completamente cierto, o la CPU que tiene esta característica aún encuentra formas de aumentarla y acelerar los procesos de medios para algunas aplicaciones incluso aunque no hay un código específico para eso?

+0

Las extensiones del conjunto de instrucciones deben ser segmentadas por * algo * (drivers/kernel/C library, etc.). –

+0

En el sentido de que el compilador de Android hará esto en un cierto nivel (dado que no todas las CPU tienen esta característica). Estoy viendo esto como las extensiones MMX que tenía la CPU, que creo que originalmente tenían que ser el objetivo del programador, luego los compiladores simplemente asumieron que existía, luego se anticipó ... – Tam

+1

Puede haber alguna optimización que los compiladores puedan usar: - pero para aquellos que afirman "60% -150% de números", todavía se necesita codificación manual y conocimiento intrínseco del uso ... (No es que se escriba un programa completo en ensamblaje, sino más bien las partes de CODEC o Transformaciones 3d, etc.) –

Respuesta

9

Hay varias maneras de hacer uso de las instrucciones NEON. Algunos de ellos son:

  • Librarires. Es una buena posibilidad que tu memcpy sea hecha a mano usando NEON. Las libs de reproducción de música/video en la API usan NEON y/o GPU para la aceleración. Aso, hay libs de terceros que lo usan. FastCV de Qualcomm es un buen ejemplo
  • Instrucciones del compilador. Algún compilador, con las opciones correctas del compilador emitirá las instrucciones NEON. La mayoría de los compiladores usarán neón para las operaciones de flotación, pero no para vectorizarlas. Usarán la unidad como una unidad de datos única, solo porque es rápida y conveniente. Existen algunas capacidades de vectorización en el compilador GCC y ARM, pero su alcance y resultados son realmente limitados.
  • codificada a mano C con intrinsics http://gcc.gnu.org/onlinedocs/gcc/ARM-NEON-Intrinsics.html Probablemente sea la mejor manera de comenzar en el mundo NEON.
  • Ensamblador codificado a mano. Esto parece ser el mejor, si quieres alcanzar el máximo rendimiento. También requiere un gran esfuerzo y conocimiento de CS.

  • Y, por último pero no menos importante, puede usar NEON simplemente descargando alguna aplicación que lo use. Su reproductor de música favorito, probablemente pone a buen uso de la unidad de neón en su teléfono inteligente :)

Conclusión: NEON tiene una gran cantidad de usos, pero sólo se utiliza si el código contiene instrucciones específicamente neón. Más técnicamente, como @pst dicho, debe ser apuntado por un pedazo de código.

+0

Gracias. ¿Su mención de reproducción de música/video significa que Android la usa automáticamente (es decir, compila) cuando usamos SoundPool? (He notado una gran diferencia en la velocidad de inicio de un efecto de sonido para dos teléfonos, uno con y uno sin neón incluido en las características de la CPU.) – Tam

+0

Lo más probable es que Android ofrezca una versión optimizada para su API de audio, para usar con el teléfonos que admiten NEON, etc., y versiones simples en C++ para aquellos que no tienen NEON. No revisé el código fuente o los controladores de Android, pero este es un modelo estándar. – Sam

Cuestiones relacionadas