Programmation des processeurs multicoeurs

Le
Wykaaa
Quelqu'un a-t-il utilisé la librairie TBB (Threading Building Blocks)
pour la programmation des multicoeurs et si oui, qu'en pense-t-il ?
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
TheFrenchLeaf
Le #19709211
Je pense que un bon début est de regarder OPENMP. Une approche plus
simple pour rendre des portions de code parallèle (A moindres cout).
En plus d'un simple pragma tu peux désactiver touy ton code
multithread et vérifier la fiabilité de ton code en le lancant sur 1
thread.

Sinon pour TBB jette un oeil la dessus : http://llpanorama.wordpress.com/t bb-tutorial/


On 13 juin, 12:01, Wykaaa
Quelqu'un a-t-il utilisé la librairie TBB (Threading Building Blocks)
pour la programmation des multicoeurs et si oui, qu'en pense-t-il ?


VenerZen
Le #19713161
On 6 juil, 18:03, TheFrenchLeaf
Je pense que un bon début est de regarder OPENMP. Une approche plus
simple pour rendre des portions de code parallèle (A moindres cout).
En plus d'un simple pragma tu peux désactiver touy ton code
multithread et vérifier la fiabilité de ton code en le lancant sur 1
thread.

Sinon pour TBB  jette un oeil la dessus :http://llpanorama.wordpress.co m/tbb-tutorial/

On 13 juin, 12:01, Wykaaa


> Quelqu'un a-t-il utilisé la librairie TBB (Threading Building Blocks)
> pour la programmation des multicoeurs et si oui, qu'en pense-t-il ?



En cherchant de la doc dédiée à openmp sur wikipedia, j'y ait lu ça :
"Traditionally, programmers have used architecture-specific methods to
effectively program tightly-parallelized computers — high band-width
clusters, SMP machines, or multi-core processors. Parallel programming
has thus been a time-consuming and arcane task.
OpenMP offers a simple way of exploiting parallelism without
interfering with algorithm design; an OpenMP program compiles and
operates correctly in both parallel and serial execution environments.
Using OpenMP's directive-based parallelism also simplifies the act of
converting existing serial code to efficient parallel code."

J'ai du mal à comprendre. Quelqu'un pourrait-il m'expliquer ? Ça ne
semble pas permettre de manipuler des thread en fait. Enfin j'ai du
mal à comprendre comment on peut ne pas tenir compte des traitements
parallèle dans l'algorithme.
Fabien LE LEZ
Le #19713291
On Tue, 7 Jul 2009 01:29:55 -0700 (PDT), VenerZen

Ça ne semble pas permettre de manipuler des thread en fait.



Effectivement, il ne s'agit pas de les manipuler explicitement.

Imagine que tu aies un code du style :

for (int x=0; x<largeur; ++x)
for (int y=0; y<hauteur; ++y)
dest[x][y]= src1[x][y] * src2[x][y];

Tu pourrais t'amuser à "couper" le code en plusieurs threads. Mais
c'est chiant.

L'idée de ces logiciels, c'est de faire le travail à ta place : tu
tapes ton code comme si tu n'avais qu'un processeur à gérer, et TBB
s'occupe de répartir la charge sur plusieurs processeurs.
Alain Ketterlin
Le #19713511
VenerZen
En cherchant de la doc dédiée à openmp sur wikipedia, j'y ait lu ça :
"Traditionally, programmers have used architecture-specific methods to
effectively program tightly-parallelized computers — high band-wi dth
clusters, SMP machines, or multi-core processors. Parallel programming
has thus been a time-consuming and arcane task.
OpenMP offers a simple way of exploiting parallelism without
interfering with algorithm design; an OpenMP program compiles and
operates correctly in both parallel and serial execution environments.
Using OpenMP's directive-based parallelism also simplifies the act of
converting existing serial code to efficient parallel code."

J'ai du mal à comprendre. Quelqu'un pourrait-il m'expliquer ? Ç a ne
semble pas permettre de manipuler des thread en fait. Enfin j'ai du
mal à comprendre comment on peut ne pas tenir compte des traitements
parallèle dans l'algorithme.



OpenMP masque la gestion des threads dans des cas courants, en gros 1)
dans le cas des boucles où les itérations peuvent s'exécuter en
parallèle, et 2) dans le cas des sections parallèles. C'est au
compilateur de placer le code pour créer les threads, pour défini r les
données locales et celles qui sont partagées, et pour assurer la
synchronisation. Ce qui est en général compliqué et/ou fasti dieux, et
non portable.

Quant à savoir si les versions séquentielle et parallèle de ton algo
donnent le même résultat, c'est à toi d'en décider (c'e st-à-dire de le
démontrer, sinon ta version parallèle n'est pas correcte). En tou t cas,
OpenMP ne t'empêchera pas de paralléliser n'importe quoi.

Pour Threading Building Blocks, c'est la même chose, mais d'un peu plus
haut niveau (pour faire court). Et c'est C++ only.

C'était ça ta question ?

-- Alain.
VenerZen
Le #19715161
On 7 juil, 11:04, Alain Ketterlin
VenerZen > En cherchant de la doc dédiée à openmp sur wikipedia, j'y ait lu ça :
> "Traditionally, programmers have used architecture-specific methods to
> effectively program tightly-parallelized computers — high band-width
> clusters, SMP machines, or multi-core processors. Parallel programming
> has thus been a time-consuming and arcane task.
> OpenMP offers a simple way of exploiting parallelism without
> interfering with algorithm design; an OpenMP program compiles and
> operates correctly in both parallel and serial execution environments.
> Using OpenMP's directive-based parallelism also simplifies the act of
> converting existing serial code to efficient parallel code."

> J'ai du mal à comprendre. Quelqu'un pourrait-il m'expliquer ? Ça ne
> semble pas permettre de manipuler des thread en fait. Enfin j'ai du
> mal à comprendre comment on peut ne pas tenir compte des traitements
> parallèle dans l'algorithme.

OpenMP masque la gestion des threads dans des cas courants, en gros 1)
dans le cas des boucles où les itérations peuvent s'exécuter en
parallèle, et 2) dans le cas des sections parallèles. C'est au
compilateur de placer le code pour créer les threads, pour définir le s
données locales et celles qui sont partagées, et pour assurer la
synchronisation. Ce qui est en général compliqué et/ou fastidieux, et
non portable.

