44 votes

Parallélisation: pthreads ou OpenMP?

La plupart des spécialistes de l'informatique scientifique utilisent OpenMP comme un quasi-standard en matière de parallélisation de la mémoire partagée.

Existe-t-il une raison (autre que la lisibilité) d'utiliser OpenMP sur des pthreads? Ce dernier semble plus basique et je suppose qu’il pourrait être plus rapide et plus facile à optimiser.

42voto

Mike Points 3295

Essentiellement, il se résume à ce niveau de contrôle que vous souhaitez sur votre parallélisation. OpenMP est génial si tout ce que vous voulez faire est d'ajouter un peu de #pragma déclarations et ont une version parallèle de votre code très rapidement. Si vous voulez faire des choses vraiment intéressantes avec MIMD de codage ou de complexe de la mise en attente, vous pouvez toujours faire tout cela avec OpenMP, mais il est probablement beaucoup plus simple à utiliser filetage dans ce cas. OpenMP a aussi des avantages similaires à la portabilité que beaucoup de compilateurs pour les différentes plates-formes de soutien maintenant, comme avec les pthreads.

Donc, vous avez tout à fait raison - si vous avez besoin d'un contrôle précis du votre de parallélisation, l'utilisation des pthreads. Si vous voulez paralléliser avec aussi peu de travail que possible, l'utilisation d'OpenMP.

Selon la façon dont vous décidez d'aller, bonne chance!

23voto

Vladimir Obrizan Points 1381

Une autre raison: la OpenMP est basée sur les tâches, les Pthreads est filetage selon. Cela signifie que OpenMP attribuer le même nombre de threads que le nombre de cœurs. Vous aurez donc évolutive de la solution. Il n'est pas si facile de le faire à l'aide de matières threads.

La seconde opinion: OpenMP fournit des fonctions de réduction: lorsque vous avez besoin pour calculer les résultats partiels dans les fils et de les combiner. Vous pouvez la mettre en œuvre simplement en utilisant une seule ligne de code. Mais à l'aide de matières threads que vous devriez faire plus de travail.

Il suffit de penser à vos besoins et essayer de comprendre: est-OpenMP assez pour vous? Vous permettra d'économiser beaucoup de temps.

8voto

Anonymous Points 71

OpenMP nécessite un compilateur prend en charge, et travaille avec des pragmas. L'avantage de ce système est que lors de la compilation sans OpenMP-support (par exemple, PCC ou Clang/LLVM dès à présent), le code de la compilation. Aussi, jetez un oeil à ce que Charles Leiserson a écrit à propos de BRICOLAGE multithreading.

Pthreads est une norme POSIX (IEEE POSIX 1003.1 c) pour les bibliothèques, tout en OpenMP spécifications doivent être mis en œuvre sur des compilateurs; cela étant dit, il ya une variété de pthread implémentations (par exemple, OpenBSD rthreads, NPTL), et un certain nombre de compilateurs qui prennent en charge OpenMP (par exemple GCC avec l'option-fopenmp drapeau, MSVC++ 2008).

Pthreads ne sont efficaces que pour la parallélisation lorsque plusieurs processeurs sont disponibles, et uniquement lorsque le code est optimisé pour le nombre de processeurs disponibles. Code OpenMP est plus facilement évolutive, comme un résultat. Vous pouvez mélanger du code qui compile avec OpenMP avec code à l'aide de pthreads, trop.

3voto

steffen Points 1987

Votre question s'apparente à la question "Devrais-je programmer C ou un assemblage", C étant OpenMP et assemblé étant des pthreads.

Avec pthreads, vous pouvez faire beaucoup mieux la parallélisation, une meilleure signification très étroitement ajustée à votre algorithme et à votre matériel. Ce sera beaucoup de travail cependant.

Avec pthreads, il est également beaucoup plus facile de produire un code mal parallélisé.

0voto

axeoth Points 1624

OpenMP est idéal lorsque vous avez besoin pour effectuer la même tâche en parallèle (qui est, à de multiples données), une sorte de machine SIMD (single instruction multiple data).

Pthreads est nécessaire lorsque vous souhaitez effectuer (ce qui est très différent) des tâches en parallèle, tels que, par exemple, la lecture des données dans un thread et d'interagir avec l'utilisateur dans un autre thread.

Voir cette page:

http://berenger.eu/blog/c-cpp-openmp-vs-pthread-openmp-or-posix-thread/

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