He estado desarrollando código C++ para realidad aumentada en dispositivos ARM y la optimización del código es muy importante para mantener una buena velocidad de cuadros. Para elevar la eficiencia al nivel máximo, creo que es importante recopilar consejos generales que hagan la vida más fácil para los compiladores y reduzcan el número de ciclos del programa. Cualquier sugerencia es bienvenida.C++ Consejos para la optimización de código en dispositivos ARM
1- Evitar las instrucciones de alto costo: división, raíz cuadrada, seno, coseno
- Use cambios lógicos para dividir o multiplicar por 2.
- Multiplicar por la inversa cuando sea posible.
2- Optimizar interior "para" bucles: son un botleneck por lo que debemos evitar hacer muchos cálculos en el interior, especialmente divisiones, raíces cuadradas ..
3- Use tablas de consulta para algunas funciones matemáticas (sin, cos, ...)
herramientas útiles
- objdump: obtiene el código de ensamblado del programa compilado. Esto permite comparar dos funciones y comprobar si está realmente optimizada.
** Tenga cuidado **: hoy en día el cuello de botella es la memoria más de las veces (y por lo tanto LUT no son tan buenos ...). Puede ser diferente en ARM, hay que admitirlo, pero ... mejor que compruebes que inviertas para nada. –
Sí. Pero en aplicaciones en tiempo real, realizando muchos cálculos por cuadro, créame que la optimización puede ahorrar "algunos fotogramas por segundo". Diga "algunos" son 8 cuadros por segundo, como en mi caso, por eso creo que esta pregunta es importante. –
¿Tiene la posibilidad de verificar diferentes métricas, como errores de caché, accesos de bus de memoria, etc.? Esto también es muy útil para saber si su mem bus es un cuello de botella. Por cierto, fuera de tema, (donostia == San Sebastián)? Si es así, ¡realmente me gusta esa ciudad! – Brady