44 votes

Bibliothèques de parallélisation C ++: blocs de construction OpenMP vs Thread

Je vais rénover ma coutume moteur graphique afin qu'il tire parti des Processeurs multicœurs. Plus exactement, je suis à la recherche d'une bibliothèque à la parallélisation des boucles.

Il me semble que les deux OpenMP et Intel Fil Blocs de Construction sont très bien adaptés pour le travail. Aussi, les deux sont pris en charge par Visual Studio C++ compilateur et les plus populaires de compilateurs. Et les deux bibliothèques semblent relativement simple à utiliser.

Alors, qui dois-je choisir? Quelqu'un a essayé les deux bibliothèques et peut me donner quelques inconvénients et les avantages de l'utilisation de la bibliothèque? Aussi, qu'avez-vous choisi de travailler, en fin de compte?

Merci,

Adrian

48voto

Peter Points 5388

Je n'ai pas utilisé TBB largement, mais mon impression est qu'ils se complètent les uns les autres plus que les concurrents. TBB fournit des threads de conteneurs et de certains algorithmes parallèles, alors que OpenMP est une façon de paralléliser le code existant.

Personnellement, j'ai trouvé OpenMP très facile de tomber dans le code existant où vous avez une parallelisable boucle ou d'un tas de sections qui peuvent être exécutées en parallèle. Toutefois, il ne faut pas vous aider en particulier pour les cas où vous avez besoin de modifier des données partagées - où TBB simultanées de conteneurs pourrait être exactement ce que vous voulez.

Si tout ce que vous voulez, c'est de paralléliser les boucles où les itérations sont indépendants (ou peut être assez facilement, donc), j'irais pour OpenMP. Si vous avez besoin de plus d'interaction entre les threads, je pense que TBB peut offrir un peu plus à cet égard.

25voto

Anonymous Points 11017

À partir d'Intel logiciel blog: Comparer Windows* threads OpenMP*, Intel® Threading Building Blocks pour la programmation parallèle

Il est aussi question de style - pour moi TBB est très C++, tandis que je n'aime pas OpenMP pragmas que beaucoup (pue C un peu, serait de l'utiliser si j'avais à écrire en C).

Je voudrais également envisager les connaissances et l'expérience de l'équipe. L'apprentissage d'une nouvelle bibliothèque (surtout quand il s'agit de filetage/simultanéité) ne prendre un certain temps. Je pense que pour l'instant, OpenMP est plus largement connue et déployé que TBB (mais c'est juste mon avis).

Pourtant, un autre facteur - mais considérant que la plupart des plates-formes communes, probablement pas un problème de portabilité. Mais la licence peut être un problème.

  • TBB intègre certaines de nice recherche originaires de la recherche universitaire, par exemple des données récursives approche parallèle.
  • Il y a un peu de travail sur le cache de la convivialité, par exemple.
  • Conférence de l'Intel blog semble très intéressant.

16voto

Nikhil Points 2295

En général, j'ai constaté que l'utilisation de TBB nécessite beaucoup plus de modifications de la base de code avec un gain élevé, tandis qu'OpenMP procure un gain rapide mais modéré. Si vous regardez un nouveau module à partir de zéro et que vous pensez à long terme, utilisez TBB. Si vous voulez des gains modestes mais immédiats, optez pour OpenMP.

De plus, TBB et OpenMP ne s'excluent pas mutuellement.

6voto

Ben Points 61

En fait, j'ai utilisé les deux, et mon impression générale est que si votre algorithme est assez facile à prendre en parallèle (par exemple, les boucles de la même taille, pas trop de données interdépendance) OpenMP est plus facile, et très agréable de travailler avec. En fait, si vous trouvez que vous pouvez utiliser OpenMP, c'est probablement la meilleure façon d'aller, si vous savez que votre plate-forme prend en charge. Je n'ai pas utilisé OpenMP nouvelles structures de travail, qui sont beaucoup plus générale que la boucle d'origine et la section options.

TBB vous donne plus de structures de données à l'avant, mais certainement plus à l'avant. En plus, il pourrait être plus à même de vous faire connaître de la race, de condition de bugs. Ce que je veux dire par là, c'est qu'il est assez facile d'en OpenMP pour permettre des conditions de course en ne faisant pas quelque chose de partagé (ou autre) qui devrait être. Vous ne voyez lorsque vous obtenez de mauvais résultats. Je pense que c'est un peu moins susceptible de se produire avec TBB.

Globalement j'ai une préférence personnelle pour OpenMP, compte tenu notamment de l'augmentation de son expressivité avec des tâches.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X