Test de Intel Parallel Studio 2011

Matthieu Brucher

Intel vient de mettre à jour Parallel Studio avec un nouveau module complet d'aide à la parallélisation, Advisor. Je vais reprendre le test précédent sous le jour de cette nouvelle version.

Commentez ?

- Titre : Test de Intel Parallel Studio 2011

- Auteur : Matthieu Brucher

- Parution : 7 décembre 2010

- Licence : Copyright ® 2010 Matthieu Brucher. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.

Sommaire

- I. Introduction

- II. Workflow

- III. Profil du code séquentiel

- IV. Annotation des sources

- V. Étude de scalabilité

- VI. Correction

- VII. Conclusion

I - Introduction

Après Advisor Lite, Intel a développé un plugin plus complet permettant de gérer la parallélisation. Il permet de détecter les points critiques (en se basant sur Amplifier), de placer des points à paralléliser et de tester la parallélisation potentielle.

Il est aussi à noter qu'Intel a profité de cette mise à jour pour intégrer dans ses flagships des parties de Parallel Studio, y compris Vtune qui a récupéré sous Linux Amplifier. Cela est une excellente nouvelle pour les développeurs Linux qui n'avaient pas accès à cette technologie.

Je ne ferai pas de test d'Amplifier, Composer ou Inspector, ces plugins sont restés très proches de la version 2010 testée précédemment.

II - Workflow

Advisor fonctionne sous la forme d'un workflow à suivre :

- profil du code pour trouver les points chauds ;

- annotation du code source ;

- profil du code annoté afin de déterminer le parallélisme résultant ;

- test de la correction du code annoté (accès mémoire concurrents…) ;

- ajout du code parallèle.

Le workflow peut se suivre sur l'écran de droite de la fenêtre de Visual Studio :

Page de démarrage de Advisor

À noter que pendant la bêta, il n'était pas possible de passer à une étape sans avoir effectué les précédentes. Il est aussi arrivé qu'il ne soit pas possible de passer aux étapes suivantes pour des raisons inconnues. Le fonctionnement actuel est largement meilleur.

III - Profil du code séquentiel

La création d'un profil est très simple. Il suffit en mode release d'appuyer sur le bouton de la première étape.

Le profil a été tiré de ma série de tutoriels sur un raytracer temps réel. Il est généré à partir d'un script Python qui ne fait que calculer l'image sans l'afficher.

Profil de la génération d'une image

On constate que la majeure partie du temps est passé dans la méthode IRT::UniformSample<float>::computeColor, qui est, elle, appelée pour chaque pixel de l'image par le Raytracer et la méthode draw().

IV - Annotation des sources

Maintenant que le profil est analysé, on peut passer à l'annotation des sources. Cette phase est manuelle et nécessite l'ajout d'un en-tête spécifique à Advisor. Par la suite, on ajoute des macros indiquant quelles sont les zones que nous pensons pouvoir paralléliser ainsi que les sous-tâches.

Annotation de la méthode draw()

V - Étude de scalabilité

Une fois le code source annoté, Advisor permet de faire une étude de scalabilité. D'après ce qui a été annoté, Advisor crée une estimation de ce qu'il serait possible d'accomplir.

Étude de scalabilité

Cette fenêtre est potentiellement la plus intéressante. Advisor donne plusieurs conseils permettant de modifier le résultat de la parallélisation. Dans le cas présent, il est nécessaire de faire un découpage par groupe de tâches. Une fois cela accompli, la parallélisation sera plus efficace, même si la scalabilité elle-même reste assez restreinte.

VI - Correction

L'étude de correction est la dernière étape avant la mise en place de la parallélisation. C'est à cette étape qu'Advisor va effectuer une vérification des accès mémoire concurrents entre les tâches. On retrouve donc des éléments d'Inspector, sauf que le code n'est pas encore parallèle.

Il peut y avoir plusieurs types de problèmes mémoire à résoudre. Il existe des macros pour protéger certaines mémoires, dans d'autres cas, il faudra revoir la structure du code, et à chaque fois, la scalabilité et la correction doivent être revues.

Rapport de correction de l'application

Lorsqu'un problème est rencontré, il est possible de l'analyser en détail avec la pile des appels.

Exemple de problème mémoire détecté

Petit détail, il est nécessaire de faire cette analyse en mode debug (pas la moindre optimisation), contrairement au profil qui est effectué en mode release.

VII - Conclusion

Une fois l'analyse finie, il faudra encore coder la réelle parallélisation, mais en réalité, le travail a été simplifié par les diverses annotations.

Dans l'absolu, Advisor ne semble pas utile jusqu'à ce qu'on l'utilise. Sa réelle plus-value réside dans le mécanisme d'estimation de la scalabilité et dans le test de correction du code. Ces deux éléments ne sont généralement testés qu'après parallélisation.

Dommage que ce module ne soit disponible que dans Parallel Studio et non pas dans les autres produits XE d'Intel (mais je peux me tromper). Si vous ne savez pas ce que votre patron peut vous offrir pour Noël, demandez-lui Parallel Studio.

Un grand merci à ClaudeLELOUP et jeacques jean pour leur relecture attentive.