Je voudrais savoir (en quelques mots) quelles sont les principales différences entre OpenMP et MPI.
OpenMP est un moyen de programmer sur des périphériques de mémoire partagée. Cela signifie que le parallélisme se produit là où 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 là où chaque processus parallèle fonctionne dans son propre espace mémoire indépendamment 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 entièrement de leur ID de processus.
La façon dont vous écrivez un programme OpenMP et MPI, bien sûr, est également très différente.
MPI signifie Interface de transmission de messages. Il s'agit d'un ensemble de déclarations d'API sur le passage de messages (tels que l'envoi, la réception, la diffusion, etc.) et le comportement à attendre des implémentations.
L'idée de "passer un 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 d'abstraire les multiples mécanismes sous-jacents (accès à la mémoire partagée, E/S réseau, etc.).
OpenMP est une API qui vise à faciliter (vraisemblablement) l'écriture de programmes de multi-traitement à mémoire partagée. Il n'y a aucune notion de transmission de messages. Au lieu de cela, avec un ensemble de fonctions standard et de directives de compilation, 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, vous pouvez donc également le regarder comme une extension des langages pris en charge.
Et il n'est pas rare qu'une application puisse utiliser à la fois MPI et OpenMP.