Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Programmation des processeurs multicoeurs

8 réponses
Avatar
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 ?

8 réponses

Avatar
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.com/t bb-tutorial/


On 13 juin, 12:01, Wykaaa wrote:
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 ?


Avatar
VenerZen
On 6 juil, 18:03, TheFrenchLeaf wrote:
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 wrote:



> 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.
Avatar
Fabien LE LEZ
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.
Avatar
Alain Ketterlin
VenerZen writes:

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.
Avatar
VenerZen
On 7 juil, 11:04, Alain Ketterlin wrote:
VenerZen writes:
> 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 :)
Avatar
Wykaaa
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 wrote:
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.
Avatar
TheFrenchLeaf
On Jul 7, 5:46 pm, Wykaaa wrote:
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 wrote:
>> 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.


Avatar
Stéphane Zuckerman
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.