Beste antwoord
OpenMP is een programmeerplatform waarmee men code kan parallelliseren over een homogeen gedeeld geheugensysteem (bijv. een multi-coreprocessor). Men zou bijvoorbeeld een reeks bewerkingen kunnen parallelliseren via een multi-coreprocessor waarbij de kernen geheugen met elkaar delen. Dit geheugen omvat cachegeheugen, RAM, hardeschijfgeheugen, enz., En communicatie is gemakkelijk en relatief goedkoop.
Open MPI (gebaseerd op op Message Passing Interface ) is ook een programmeerplatform, maar biedt in plaats daarvan de mogelijkheid om code te parallelliseren over een (niet-) homogeen gedistribueerd systeem (bijvoorbeeld een supercomputer). Het is bijvoorbeeld mogelijk om een volledig programma parallel te laten lopen via een netwerk van computers, of knooppunten, die via hetzelfde netwerk communiceren. Aangezien deze knooppunten in wezen computers zijn , hebben ze hun eigen geheugenlayout en hun eigen set cores (zie OpenMP-beschrijving). Communicatie tussen knooppunten kan, vergeleken met gedeelde geheugensystemen, moeilijk zijn en is meestal duur.
Antwoord
OpenMP is een taaluitbreiding voor het uitdrukken van gegevensparallelle bewerkingen (gewoonlijk arrays parallel over lussen). MPI is een bibliotheek voor het doorgeven van berichten tussen processen die niets delen.
OpenMP is een hoger niveau van abstractie, aangezien het doel is om de gelijktijdigheid en dataflow van het programma aan de compiler bloot te stellen. MPI-concurrency daarentegen is impliciet (alle processen zijn parallel), en de -berichten bepalen de gegevensstroomstructuur van de berekening.
Hoewel het Het is gebruikelijk om te denken dat OpenMP alleen over gedeeld geheugen gaat, er is niets dat een OpenMP-implementatie ervan weerhoudt MPI te gebruiken om over processen en hosts heen te werken. OTOH, de dualiteit van gedeeld geheugen en het doorgeven van berichten betekent dat MPI-implementaties vaak profiteren van gedeeld geheugen voor rangen op hetzelfde knooppunt …