Chapter 5.1 : Introduction
La qualité du format de données et plus particulièrement la qualité des structures qu'il contient est le point clé de la performance des calculs, bien plus importante que l'optimisation de ceux-ci. Un algorithme optimisé ou une implémentation vectorisée sera d'aucune utilité sur un format de données lent.De ce point de vue, la qualité d'un format de données est critique sur plusieurs aspects :
- Tout d'abord, il joue le rôle de fondation sur laquelle sera bâti tout le programme qui l'utilisera. Cela implique qu'une erreur de conception du format de données sera payée d'autant plus cher que l'on identifiera ses défauts tardivement. À l'extrème, un programme qui serait très lié à son format de données devra être intégrallement réécrit si celui-ci change trop, ce qui se conclut généralement par une impasse, où l'on est obligé de ce contenter que ce que l'on a sans pouvoir l'amméliorer.
- Le format de données influence aussi les limites des optimisations possibles. Le fait qu'un programme soit I/O band ou memory band (dominé par les I/O ou dominé par les calculs) et très lié à son format de données. Un programme qui utilise un format de données lent sera potentiellement I/O band, alors qu'il serait potentiellement memory band avec un format de données efficace.
- Un aspect qui découle des précédents est qu'un format de données efficace ouvre la porte à des optimisations tout aussi eficaces. A contrario on pourrait conclure hâtivement qu'une optimisation n'est pas efficace sur telle ou telle application alors que le ralentissement est du au format de données.
D'où l'importance de profiler son application avant de chercher à optimiser les calculs (voir partie 1).
Dans la suite, nous expliquerons, d'une part, pourquoi la structure des données est importante pour les performances, et d'autre part, pourquoi on dit qu'il vaux mieux utiliser des structures de tableaux (SoA, Struture of Array) plutôt que des tableaux de structures (AoS, Array of Structures).