Bedste svar
OpenMP er en programmeringsplatform der gør det muligt for en at parallelisere kode over et homogent delt hukommelsessystem (f.eks. en multi-core processor). For eksempel kunne man parallelisere et sæt operationer over en multi-core processor, hvor kernerne deler hukommelse mellem hinanden. Denne hukommelse inkluderer cachehukommelse, RAM, harddiskhukommelse osv., Og kommunikation er let og relativt billig.
Åbn MPI (baseret på Message Passing Interface ) er også en programmeringsplatform, men giver i stedet en mulighed for at parallelisere kode over en (ikke-) homogen distribueret system (f.eks. en supercomputer). For eksempel er det muligt at parallelisere et helt program over et netværk af computere eller noder, der kommunikerer over det samme netværk. Da disse noder i det væsentlige er computere , de har deres eget hukommelseslayout og deres eget sæt kerner (se OpenMP-beskrivelse). Kommunikation mellem noder, når det sammenlignes med delte hukommelsessystemer, kan være vanskelig og er normalt dyrt.
Svar
OpenMP er en sprogudvidelse til at udtrykke dataparallelle operationer (ofte arrays paralleliseret over sløjfer). MPI er et bibliotek til meddelelsesoverførsel mellem delte-intet-processer.
OpenMP er et højere niveau af abstraktion, da dets formål er at udsætte programmets samtidighed og dataforløb for compileren. I modsætning hertil er MPI-samtidighed implicit (alle processer er parallelle), og -meddelelserne etablerer dataflytningsstrukturen for beregningen.
Selvom det “s almindeligt at tænke på OpenMP som kun handler om delt hukommelse, der er intet, der forhindrer en OpenMP-implementering i at bruge MPI til at fungere på tværs af processer og værter. OTOH, dualiteten af delt hukommelse og meddelelsesoverførsel betyder, at MPI-implementeringer ofte drager fordel af delt hukommelse til rækker på samme node …