Migliore risposta
OpenMP è una piattaforma di programmazione che consente di parallelizzare il codice su un sistema di memoria condivisa omogeneo (ad esempio, un processore multi-core). Ad esempio, si potrebbe parallelizzare un insieme di operazioni su un processore multi-core in cui i core condividono la memoria tra loro. Questa memoria include memoria cache, RAM, memoria del disco rigido, ecc. E la comunicazione è facile e relativamente economica.
Open MPI (basato su Message Passing Interface ) è anche una piattaforma di programmazione, ma fornisce invece la possibilità di parallelizzare il codice su un sistema distribuito (ad esempio, un supercomputer). Ad esempio, è possibile parallelizzare un intero programma su una rete di computer o nodi che comunicano sulla stessa rete. Poiché questi nodi sono essenzialmente computer , hanno il proprio layout di memoria e il proprio set di core (vedere la descrizione di OpenMP). La comunicazione tra i nodi, rispetto ai sistemi di memoria condivisa, può essere difficile e di solito è costosa.
Risposta
OpenMP è unestensione del linguaggio per esprimere operazioni parallele ai dati (comunemente array parallelizzati su loop). MPI è una libreria per il passaggio di messaggi tra processi che non condividono nulla.
OpenMP è un livello superiore di astrazione, poiché il suo scopo è di esporre la concorrenza e il flusso di dati del programma al compilatore. Al contrario, la concorrenza MPI è implicita (tutti i processi sono paralleli) e i messaggi stabiliscono la struttura del flusso di dati del calcolo.
Anche se “È comune pensare che OpenMP riguardi solo la memoria condivisa, non cè nulla che impedisca a unimplementazione di OpenMP di utilizzare MPI per operare su processi e host. OTOH, la dualità di memoria condivisa e trasmissione di messaggi significa che le implementazioni MPI spesso sfruttano la memoria condivisa per ranghi sullo stesso nodo …