precio - ¿Cuáles son las ventajas de armv7 sobre armv6 al compilar aplicaciones de iPhone?
iphone 8 (6)
Debe compilar para ambos si desea que su aplicación se ejecute en iPad y en todos los modelos toch de iPhone / iPod. Los dispositivos iOS antiguos usan arm6 y los nuevos usan arm7.
La única razón para no compilar para uno u otro sería el tamaño reducido de la aplicación, ya que solo necesita una versión compilada del código. Pero a menos que tenga una base de código grande, esta diferencia de tamaño de archivo será bastante marginal.
Si hay alguna ventaja ... no pude encontrar nada concluyente en los documentos.
Aparentemente, armv7 es una versión más nueva de iOS ... ¿es más rápido? ¿menor? Mejor en X?
Los dispositivos iOS anteriores (iPhone, iPhone 3G, iPod touch de primera y segunda generación) tenían CPU que solo admitían el conjunto de instrucciones de armv6. El iPhone 3G S (y el iPad y el iPod touch de tercera generación) tiene un procesador más nuevo que también es compatible con el conjunto de instrucciones de armv7. En general, armv7 es más rápido en estos procesadores más nuevos y se recomienda que al menos incluya una compilación armv7 en sus aplicaciones en el futuro (en una aplicación solo para iPad, probablemente solo pueda compilar para armv7).
Como señala Jasarien, el área de mayor diferencia entre los conjuntos de instrucciones es en operaciones de coma flotante. En armv6, las aplicaciones tendían a construirse usando el conjunto reducido de instrucciones Thumb para producir binarios más pequeños, pero el rendimiento del punto flotante del Thumb era terrible. Por lo tanto, era necesario desactivar Thumb porque quería cálculos de coma flotante más rápidos. En armv7, el conjunto de instrucciones Thumb-2 ya no tiene esta limitación, por lo que Apple recomienda que lo compile casi todo el tiempo.
Puede hacer que la configuración de Thumb build sea condicional para que esté desactivada para dispositivos más antiguos y para los más nuevos. Para hacer esto, vaya a la configuración de compilación de Xcode y seleccione la opción Compilar para el pulgar. Vaya al menú en la parte inferior izquierda de la pantalla y elija la opción Agregar condición de configuración de compilación. En la nueva condición de configuración de construcción, elija ARMv6 para la arquitectura, desactive Thumb para ello, agregue otra condición, elija ARMv7 para su arquitectura y habilite Thumb para ello.
Según la respuesta de Stephen Canon here , las operaciones de coma flotante de precisión simple y doble son compatibles con el hardware en armv6. Descubrí que la aritmética de precisión simple tiene un rendimiento ligeramente mejor en esta plataforma, quizás debido a que más operaciones se ajustan a la caché. En armv7, la unidad de coma flotante NEON SIMD solo funciona en operaciones de precisión simple, por lo que puede haber una gran diferencia en el rendimiento entre las operaciones de precisión simple y doble.
Otras preguntas que pueden ser de interés sobre este tema incluyen:
- "¿Cuáles son los beneficios / consecuencias de compilar una arquitectura solo armv7?"
- "¿Cómo afecta la modificación de la arquitectura de armv6 / armv7 a armv6 en mi aplicación para iPad? ¿Habrá pérdidas de rendimiento / estabilidad?"
- "iPhone que detecta el modelo de procesador / soporte de NEON"
- "Seno / coseno rápido para ARMv7 + NEON: buscando probadores ..."
Mira este enlace, tiene una buena descripción sobre las ventajas, diferencias, etc.
http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dht0001a/CHDEFAGB.html
Para mí, las principales ventajas de ARMv7 son:
- thumb-2
- NEÓN
NEON debe codificarse explícitamente, no se aprovecha de ello simplemente recompilando, pero si puede invertir el tiempo puede acelerar las operaciones de multimedia / juegos por un factor de 8. Sin embargo, el pulgar-2 es prácticamente una reducción gratuita en el tamaño del código casi no tiene ningún inconveniente (al contrario que el pulgar en ARMv6, que hace que el código de coma flotante sea mucho más lento en comparación con el modo ARM). Por supuesto, agregar otra versión de su ejecutable en ARMv7 no reducirá el tamaño de su ejecutable, pero reducirá su código en memoria, cachés, etc.
Una de las mayores diferencias es que la arquitectura armv6 tiene soporte de hardware para la aritmética de coma flotante de doble precisión, mientras que armv7 solo brinda soporte de software heredado para la aritmética de coma flotante de doble precisión.
Para compensar, la arquitectura armv7 tiene una unidad "NEON" que brinda soporte de hardware deslumbrantemente rápido para la aritmética de punto flotante de precisión simple.
Esto es algo que deberá tener en cuenta si está haciendo algo que involucre la aritmética de punto flotante, ya sea que lo haga en precisión simple o doble. Si lo hace con doble precisión, pero no necesariamente necesita esa cantidad de precisión, probablemente pueda obtener un impulso significativo en el rendimiento de los dispositivos armv7 utilizando una sola precisión.
Apple cubrió muchas de las diferencias entre armv6 y armv7 y una introducción al marco Accelerate en una de sus sesiones WWDC este año. Los videos aún deberían estar disponibles en iTunes (a partir de julio de 2010).
arm7 está más optimizado para iPod Touch (tercera generación) y iPhone 3GS y más nuevo. Necesitará usar ''Estándar / Arm6 + Arm7'' cuando compile para dispositivos más antiguos. En la práctica, no he visto mucha diferencia de rendimiento en mis aplicaciones.