12.07.2015 Views

TP de programmation OpenMP — Formation Continue - Par4All

TP de programmation OpenMP — Formation Continue - Par4All

TP de programmation OpenMP — Formation Continue - Par4All

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

<strong>TP</strong> <strong>de</strong> <strong>programmation</strong> <strong>OpenMP</strong><strong>—</strong><strong>Formation</strong> <strong>Continue</strong>Ronan Keryell (rk@hpc-project.com)Thierry Porcher (tp@hpc-project.com)Mars 2011RésuméCe <strong>TP</strong> convient pour 2 parcours, un parcours plutôt débutant et un autre plutôtavancé.1 Environnement <strong>de</strong> développementSouvent pour compiler les exemples on peut utiliser le Makefile fourni 1 en tapant make.On essayera <strong>de</strong> mesurer les temps d’exécution soit basiquement avec la comman<strong>de</strong> time,soit en instrumentant le co<strong>de</strong> en utilisant par exemple gettimeofday(), <strong>de</strong>s compteurs <strong>de</strong>performance, <strong>de</strong>s outils <strong>de</strong> mesure plus avancés...1.1 Si <strong>TP</strong> sous Windows...Pour <strong>de</strong>s raisons <strong>de</strong> performances, on utilisera le compilateur d’Intel icl. Travailler dansla fenêtre dédiée au compilateur Intel (lancée <strong>de</strong>puis l’icône dans la colonne <strong>de</strong> gauche), carlà les variables d’environnement seront bien positionnées. Dans le même style il faudra lancervtuneenv dans cette fenêtre pour que l’exécutable trouve ses bibliothèques.Pour avoir une fenêtre avec un vrai couper-coller à la souris 3 boutons, on peut lancerrxvt dans la première fenêtre. Pour avoir aussi un vrai éditeur ☺, on peut lancer d’abord X11<strong>de</strong> Cygwin en cliquant sur l’icône X dans la secon<strong>de</strong> colonne d’icônes. Ensuite on lance Emacsdans la fenêtre rxvt en tapant emacs &.2 π dans tous ses étatsÉtudier dans le répertoire Pi les différentes versions du programme calculant une approximation<strong>de</strong> π.1. Mais qu’on pourra modifier pour rajouter <strong>de</strong>s options...1


3 Parallélisation du co<strong>de</strong> <strong>de</strong> géomatique HyantesIl s’agit d’une application développée dans le laboratoire Mescal à Grenoble visant à représenter<strong>de</strong>s distributions humaines.Dans le répertoire LABS/P4A/Hyantes ce trouve ce programme compilable et lançable enséquentiel ou parallélisable vers <strong>OpenMP</strong> ou GPU automatiquement avec <strong>Par4All</strong>.Essayez d’utiliser plusieurs options du compilateur GCC ou Intel et comparez les performances.Vous <strong>de</strong>vez partir <strong>de</strong> la version séquentielle et l’optimiser via <strong>OpenMP</strong>.4 Parallélisation d’un solveur en damierDans LABS/P4A/Red-Black se trouve un solveur en damier utilisé ici pour résoudre ∇ 2 s = 0sur <strong>de</strong>s données fournies par une image en niveau <strong>de</strong> gris.Mesurez l’efficacité du parallélisme et optimisez...On essayera aussi d’optimiser le débit mémoire (important lorsqu’on utilise <strong>de</strong>s grossesmatrices qui ne logent pas dans le cache).5 Parallélisation <strong>OpenMP</strong> avec anti-dépendanceOn va se concentrer sur le programme Anti_<strong>de</strong>pendance/anti_<strong>de</strong>p.cCompilation du programme : par la suite on compilera soit avec <strong>OpenMP</strong> soit sans<strong>OpenMP</strong> pour comparer les résultats <strong>de</strong>s différences version. Seule la version séquentiellefaisant foi pour les résultats. ☺Utiliser VTune pour voir où on passe le plus <strong>de</strong> temps dans le programme. Où faut-iltravailler ? Est-ce logique ?Commencer par instrumenter le programme pour mesurer le temps (utiliser les fonctionsad-hoc d’<strong>OpenMP</strong>).On peut utiliser Thread Checker pour voir les problèmes éventuels dans la suite.Paralléliser la boucle d’initialisation du tableau et vérifier les résultats.Paralléliser la boucle <strong>de</strong> somme <strong>de</strong> vérification et vérifier.Paralléliser du plus <strong>de</strong> manières différentes possibles le nid <strong>de</strong> boucle <strong>de</strong> lissage.Revoir le co<strong>de</strong> en minimisant les barrières et les démarrages/arrêts <strong>de</strong> threads.6 Tester variables <strong>de</strong> contrôle interneÉcrire plusieurs petits programmes, avec du parallèlisme imbriqué ou pas, qui vont afficherles Internal Control Variables (ICV) tels que nombre et numéro <strong>de</strong> thread, niveau d’impricationdu parallélisme...2

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!