10
votes

Mélanger OpenMP avec Pthreads

Ma question est de savoir si c'est une bonne idée de mélanger OpenMP avec Pthreads. Y a-t-il des applications là-bas qui combine ces deux? Est-ce une bonne pratique de mélanger ces deux? Ou des applications typiques utilisent normalement l'une des deux.


0 commentaires

6 Réponses :


0
votes

Je ne pense pas ..

Ce n'est pas une bonne idée. Voir ce qui est, OpenMP est essentiellement fabriqué pour la portabilité. Maintenant, si vous utilisez Pthread, vous perdez l'essence même!

Pthread ne peut être supporté que par Posix compatible OS. Bien que OpenMP puisse être utilisé pratiquement sur tout système d'exploitation à condition d'avoir un support pour cela.

Quoi qu'il en soit, OpenMP vous donne une abstraction beaucoup plus haut que ce qui est fourni par PTHead.


0 commentaires

11
votes

Typiquement, il vaut mieux utiliser l'un ou l'autre. Mais pour moi au moins, je mélange régulièrement les deux et c'est sûr s'il est fait correctement.

Le cas le plus courant que je fais est l'endroit où j'ai une bibliothèque de niveau inférieure enfilée à l'aide de Pthreads, mais je l'appelle dans une application utilisateur utilisant OpenMP.

Il y a quelques cas où il n'est pas sûr. Si par exemple, vous tuez une pthead avant de quitter toutes les régions OpenMP dans ce fil.


0 commentaires

0
votes

aucun problème.

Le but d'OpenMP et de Pthreads sont différents. OpenMP est parfait pour écrire un parallélisme au niveau de la boucle. Cependant, OpenMP n'est pas suffisant pour exprimer des communications de fil sophistiquées et des synchronisations. OpenMP ne prend pas en charge toutes sortes de synchronisations, telles que des variables de condition.

La mise en garde serait, comme le soulignait mythique, manipulant et accédant à des threads natifs dans des constructions parallèles OpenMP.

FYI, TBB et CILK PLUS de Intel sont également souvent utilisés de manière mixte.


0 commentaires

0
votes

sur Windows et Linux, il semble fonctionner très bien. Cependant, OpenMP ne fonctionne pas sur un Mac s'il est exécuté dans un nouveau fil. Cela ne fonctionne que dans le fil principal.

Il semble que le comportement de la manière de mélanger les deux modules de filetage n'est pas défini. Certaines plateformes / compilateurs le soutiennent, d'autres ne le font pas.


0 commentaires

0
votes

Bien sûr. Je le fais tout le temps. Tu dois être prudent. Pourquoi le faire, cependant? Parce qu'il y a des instances dans lesquelles vous devez! Dans des modèles de tâches complexes, tels que des fonctions pipelines dans lesquelles vous souhaitez conserver le tuyau, il peut être le seul moyen de profiter de toute la puissance disponible.


0 commentaires

0
votes

Je trouve très fort que vous auriez besoin d'utiliser Pthreads si vous utilisez déjà OpenMP. Vous pouvez utiliser une section pragma pour exécuter des procédures avec des fonctions différentes. Personnellement, je l'ai utilisé pour mettre en œuvre le parallélisme des pipelines.

Nowatails OpenMP fait beaucoup plus que Pthreads, donc si vous utilisez OpenMP, vous êtes couvert. Par exemple, GCC 5.0 Transférer des extensions OpenMP qui exporte du code sur GPU. : D


0 commentaires