Quant à savoir si les versions séquentielle et parallèle de ton alg o
donnent le même résultat, c'est à toi d'en décider (c'est-à-dir e de le
démontrer, sinon ta version parallèle n'est pas correcte). En tout ca s,
OpenMP ne t'empêchera pas de paralléliser n'importe quoi.

Pour Threading Building Blocks, c'est la même chose, mais d'un peu plus
haut niveau (pour faire court). Et c'est C++ only.

C'était ça ta question ?

-- Alain.



Oui, là je comprends mieux avec vos exemples à tous les deux. Je
n'avais pas compris qu'il optimisait le code tout seul en fonction des
cas qu'il rencontrait.

Merci :)
Wykaaa
Le #19716621
TheFrenchLeaf a écrit :
Je pense que un bon début est de regarder OPENMP. Une approche plus
simple pour rendre des portions de code parallèle (A moindres cout).
En plus d'un simple pragma tu peux désactiver touy ton code
multithread et vérifier la fiabilité de ton code en le lancant sur 1
thread.

Sinon pour TBB jette un oeil la dessus : http://llpanorama.wordpress.com/tbb-tutorial/


On 13 juin, 12:01, Wykaaa
Quelqu'un a-t-il utilisé la librairie TBB (Threading Building Blocks)
pour la programmation des multicoeurs et si oui, qu'en pense-t-il ?






Pourquoi me conseilles-tu plutôt OpenMP ?
TBB semble être dans le style de la STL, donc no problem...
Merci pour le lien.
TheFrenchLeaf
Le #19728781
On Jul 7, 5:46 pm, Wykaaa
TheFrenchLeaf a écrit :


Tout dépend du niveau de controle que tu souhaites aussi sur les
threads mis en jeux.

Pour moi OpenMp est très simple à mettre en place, il n'impose pas
vraiment de code spécifique. (Juste de préprocesseur).

Tu peux donc paralléliser les boucles vectorielle de ton algorithme
(existant) de manière très simple.

En revanche avec TBB tu te retrouves à écrire du code spécifique à
TBB. (Il faut donc penser TBB et écrire du code pour TBB).

OpenMp et son niveau d'intrusion assez faible dans le code permet
aussi de tester facilement l'impact de la parallélisation d'une partie
du code sur le process général.

Mais toutes mes remarques sont personnelles et ne sont peut etre pas
l'avis de la communauté.

(Désolé pour le délai de réponse...)



> Je pense que un bon début est de regarder OPENMP. Une approche plus
> simple pour rendre des portions de code parallèle (A moindres cout).
> En plus d'un simple pragma tu peux désactiver touy ton code
> multithread et vérifier la fiabilité de ton code en le lancant sur 1
> thread.

> Sinon pour TBB  jette un oeil la dessus :http://llpanorama.wordpress. com/tbb-tutorial/

> On 13 juin, 12:01, Wykaaa >> Quelqu'un a-t-il utilisé la librairie TBB (Threading Building Blocks )
>> pour la programmation des multicoeurs et si oui, qu'en pense-t-il ?

Pourquoi me conseilles-tu plutôt OpenMP ?
TBB semble être dans le style de la STL, donc no problem...
Merci pour le lien.


Stéphane Zuckerman
Le #19805221
Bonjour,

Pour moi OpenMp est très simple à mettre en place, il n'impose pas
vraiment de code spécifique. (Juste de préprocesseur).



C'est vrai, mais d'une part on est du coup très dépendant de
l'implémentation du framework OpenMP (vu qu'en réalité il y a à la
fois une partie compilation, une partie bibliothèque de fonctions, et
une partie runtime), et d'autre part, le support du C++ est très
limité dans OpenMP (le standard v3.0 commence à peine à reconnaître
les itérateurs). De l'autre côté, on a TBB qui est certes spécifiqu e à
C++ (et pour cause, presque tout passe par des templates d'une manière
ou d'une autre), mais a l'avantage d'avoir un système de tâches («
tasks ») qui fonctionne relativement bien, et permet de gérer des cas
plus compliqués que ce que propose OpenMP, comme par exemple le
parcours de listes chaînées, d'arbres, etc. (en pratique, OpenMP 3
introduit aussi les tâches, mais pour le moment les performances sont
relativement moyennes).

Tu peux donc paralléliser les boucles vectorielle de ton algorithme
(existant) de manière très simple.

En revanche avec TBB tu te retrouves à écrire du code spécifique à
TBB. (Il faut donc penser TBB et écrire du code pour TBB).



C'est vrai, mais je ne suis pas certain qu'au final ce soit réellement
moins simple.

OpenMp et son niveau d'intrusion assez faible dans le code permet
aussi de tester facilement l'impact de la parallélisation d'une partie
du code sur le process général.



Ça par contre, c'est une vraie force. Pas besoin d'écrire ou de
récrire du code spécifique, il « suffit » de rajouter une directive au
début d'une région qu'on veut paralléliser et ça « juste marche ».
Pour les codes déjà écrits, c'est très très bien.
Publicité
Poster une réponse
Anonyme