Pregunta

Empecé a jugar con el NDK de Android.Una de las cosas que acabo de aprender es cómo crear un archivo application.mk para especificar la abi de armv7.

Estoy construyendo el ejemplo de San Ángeles con los siguientes parámetros.

APP_MODULES      := sanangeles
APP_PROJECT_PATH := $(call my-dir)/../
APP_OPTIM        := release
APP_ABI          := armeabi-v7a

Sin embargo, esto parece funcionar exactamente a la misma velocidad que antes (es decir, mal).¿Estoy limitado por GL y no por CPU o hay algún problema aquí?

He notado que cuando compilo obtengo las siguientes opciones de línea de comando:

-march=armv7-a -mfloat-abi=softfp -mfpu=vfp -mthumb 

Lo que me preocupa es el "softfp".HAY mención de v7 abi, el material VFP fpu y supongo que el "pulgar" se refiere a las instrucciones "pulgar-2" (aunque no sé qué son exactamente).Sin embargo, ese "softfp" sí me preocupa.¿No debería ser "duro"?

¿Alguien tiene alguna idea sobre estas preguntas?Creo que probablemente estoy listo para comenzar a implementar algo de código GL ES 2.0 para mi HTC Desire, pero me gustaría asegurarme de obtener la mejor velocidad posible :)

¡Saludos de antemano!

¿Fue útil?

Solución

Las opciones que proporciones al NDK solo afectarán la forma en que se compila tu código.No cambiará las bibliotecas GL ni cualquier otra cosa que forme parte de la plataforma, que siempre se generan de manera adecuada.Si simplemente estás lanzando geometría al hardware GL, no verás la diferencia.

Si desea ver si sus opciones están teniendo efecto, descargue (o cree) un punto de referencia simple que realice un montón de operaciones con valores de coma flotante de doble precisión y calcule cuánto tiempo lleva ejecutarse antes y después.

El argumento -mfloat-abi=softp determina cómo se pasan los valores de punto flotante entre funciones.softfp significa que siempre se pasan en registros enteros o en la pila.Si Android no especificara softfp, la versión ARMv7-A de la biblioteca esperaría que aparecieran flotantes en los registros de hardware, y cualquier código creado para ARMv5TE se rompería.

"softfp" agrega un poco de sobrecarga a algunas funciones, pero las instrucciones para mover valores dentro y fuera de los registros fp son económicas en ARM, y la compatibilidad ABI proporcionada hace que valga la pena.

El "-mthumb" permite la generación de código Thumb/Thumb2.El código de pulgar tiende a ser un poco más lento pero un poco más pequeño que el ARM equivalente;a veces, más pequeño significa que encajará mejor en el i-cache de la CPU y, de hecho, funcionará más rápido.El tamaño siempre es una preocupación en estos dispositivos, por lo que Thumb está habilitado de forma predeterminada.

En caso de duda, "arm-eabi-objdump -d what.o" le mostrará un desmontaje de su código.

Actualizar: NDK r9b Se agregó soporte para -mhard-float.Esto le permite crear bibliotecas NDK con convenciones API flotantes para objetivos armeabi-v7a.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top