Meilleure réponse
OpenMP est une plateforme de programmation qui permet de paralléliser le code sur un système de mémoire partagée homogène (par exemple, un processeur multicœur). Par exemple, on pourrait paralléliser un ensemble dopérations sur un processeur multicœur où les cœurs partagent la mémoire entre eux. Cette mémoire comprend la mémoire cache, la RAM, la mémoire du disque dur, etc., et la communication est facile et relativement bon marché.
Open MPI (basé sur Message Passing Interface ) est également une plate-forme de programmation, mais offre à la place la possibilité de paralléliser le code sur un système distribué (par exemple, un supercalculateur). Par exemple, il est possible de paralléliser un programme entier sur un réseau d’ordinateurs, ou nœuds, qui communiquent sur le même réseau. Comme ces nœuds sont essentiellement des ordinateurs , ils ont leur propre disposition de mémoire et leur propre ensemble de cœurs (voir la description dOpenMP). La communication entre les nœuds, par rapport aux systèmes de mémoire partagée, peut être difficile et généralement coûteuse.
Réponse
OpenMP est une extension de langage pour exprimer des opérations parallèles aux données (généralement des tableaux parallélisés sur des boucles). MPI est une bibliothèque pour la transmission de messages entre des processus sans partage.
OpenMP est un niveau supérieur dabstraction, puisque son but est dexposer la concurrence et le flux de données du programme au compilateur. En revanche, la concurrence MPI est implicite (tous les processus sont parallèles), et les messages établissent la structure du flux de données du calcul.
Bien quil «Il est courant de penser quOpenMP ne concerne que la mémoire partagée, rien nempêche une implémentation OpenMP dutiliser MPI pour fonctionner sur des processus et des hôtes. OTOH, la dualité de la mémoire partagée et du passage de messages signifie que les implémentations MPI profitent souvent de la mémoire partagée pour les rangs sur le même nœud …