Android ARMv6/v7 y VFP/NEON
armv7 (3)
Eso es correcto. Actualmente hay dos tipos: ARMv6 y ARMv7. Lo más probable es que en el futuro más cercano, además, se xx objetivo. El NDK más nuevo ya soporta compilaciones para él.
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 soporta NEON.
Creo que deberías apegarte a ARMv6 con emulación de punto flotante, ARMv7 + VFP, ARMv7 + NEON.
Exactamente: VFP no es compatible con todos los dispositivos ARMv6. Así que simplemente no lo uses allí. Por defecto, el NDK construye el objetivo de armeabi destinado a dispositivos ARMv6 y no usa VFP. armeabi-v7a construye para ARMv7 y usa VFP.
Me gustaría entender más la CPU utilizada en los teléfonos Android. La razón es que estamos construyendo la biblioteca de C que tiene ciertos indicadores de arquitectura de CPU / procesador matemático que podemos establecer.
Hasta ahora hemos encontrado que todas las CPU de los dispositivos Android tienen un diseño ARM y son ARMv6 (dispositivos más antiguos, bajos, Huawei, ZTE, pequeño SE) o ARMv7 (tabletas Honeycomb y todos los dispositivos más 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?
Ahora, cuando se trata de operaciones multimedia y matemáticas, creo que dos unidades son importantes: la VFP para la aritmética de punto flotante y la SIMD - NEON . Después de probar el grupo de dispositivos mencionado anteriormente, descubrí que la compatibilidad con VFP se encuentra en casi todos los dispositivos, mientras que NEON no. ¿Algún comentario a eso?
No sé qué es exactamente la diferencia de ARMv6 y ARMv7 (además de la velocidad en general). Ahora estamos construyendo una biblioteca multimedia en C, que tiene un par de banderas para construir. Mi pregunta es cómo dirigir la mayor cantidad de dispositivos en un lado y cómo permitir que los usuarios de los mejores dispositivos utilicen su hardware. Mi propuesta es preparar 3 compilaciones distintas: ARMv6 / VFP, ARMv7 / VFP y ARMv7 / VFP / NEON. Otras propuestas?
El ARMv6 / VFP creo que debería ejecutarse en todas las configuraciones, excepto en los dispositivos, a los que les falta el VFP (por ejemplo, el antiguo HTC Wildfire), pero no se admitirán.
¿Es este un buen enfoque? Cualquier comentario es bienvenido.
Saludos, STeN
Es cierto que la mayoría de los dispositivos Android se encuentran en estas tres categorías:
1) ARMv6
2) ARMv7
3) ARMv7 + NEON
El NDK no soporta esto completamente. No hay un objetivo de compilación ABI ARMv6, solo hay dos objetivos de compilación ARM admitidos por el NDK:
1) ARMv5 (que se ejecutará en todos los dispositivos ARM de Android)
2) ARMv7 (con uso opcional de VFP y NEON)
Las limitaciones impuestas por esto son que si desea usar instrucciones ARMv6 (de código C o ASM), debe apuntar a la ABI ARMv7 en el NDK.
Me concentraría en v7.
Casi no hay nuevos productos que se envíen con v6, y para cuando su biblioteca esté lista para la producción, v6 no será un problema.
Aquí hay alguna información: - Neon SIEMPRE incluye VFP - Coretex A8 puede incluir Neon o ninguno - La VFP en A8''s Neon es en realidad VFP-lite, que es bastante más lenta. Mucho más lento que el VFP de V6. - Coretex A9 y superior pueden incluir Neon, VFP o ninguno. - V7 tiene muchas instrucciones mejoradas que se adaptan bien a operaciones matemáticas además de la capacidad de doble problema. - Los proveedores de chips pueden omitir Neon e incluso VFP, pero pagan la misma tarifa de licencia a ARM independientemente. Solo ahorraban muy poco en costos de manufactura. - El neón es extremadamente poderoso en manos capaces, pero no puede hacer doble precisión. - A excepción de los que tienen el Tegra sin neón, no conozco ningún teléfono Android basado en v7 que no tenga Neon. (La razón es arriba) - Tegra3 tiene Neon