Pour obtenir les meilleures performances sur votre système, il est crucial de déterminer dans quelle mesure votre application est vectorisée. Dans cet article, nous vous montrerons comment identifier les problèmes de vectorisation, vérifierons si vous utilisez bien votre matériel, et optimiserons les performances à l'aide d'Intel Advisor, disponible en version gratuite.
Intel Advisor vous aide à mettre en évidence :
…Et bien plus encore !
Pour obtenir des performances optimales, vous avez besoin des informations sur la manière dont vous utilisez toutes les ressources du système. La nouvelle vue récapitulative améliorée d'Intel Advisor (Figure 1) vous donne une indication de la performance de l'application dans son ensemble.
Figure 1 – Vue d’ensemble d’Intel Advisor
Vous pouvez voir les jeux d'instructions de vectorisation utilisés et plusieurs métriques de performance utiles. Cette vue inclut maintenant une section « Program Characteristics », qui compare votre performance relative à la performance maximale que vous pouvez obtenir. Dans la figure 1, vous remarquerez que l'application utilise plusieurs ensembles d'instructions différents, c’est quelque chose que nous devrions examiner. Notez également que le programme obtient une efficacité de vectorisation de seulement 42%. Mais alors, où avons-nous perdu 58 % de notre efficacité ?
Vous pouvez obtenir plus de détails dans l'onglet « Survey & Roofline » (Figure 2). Cette vue donne les détails boucle par boucle. Intel Advisor indique si la boucle est vectorisée et son efficacité. Si le compilateur n'a pas pu vectoriser la boucle, Intel Advisor peut vous dire pourquoi. La colonne « Performance Issue » vous donne des indices sur les raisons de la perte d’efficacité.
Figure 2 – Menu « Survey and rooftop »
L'analyse du jeu d'instructions (Figure 3) permet d’analyser avec précision ce que le compilateur a fait pour vectoriser votre code. Il montre :
La colonne « Traits » indique les manipulations sur la mémoire que le compilateur a dû faire pour adapter votre structure de données dans un vecteur. Ces manipulations de la mémoire peuvent être des indicateurs d’un problème d’efficacité.
Figure 3 – Instruction set analysis
Dans notre exemple d'application, la boucle principale utilise Intel AVX-512, mais les largeurs vectorielles sont seulement de 128 et 256. Intel Advisor vous avertit si votre application semble être en manque de performances et vous donne des conseils d’ajustement (Figure 4).
Figure 4 – Message d’avertissement
La recompilation pour activer les registres ZMM donne l'analyse du jeu d'instructions de la figure 5. La plupart de nos boucles utilisent maintenant les 512 octets complets des registres vectoriels. Dans notre exemple, l'utilisation des registres ZMM a amélioré les performances. Cependant, ce n'est pas toujours le cas.
Figure 5 – Instruction Set Analysis
Les onglets centraux de l'interface graphique d'Intel Advisor contiennent une mine d'informations sur le programme (Figure 6).
Figure 6 – Intel Advisor : menu GUI
L'onglet « Recommendations » est un excellent moyen d'obtenir des conseils pour améliorer la performance (Figure 7). Par exemple, si une boucle n'a pas été vectorisée, l'onglet peut vous dire pourquoi avec des exemples de code montrant comment résoudre le problème.
Figure 7 – Onglet « Recommendations »
La partie « Code Analytics » (Figure 8) affiche des détails sur ce qui se passe dans vos boucles. Vous pouvez y voir les performances sur un niveau élevé, ou obtenir des statistiques pour toutes les opérations ainsi qu'un résumé du mix d'instructions.
Figure 8 – Intel Advisor Code Analytics
Vous pouvez obtenir des statistiques pour toutes les opérations, y compris les opérations à virgule flottante (FLOPS), à nombre entier (INTOP) ou mixte (INT+FLOAT) (Figure 9). Cela vous donne une vue détaillée de certains indicateurs de performance clés, montrant combien d'instructions sont exécutées par seconde. Cette vue donne également des métriques sur la façon dont est utilisée la hiérarchie mémoire dans vos boucles.
Figure 9 – Des statistiques pour toutes vos opérations
Quels types d'instructions contiennent vos boucles ? Sont-elles basées sur le calcul ou la mémoire ? Intel Advisor peut répondre à ces questions et vous donner à la fois le nombre d'instructions statiques et dynamiques ainsi qu’un résumé du mix d'instructions statiques (Figure 10). Vous obtenez aussi le pourcentage de chaque instruction que vous exécutez.
Figure 10 – Résumé du mix d’instructions statiques
Il est crucial d'optimiser la vectorisation de votre programme. Comprendre comment votre programme est vectorisé à l'aide d'un outil comme Intel Advisor peut vous aider à vous assurer que vous tirez le meilleur parti de votre matériel.
Source : Kevin O’Leary, Technical Consulting Engineer, Intel Corporation
Traduction : Maxime de Courville, RITME