Optimisation pour les plates-formes Intel Atom lors du développement d'applications MeeGo
-
-march=atom -O3 -flto -mfpmath=sse -ffast-math
Le dernier flag, -ffast-math, accélérera considérablement les opérations mathématiques, particulièrement dans les boucles, mais il risque également d'entraîner un certain manque de précision dans vos résultats.
Par ailleurs, si vous avez de nombreuses sous-fonctions, nous vous recommandons de faire précéder par inline celles de ces fonctions qui consistent au maximum en une dizaine de lignes de code.
Exemple :
-
inline int max(int a, int b) {
return a > b ? a : b;
}
Dans l'architecture des CPU Intel Atom, il est présupposé que l'adresse de retour qui n'est pas poussée dans la pile d'appels ne sera pas affichée (retournée depuis la sous-fonction) pendant un bref laps de temps. Si la sous-fonction retourne trop vite, le CPU Atom imposera en fait un surcoût à l'ensemble de l'opération. L'application d'inline à des fonctions brèves aide à atténuer le problème. Cela dit, nous recommandons de n'appliquer l'inline qu'avec parcimonie. Les fonctions inline augmentent l'empreinte mémoire pendant l'exécution. L'application d'inline à des fonctions brèves réduira le coût imposé par Atom sans trop augmenter l'empreinte mémoire. En règle générale, nous recommandons de n'appliquer inline qu'aux fonctions comportant, au grand maximum, une dizaine de lignes de code.
Nous recommandons également d'utiliser dans toute la mesure du possible des types de données flottants plutôt que doubles. Le chargement et le stockage de doubles utilisent de la bande passante mémoire supplémentaire. L'accélération apportée par des types de données flottants plutôt que doubles est très minime, mais la bande passante mémoire ainsi économisée est disponible pour les autres codes. Cela ne pourra qu'améliorer les performances globales du système.
Petit rappel : Intel Atom est hyperthreadé. Sur un système Atom monocœur, vous verrez deux processeurs disponibles. Nous vous encourageons fortement à essayer d'implémenter le multithreading dans votre application.