Wat zijn de verschillen tussen MPI en OpenMP?

Ik zou graag (in een paar woorden) willen weten wat de belangrijkste verschillen zijn tussen OpenMP en MPI.


Antwoord 1, autoriteit 100%

OpenMPis een manier om te programmeren op apparaten met gedeeld geheugen. Dit betekent dat het parallellisme optreedt waar elke parallelle thread toegang heeft tot al uw gegevens.

Je kunt het zien als: parallellisme kan optreden tijdens het uitvoeren van een specifieke for-lus door de lus op te splitsen over de verschillende threads.

MPIis een manier om te programmeren op apparaten met gedistribueerd geheugen. Dit betekent dat het parallellisme optreedt waar elk parallel proces in zijn eigen geheugenruimte werkt, geïsoleerd van de anderen.

Je kunt het zien als: elk stukje code dat je hebt geschreven, wordt onafhankelijk uitgevoerd door elk proces. Het parallellisme treedt op omdat je elk proces precies vertelt aan welk deel van het globale probleem ze moeten werken, volledig gebaseerd op hun proces-ID.

De manier waarop je een OpenMP- en MPI-programma schrijft, is natuurlijk ook heel anders.


Antwoord 2, autoriteit 26%

MPIstaat voor Message Passing Interface. Het is een set API-declaraties over het doorgeven van berichten (zoals verzenden, ontvangen, uitzenden, enz.), en welk gedrag van de implementaties mag worden verwacht.

Het idee van ‘boodschappen doorgeven’ is nogal abstract. Het kan betekenen dat berichten worden doorgegeven tussen lokale processen of processen die zijn verdeeld over netwerkhosts, enz. Moderne implementaties doen erg hun best om veelzijdig te zijn en de meerdere onderliggende mechanismen (toegang tot gedeeld geheugen, netwerk-IO, enz.) weg te nemen.

OpenMPis een API die erop gericht is het (vermoedelijk) gemakkelijker te maken om multi-processing-programma’s met gedeeld geheugen te schrijven. Er is geen idee van het doorgeven van berichten. In plaats daarvan, met een set standaardfuncties en compilerrichtlijnen, schrijft u programma’s die lokale threads parallel uitvoeren, en bepaalt u het gedrag van die threads (tot welke bron ze toegang moeten hebben, hoe ze worden gesynchroniseerd, enz.). OpenMP vereist de ondersteuning van de compiler, dus je kunt het ook zien als een uitbreiding van de ondersteunde talen.

En het is niet ongebruikelijk dat een toepassing zowel MPI als OpenMP kan gebruiken.

Other episodes