Beste svaret
OpenMP er en programmeringsplattform som gjør det mulig å parallellisere koden over et homogent delt minnesystem (f.eks. en flerkjerneprosessor). For eksempel kan man parallellisere et sett med operasjoner over en flerkjerneprosessor der kjernene deler minne mellom hverandre. Dette minnet inkluderer hurtigminne, RAM, harddiskminne osv., Og kommunikasjonen er enkel og relativt billig.
Åpne MPI (basert på Message Passing Interface ) er også en programmeringsplattform, men gir i stedet muligheten til å parallellisere koden over et (ikke-) homogent distribuert system (f.eks. en superdatamaskin). For eksempel er det mulig å parallellisere et helt program over et nettverk av datamaskiner, eller noder, som kommuniserer over samme nettverk. Siden disse nodene egentlig er datamaskiner , de har sitt eget minnelayout og sitt eget sett med kjerner (se OpenMP-beskrivelse). Kommunikasjon mellom noder, sammenlignet med delte minnesystemer, kan være vanskelig og er vanligvis kostbar.
Svar
OpenMP er en språkutvidelse for å uttrykke dataparallelle operasjoner (ofte arrangerte parallelliserte over sløyfer). MPI er et bibliotek for overføring av meldinger mellom delte ingenting-prosesser.
OpenMP er et høyere nivå av abstraksjon, siden formålet er å eksponere programmets samtidighet og dataflyt for kompilatoren. MPI-samtidighet er derimot implisitt (alle prosesser er parallelle), og -meldingene etablerer dataflytstrukturen til beregningen.
Selv om den «Det er vanlig å tenke på OpenMP som bare om delt minne, det er ingenting som hindrer en OpenMP-implementering i å bruke MPI til å operere på tvers av prosesser og verter. OTOH, dualiteten til delt minne og overføring av meldinger betyr at MPI-implementeringer ofte utnytter delt minne for ranger på samme node …