Dcouverte d'OpenMP

Dcouverte d'OpenMP

J'ouvre ce topic pour rassembler des questions rponses sur OpenMP.Je ne connaisais absolument pas cette API auparavant. J'ai lu quelques slides de prsentations issus de divers site.J'ai une premiere question sur la comprhension du fonctionnnement de cette API en elle mme.D'aprs ce que j'ai pu comprendre de mes premires lectures sur le sujet, il s'agit d'un ensemble de directives de pr-compilation, permettant de dfinir sur des zones de codes la parallelisation et la dfinition du partage des donnes et de la mmoire. Ce traitement est donc transparent pour le dveloppeur. Il n'y a pas de declaration de thread explicite via l'appel de fonction ou autre ? Tous ce gre de maniere automatiss via ces directives ?

11 posts / 0 new
Last post
For more complete information about compiler optimizations, see our Optimization Notice.

Bonjour,

C'est effectivement la faon de marcher d'OpenMP. Ce traitement est effectu par le compilateur.

Pour l'utiliser avec GCC, il faut ajouter l'argument : -fopenmp
Pour l'utiliser avec le compilateur Intel : -openmp

Liste des diffrents compilateurs supports avec les arguments : http://openmp.org/wp/openmp-compilers/

Au moment de la compilation, OpenMP se comporte comme un gnrateur de code (Pas seulement, il y'a d'autres stratgies). Il va venir crire le code associ aux directives que vous avez indiqu.

Il y'a donc bien une dclaration de threads explicites mais au moment de la compilation.

L'une des difficults, c'est qu'Open MP ne valide pas si une directive donne est abrante ou non. Il les interprte la lettre.

Je pense que tu trouveras beaucoup d'information sur les mcanismes internes dans ces slides :

http://cobweb.ecn.purdue.edu/ParaMount/iwomp2008/documents/chapman-under...

Fabien

Bonjour,

Je n'ai pas encore fait de teste, mais d'aprs se que j'ai vu, openMP gre aussi les mmoires partages et les mutex.

Bobby

Oui, le contrle de la mmoire est trs pointu d'aprs ce que j'ai vu.On peut tous moment indiqu lors d'un parallelisme si tel ou tel variable est partag , prive , etc ...

Ouaip mais il faut faire attention en utilisant OpenMP : toute variable non prive est partage (normal), et OpenMP la protge donc par un smaphore, ce qui peut ralentir l'excution si jamais le smaphore n'est pas ncssaire (je crois).

En es-tu bien sr? Il me semble pourtant que non. C'est toi de ne pas faire de lectures/critures concurrentes et d'utiliser des locks au besoin.

Hum les deux sont possibles il me semble (contrle explicite et implicite)

Il y a effectivement une barrire implicite par dfault la fin des boucles omp for. (Et on peut la dsactiver avec une directive nowait) Cependant il n'y a pas de protection implicite des variables partages dans le cas gnral.

Est-ce que certains d'entre vous ont russi compiler avec le compilateur intel ICPC + OpenMP. Parce que mon programme compile bien avec g++ + OpenMP (option -fopenmp dans mon makefile), mais pas moyen d'y arriver avec le compilateur intel et l'option -openmp. Il me dit que les #pragma omp sont "unrecognized". Y-a-t-il quelque chose de particulier faire ?

Merci ;-)

T'utilises uniquement l'option -openmp? (parcequ'il me semble avoir essay et a fonctionnait, jvais retester pour tre sr)

Autant pour moi, j'avais pas mal bidouill et au passage j'avais oubli de remettre -openmp dans le CFLAGS de mon Makefile alors que je l'avais laiss dans le LDFLAGS...

Leave a Comment

Please sign in to add a comment. Not a member? Join today