Si l’optimisation de code a toujours été une question importante pour certains programmeurs, la grande majorité des compilateurs actuels effectuent automatiquement des optimisations. En effet, la plupart des nouveaux compilateurs pratiquent de façon automatique un certain nombre d’optimisations qu’il serait fastidieux d’effectuer manuellement et qui rendraient le code source moins lisible. L’optimisation de la part du compilateur est généralement mise en œuvre en utilisant une séquence de transformations, des algorithmes qui transforment un programme en un programme de sortie sémantiquement équivalent, mais qui utilise moins de ressources.
Il existe de nombreuses techniques d’optimisation, l’une d’elles étant la vectorisation. Il s’agit d’une optimisation de code qui transforme des boucles (un ensemble d’instructions scalaires) en instructions vectorielles. L’idée de base est qu’une boucle (sur une série d'éléments scalaires) peut être transformée en une unique instruction vectorielle (sur une série d'éléments). Cette dernière peut en plus être considérablement plus rapide que la boucle équivalente. Toutefois, le processus d’ajout de vectorisation à votre code peut sembler une tâche ardue.
En effet, de nombreux problèmes peuvent empêcher la vectorisation ou la rendre inefficace, privant ainsi les développeurs du bénéficie de cette accélération remarquable de leur code. Cela n’empêche que la vectorisation est absolument nécessaire si vous voulez tirer le meilleur parti du matériel moderne. Cependant, il convient de noter que la vectorisation automatique est encore un sujet de recherche majeur en informatique. Des recherches se poursuivent pour trouver des méthodes qui permettent à un compilateur de convertir (sans assistance humaine) des programmes scalaires en programmes vectorisés.
C’est donc en voulant rendre plus facile d’optimiser un code par cette technique qu’Intel a conçu la dernière version d’Intel Advisor XE. Il s’agit d’un outil d’assistance à la vectorisation SIMD pour C, C++, C# et Fortran. Intel Advisor XE est disponible sur les systèmes Windows et Linux sous forme d’outil GUI autonome, d'extension à Microsoft Visual Studio ou d’interface en ligne de commande. Il permet une analyse des applications pour déterminer leur profit des architectures SIMD. Ce sont en général les applications qui utilisent beaucoup de tableaux, de matrices ou de structures de données similaires. On peut notamment citer les applications scientifiques ou de traitement du signal.
Pour que la vectorisation soit possible et efficace, Intel Advisor XE fournit des informations détaillées sur les inefficacités SIMD existantes et sur les manières de résoudre les problèmes empêchant cette optimisation. L’outil peut vous aider à vectoriser efficacement votre code, à l’aide d’une méthodologie dont les étapes sont les suivantes :
- enquête : cette étape indique sur quelles boucles vous passez du temps, avec des statistiques SIMD détaillées ;
- nombres de parcours : il s’agit de mesurer le nombre d’itérations et le nombre d’appels pour chaque boucle ;
- recommandations : à cette étape, l’outil donne des conseils spécifiques sur la façon de résoudre les problèmes qui pourraient empêcher l’optimisation ou la rendre inefficace ;
- analyse de dépendances : Intel Advisor XE fournit une analyse dynamique des dépendances, afin de vérifier si une boucle a des dépendances croisées entre itérations ;
- analyse des tendances d’accès à la mémoire : à cette étape, l’outil vérifie si vous accédez à la mémoire de manière favorable pour la vectorisation.
Un livre blanc sur la vectorisation est disponible en téléchargement. Il permet de mieux appréhender les difficultés de la vectorisation et comment la mettre en œuvre de manière efficace et facilement. L’article montre également, sur des exemples de code réel, comment utiliser Intel Advisor XE pour optimiser les codes vectoriels. Dans l’exemple traité, l’outil d’assistance à la vectorisation d’Intel a permis une accélération du code par un facteur de 3,2.
Téléchargez le livre blanc sur la vectorisation et son implémentation avec Intel Advisor XE