Test de Intel Parallel Studio 2011

Tout niveau

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.

6 commentaires Donner une note à l'article (4.5)

Article lu   fois.

L'auteur

Profil ProSite personnel

Liens sociaux

Viadeo Twitter Facebook Share on Google+   

I. Introduction

Après Advisor Lite, Intel a développer 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 ;
  • annoation 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 :

Image non disponible
Page de démarrage de Advisor

À noter que pendant la beta, 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.

Image non disponible
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.

Image non disponible
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.

Image non disponible
É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émoire, dans d'autres cas, il faudra revoir la structure du code, et à chaque fois, la scalabilité et la correction doivent être revus.

Image non disponible
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.

Image non disponible
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 fini, 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.

Vous avez aimé ce tutoriel ? Alors partagez-le en cliquant sur les boutons suivants : Viadeo Twitter Facebook Share on Google+   

  

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. Droits de diffusion permanents accordés à Developpez LLC.