11.3.7.4 : Vectoriser un nouveau programme



Si le programme est nouveau, il devra être conçu pour permettre son optimisation (voir chapitre 11.2), sa vectorisation, et sa parallélisation (voir chapitre 11.4).

Sa conception devra prendre en compte les caractéristiques de performance du matériel moderne et faciliter l'optimisation des composants les plus critiques pour la performance du programme.

Il est aussi possible de choisir, un compilateur spécifique, une bibliothèque ou un générateur de code pour vectoriser (voirsection 11.3.4). Cette tâche sera alors déléguée à une dépendance extérieure du programme qui devra être suivie avec le plus grand soin.

Le choix du compilateur est particulièrement important, puisque ceux-ci évoluent rapidement et ils optimisent et vectorisent de mieux en mieux. Ainsi, forcer l'utilisation d'un compilateur ancien pour des raisons de sûreté des résultats empêchera une utilisation efficace des architectures récentes sans pour autant être un gage réel de stabilité (voirsection 11.9.5.1).



Depuis une quinzaine d'années, les processeurs sont capables au sein d'un même cœur de calcul d'effectuer plusieurs calculs simultanément. Ne pas utiliser cette fonctionnalité revient à passer à côté de $75$ à $93,75\,\%$ de la puissance de calcul brute de la machine utilisée. Il n'est pas envisageable de passer à côté d'une telle puissance de calcul.

Pour ce faire, les différentes techniques de vectorisation doivent être partagées. Si les langages C++ ou Rust sont trop bas niveau pour les non-experts, ils sont indispensables pour explorer de nouvelles possibilités d'optimisations ou de vectorisation. Les langages plus haut niveaux comme Python ou Julia permettent à des utilisateurs moins avancés une expressivité importante de leur calcul.

Là où Python offre un système de développement relativement simple, mais une exécution lente, Julia offre des temps d'exécution comparables au C mais avec des latences importantes durant le développement.