Quelles sont les différences entre MPI et OpenMP? [fermé]

Je voudrais savoir (en quelques mots) quelles sont les principales différences entre OpenMP et MPI.

26
demandé sur nbro 2015-09-08 20:42:46

2 réponses

OpenMP est un moyen de programmer sur des périphériques de mémoire partagée. Cela signifie que le parallélisme se produit lorsque chaque thread parallèle a accès à toutes vos données.

Vous pouvez le considérer comme: le parallélisme peut se produire lors de l'exécution d'une boucle for spécifique en divisant la boucle entre les différents threads.

MPI est un moyen de programmer sur des périphériques de mémoire distribuée. Cela signifie que le parallélisme se produit lorsque chaque processus parallèle fonctionne dans sa propre mémoire l'espace isolément des autres.

Vous pouvez le considérer comme: chaque bit de code que vous avez écrit est exécuté indépendamment par chaque processus. Le parallélisme se produit parce que vous dites à chaque processus exactement sur quelle partie du problème global ils devraient travailler en fonction de leur identifiant de processus.

La façon dont vous écrivez un programme OpenMP et MPI, bien sûr, est également très différente.

46
répondu NoseKnowsAll 2018-01-17 23:26:54

MPI signifie Interface de passage de Message. C'est un ensemble de déclarations D'API sur le passage de message (comme envoyer, recevoir, diffuser, etc.), et quel comportement devrait être attendu des implémentations.

L'idée de "passage de message" est plutôt abstraite. Cela pourrait signifier passer un message entre des processus locaux ou des processus distribués sur des hôtes en réseau,etc. Les implémentations modernes essaient très fort d'être polyvalentes et abstraites loin des multiples mécanismes sous jacents (accès à la mémoire partagée, E / S réseau, etc.).

OpenMP est une API qui vise à rendre (vraisemblablement) plus facile l'écriture de programmes multi-traitement à mémoire partagée. Il n'y a aucune notion de passer des messages autour. Au lieu de cela, avec un ensemble de fonctions standard et de directives de compilateur, vous écrivez des programmes qui exécutent des threads locaux en parallèle, et vous contrôlez le comportement de ces threads (à quelle ressource ils devraient avoir accès, comment ils sont synchronisés, etc.). OpenMP nécessite le support du compilateur, de sorte que vous pouvez également le regarder comme une extension des langues prises en charge.

Et il n'est pas rare qu'une application puisse utiliser à la fois MPI et OpenMP.

11
répondu Cong Ma 2018-01-17 23:25:20