1

Est-ce que quelqu'un aurait des retours sur OpenMp en C ?
Ca à l'air relativement puissant et très simple pour faire du parallélisme facile, mais quid de la réalité ?

Ceux qui ne connaissent pas peuvent aller sur la page wikipedia : http://en.wikipedia.org/wiki/OpenMP
En gros, ce sont des pragma standardisés données au compilateur pour qu'il créée automatiquement les thread, et met en place les synchronisations.
Le principal avantage que je vois est que le code est le même avec ou sans parallélisation !

J'avoue n'en avoir jamais fait. Est-ce que quelqu'un si connait et pourrait me donner son avis ?

2

!call Azrael_CV
--- Call : Azrael_CV appelé(e) sur ce topic ...


Il connaît peut-être ça.
avatar
Zeroblog

« Tout homme porte sur l'épaule gauche un singe et, sur l'épaule droite, un perroquet. » — Jean Cocteau
« Moi je cherche plus de logique non plus. C'est surement pour cela que j'apprécie les Ataris, ils sont aussi logiques que moi ! » — GT Turbo

3

[curiosité]C'est une implémentation de MPI ou rien à voir?[/curiosité]
Tout ce qui passe pas par le port 80, c'est de la triche.

4

Non. C'est une technologie concurrente.
Cf: http://openmp.org/wp/

Un exemple:
#pragma omp parallel for default(none) private(i,j,sum) shared(m,n,a,b,c)
for (i=0; i<m; i++) {
   sum = 0.0;
   for (j=0; j<n; j++)           =           *
     sum += b[i][j]*c[j];
   a[i] = sum;
 }

5

J'ai fait quelques tests avec dans le cadre d'un cours avec TPs à l'université, ça m'a l'air très cool quand-même, il ne faut pas s'embêter avec les détails des threads POSIX, il suffit de mettre quelques pragmas et le code est magiquement parallélisé. (J'ai codé quelques exemples en OpenMP et directement avec les pthreads, OpenMP simplifie beaucoup l'écriture. Et c'est aussi très facile de compiler une version séquentielle pour comparer, il suffit de compiler sans -fopenmp (ou avec -fno-openmp au cas où GCC mettrait OpenMP par défaut un jour).) Et ça marche vraiment.

D'ailleurs, un petit truc que j'ai observé en faisant ça (un peu hors sujet, mais l'astuce peut t'être utile): n'utilise surtout pas des sémaphores à compteur pour synchroniser 2 threads, un tableau de mutexes est beaucoup plus rapide.
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

6

Bon, j'ai un train de retard... (on ne pourrait pas avoir un mail lorsqu'il y a un call ?)

Alors c'est quoi la question ? trifus

J'utilise OpenMP et MPI en Fortran, pas en C, mais c'est la même chose.

L'OpenMP est utilisé sur des systèmes à mémoire partagée, au contraire de MPI qui peut être utilisé n'importe où. L'avantage de la programmation OpenMP c'est de pouvoir paralléliser facilement un code séquentiel, la manière la plus simple étant de paralléliser des boucles avec le simple ajout d'une directive avant et après la boucle (cf exemple de PpHd).

La programmation MPI est plus invasive, il faut penser aux échanges de données entre les processus avant de concevoir le code. Ce n'est pas le cas, ou très peu, avec la programmation OpenMP. Les variables globales sont vues par toutes les taches (threads), mais il est possible de protéger les variables globales pour que chaque tache ait la sienne. Et les taches ne sont pas obligées d'être synchronisées si le code ne le nécessite pas.

Les normes sont assez explicites sur le sujet, et comme toutes les normes, elles sont incompréhensibles avant d'avoir essayé...
Gare à celui qui touche a mes chips quand je code !

7

Pour en avoir fait pas mal à la fac (OpenMP + MPI en C) c'est vraiment magique comme truc smile
Et en comparaison avec un code multi threadé à la main avec threads POSIX et un pragma OpenMP y'a pas photo au niveau de la simplicité.

Il est aussi possible de gérer la façon dont OpenMP partitionne tes calculs sur les threads qu'il crée : statis, dynamic, guided, etc..

Bon par contre si t'as des boucles imbriquées ou des trucs un peu complexes (à base de break etc.) c'est pas si facile.

8

Avec beaucoup de retard. ^^
Intel Threading Building Blocks (TBB) est pas mal aussi. smile Voir même plus puissant qu'OpenMP sur certains trucs (mais ça ne s'applique que pour du C++).
avatar
la Nature nous montre seulement la queue du lion. Mais je suis certain que le lion a qui elle appartient pense qu'il ne peut pas se révéler en une fois en raison de son immense taille.

- Fondateur de Ti-Gen -: http://www.tigen.org

- Membre du Groupe Orage Studio -: http://oragestudio.free.fr/

- Mon site perso -: http://tisofts.free.fr

Projets TI68K en cours:
GFA-Basic = http://www.tigen.org/gfabasic
Arkanoid.
PolySnd 3.0.