Ho sviluppato codice C++ per la realtà aumentata su dispositivi ARM e l'ottimizzazione del codice è molto importante al fine di mantenere un buon frame rate . Al fine di aumentare l'efficienza al livello massimo, penso che sia importante raccogliere suggerimenti generali che semplificano la vita dei compilatori e riducono il numero di cicli del programma. Qualsiasi suggerimento è accolto favorevolmente.C++ Suggerimenti per l'ottimizzazione del codice su dispositivi ARM
1- Evitare istruzioni ad alto costo: divisione, radice quadrata, seno, coseno
- Utilizzare i turni logiche per dividere o moltiplicare per 2.
- Moltiplicare per l'inverso, quando possibile.
2- Optimize interno "per" loop: sono un botleneck quindi dovremmo evitare di fare molti calcoli all'interno, in particolare le divisioni, radici quadrate ..
3- Utilizzare tabelle look-up per alcune funzioni matematiche (sin, cos, ...)
STRUMENTI UTILI
- objdump: ottiene il codice assembly del programma compilato. Ciò consente di confrontare due funzioni e verificare se è davvero ottimizzata.
** Attenzione **: al giorno d'oggi il collo di bottiglia è la memoria più spesso che no (e quindi LUT non sono così grandi ...). Potrebbe essere diverso su ARM, bisogna ammetterlo, ma ... meglio controllare che non investi per niente. –
Sì. Ma nelle applicazioni in tempo reale, eseguendo molti calcoli per fotogramma, credetemi che l'ottimizzazione può salvare "alcuni fotogrammi al secondo". Dire "alcuni" sono 8 fps, come nel mio caso, ecco perché penso che questa domanda sia importante. –
Hai la possibilità di controllare diverse metriche, come mancate cache, accessi al bus di memoria, ecc.? Questo è anche molto utile per sapere se il tuo mem bus è un collo di bottiglia. BTW, fuori tema, (donostia == San Sebastian)? Se è così, mi piace davvero quella città! – Brady