2009-10-26 18 views
47

Acabo de enterarme de que el iphone no puede hacer doblemente de forma nativa, lo que hace que sea mucho más lento que el flotador normal.Double vs float en el iPhone

¿Es esto cierto? ¿Evidencia?

Estoy muy interesado en el problema porque mi programa necesita cálculos de alta precisión, y tendré que comprometer la velocidad.

Respuesta

71

El iPhone puede hacer aritmética de precisión simple o doble en el hardware. En el 1176 (iPhone original y iPhone3G), operan aproximadamente a la misma velocidad, aunque puede caber más datos de precisión simple en los cachés. En el Cortex-A8 (iPhone3GS, iPhone4 y iPad), la aritmética de precisión simple se realiza en la unidad NEON en lugar de en VFP, y es sustancialmente más rápida.

Asegúrese de desactivar el modo pulgar en sus configuraciones de compilación para armv6 si está haciendo un cálculo de coma flotante intensivo.

+0

Tengo curiosidad por saber de dónde sacaste la información. –

+1

@Ben: tal vez simplemente lo sabía, pero si revisas mi publicación, los enlaces proporcionan exactamente esa información y Google devuelve muchos más éxitos sobre este tema. – Abel

+24

Los manuales de referencia de arquitectura (disponibles sin ARM en este caso), un desensamblador (otool) y ciclos de temporización cuidadosamente escritos son suficientes para obtener esta información sobre prácticamente cualquier arquitectura. –

10

El manual ARM1176JZF-S dice que admite números de punto flotante de doble precisión. Deberías estar en buena forma. Aquí hay un link en la documentación en PDF. Los iPhones posteriores son chips Cortex, y ciertamente no deberían ser menos capaces.

12

This slide show da una idea de por qué no hay un buen punto flotante y por qué existe (la unidad de coma flotante de vector). Aparentemente, es importante que revises el "modo pulgar", que influye sobre si está activado o no el soporte de coma flotante. Esto no siempre es una mejora. Muestra cómo encontrar las instrucciones correctas en el código de ensamblaje.

También depende de what version of the phone que desee ejecutar su código. El más reciente parece "más capaz" al hacer matemática de coma flotante.

EDITAR: aquí hay una lectura interesante en floating point optimizations en el ARM con VFP y NEON SSE.

Cuestiones relacionadas