2012-02-22 15 views
17

Me gustaría saber más sobre la CPU utilizada en los teléfonos con Android. La razón es que estamos construyendo la biblioteca C que tiene los indicadores de arquitectura de procesador de CPU/matemática que podemos establecer.Android ARMv6/v7 y VFP/NEON

  1. Hasta ahora hemos encontrado que las CPU todos los dispositivos Android son de diseño ARM y son o bien ARMv6 (los dispositivos más antiguos, las extremidades bajas, Huawei, ZTE, pequeña SE) o ARMv7 (tabletas de nido de abeja y todos más dispositivos caros, casi todos con resolución WVGA y superior) He comprobado ~ 20 dispositivos y todos tienen procesador de ese tipo. ¿Es eso correcto? ¿Hay algunos otros?

  2. Ahora, cuando se trata de la multimedia y operaciones matemáticas Creo que dos unidades son importantes - la VFP para la aritmética de coma flotante y el SIMD - NEON. Después de probar el grupo de dispositivos antes mencionado, descubrí que el soporte de VFP está en casi todos los dispositivos, mientras que NEON no. ¿Algún comentario a eso?

  3. No sé exactamente cuál es la diferencia ARMv6 y ARMv7 (además de la velocidad en general). Ahora estamos construyendo una biblioteca C multimedia, que tiene un par de banderas para construir. Mi pregunta es cómo enfocar la mayor cantidad de dispositivos en un lado y cómo permitir que los usuarios de los mejores dispositivos usen su hardware. Mi propuesta es preparar 3 compilaciones distintas: ARMv6/VFP, ARMv7/VFP y ARMv7/VFP/NEON. ¿Otras propuestas?

  4. El ARMv6/VFP Creo que debería funcionar en todas las configuraciones, excepto dispositivos, que no disponen de las VFP (por ejemplo, la edad HTC Wildfire) - pero los que seguirá sin tener apoyo.

¿Es este un buen enfoque? Cualquier comentario es bienvenido

Saludos, Sten

Respuesta

12
  1. Eso es correcto. Actualmente hay dos tipos: ARMv6 y ARMv7. Lo más probable es que en el futuro cercano haya un objetivo x86 adicional. El NDK más nuevo ya admite compilaciones para él.

  2. VFP es obligatorio en ARMv7, pero no en ARMv6. NEON es opcional, y no todos los dispositivos lo admiten. El ejemplo más claro es Nvidia Tegra 2. Se implementa en la mayoría de las tabletas y teléfonos de gama alta, pero no es compatible con NEON. Nvidia Tegra 3 es compatible con NEON.

  3. Creo que debe apegarse a ARMv6 con emulación de coma flotante, ARMv7 + VFP, ARMv7 + NEON.

  4. Exactamente: VFP no es compatible con todos los dispositivos ARMv6. Así que simplemente no lo uses allí. Por defecto, NDK construye el objetivo armeabi que está destinado a dispositivos ARMv6 y no utiliza VFP. armeabi-v7a construye para ARMv7 y usa VFP.

4

Es cierto que la mayoría de los dispositivos Android caen en estas tres categorías:

1) ARMv6

2) ARMv7

3) ARMv7 + NEON

El NDK no es compatible con esto por completo No hay ningún tipo de generación ARMv6 ABI, sólo hay dos tipos de generación ARM soportadas por el NDK:

1) ARMv5 (que se desarrollará en todos los dispositivos ARM Android)

2) ARMv7 (con el uso opcional de VFP y NEON)

Las limitaciones impuestas por esto son que si desea usar las instrucciones ARMv6 (del código C o ASM), debe apuntar al ARMv7 ABI en el NDK.

7

Me concentraría en v7.

Apenas hay productos nuevos que se envíen con v6, y para cuando su biblioteca esté lista para producción, v6 no tendrá problemas.

aquí algo de información: - Neon incluye SIEMPRE VFP - Coretex A8 se pueden caracterizar por cualquiera de neón o ninguno - El programa de científicos de neón del A8 es en realidad VFP-lite que es mucho más lento. Mucho más lento que el VFP de V6. - Coretex A9 y superior pueden tener Neon, VFP o ninguno. - V7 tiene muchas instrucciones mejoradas muy adecuadas para operaciones matemáticas además de la capacidad de doble emisión. - Los proveedores de chips pueden omitir Neon e incluso VFP, pero pagan la misma tarifa de licencia a ARM independientemente. Solo ahorrarían muy poco en costos de fabricación. - Neon es extremadamente poderoso en manos capaces, pero no puede hacer doble precisión. - Excepto por los que tienen el Tegra sin neón, no conozco ningún teléfono con Android basado en v7 que no tenga Neon. (La razón es anterior) - Tegra3 tiene Neon