Android ARMv6 / v7 y VFP / NEON

Me gustaría entender más la CPU utilizada en los teléfonos Android. La razón es que estamos construyendo la biblioteca C que tiene los indicadores de la arquitectura del procesador de CPU / matemáticas que podemos establecer.

  1. Hasta ahora hemos encontrado que todas las CPUs de los dispositivos Android son de diseño ARM y son ARMv6 (dispositivos antiguos, extremos bajos, Huawei, ZTE, SE pequeño) 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 otros?

  2. Ahora, cuando se trata de las operaciones multimedia y matemáticas creo que dos unidades son importantes: el VFP para la aritmética de punto flotante y el SIMD – NEON . Después de probar el mencionado grupo de dispositivos he encontrado que el soporte VFP está en casi todos los dispositivos, mientras que NEON no. ¿Algún comentario a eso?

  3. No sé qué es exactamente la diferencia ARMv6 y ARMv7 (además de la velocidad en general). Ahora estamos construyendo una biblioteca de multimedia C, que tiene par de banderas para la construcción. Mi pregunta es cómo orientar el mayor número de dispositivos en un lado y cómo permitir que los usuarios de los mejores dispositivos para utilizar su hardware. Mi propuesta es preparar 3 distintas versiones: ARMv6 / VFP, ARMv7 / VFP y ARMv7 / VFP / NEON. ¿Otras propuestas?

  4. Creo que el ARMv6 / VFP debería funcionar en todas las configuraciones, excepto en los dispositivos, que faltan al VFP (por ejemplo, el antiguo HTC Wildfire), pero los que no serán compatibles.

¿Es esto un buen enfoque? Cualquier comentario es bienvenido.

Saludos, STeN

  1. Eso es correcto. Actualmente hay dos tipos – ARMv6 y ARMv7. Lo más probable en el futuro más próximo, además, x86 objetivo. Más reciente NDK ya soporta las compilaciones para ello.

  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 despliega en la mayoría de los tablets y teléfonos de gama alta, pero no es compatible con NEON. Nvidia Tegra 3 soporta NEON.

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

  4. Exactamente: VFP no es compatible con todos los dispositivos ARMv6. Así que simplemente no lo use allí. De forma predeterminada, NDK genera una meta armeabi destinada a dispositivos ARMv6 y no utiliza VFP. Armeabi-v7a se basa para ARMv7 y utiliza VFP.

Me concentraría en v7.

Casi no hay nuevos productos de envío con v6, y para el momento en que su biblioteca está lista para la producción, v6 no será problema.

Aquí están algunas informaciones: – Neon SIEMPRE incluye VFP – Coretex A8 puede presentar Neón o ninguno – El VFP en A8 Neon es en realidad VFP-lite que es bastante más lento. Mucho más lento que el VFP de V6. – Coretex A9 y superiores pueden incluir Neon, VFP, o ninguno. – V7 tiene muchas instrucciones mejoradas muy adecuadas para operaciones matemáticas al lado de la capacidad de doble problema. – Los proveedores de chips pueden omitir Neon e incluso VFP, pero pagan la misma cuota de licencia a ARM independientemente. Sólo ahorrarían muy poco en costos de fabricación. – Neon es extremadamente potente en manos capaces, pero no puede hacer doble precisión. – Excepto para los con el neonless Tegra, no v7 basado en el teléfono Android es conocido para mí que no cuenta con Neon. (La razón está arriba) – Tegra3 tiene neón

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 lo soporta completamente. No hay ningún objetivo de compilación ARMv6 ABI, sólo hay dos objetivos de compilación ARM compatibles con el NDK:

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

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

Las limitaciones impuestas por esto son que si desea utilizar ARMv6 instrucciones (de código C o ASM), es necesario orientar el ARMv7 ABI en el NDK.

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.