2015-09-08 72 views

risposta

32

OpenMP è un modo per programmare su dispositivi di memoria condivisa. Ciò significa che il parallelismo si verifica dove ogni thread parallelo ha accesso a tutti i tuoi dati.

Si può pensare a questo: il parallelismo può verificarsi durante l'esecuzione di uno specifico loop for dividendo il loop tra i diversi thread.

MPI è un modo per programmare su dispositivi di memoria distribuiti. Ciò significa che il parallelismo avviene dove ogni processo parallelo sta lavorando nel proprio spazio di memoria in isolamento dagli altri.

Si può pensare a questo: ogni bit di codice che hai scritto viene eseguito indipendentemente da ogni processo. Il parallelismo si verifica perché ogni processo viene identificato con esattezza su quale parte del problema globale su cui si dovrebbe lavorare basandosi interamente sul proprio ID di processo.

Il modo in cui si scrive un programma OpenMP e MPI, ovviamente, è anche molto diverso.

+0

È possibile eseguire facilmente le operazioni descritte nella programmazione della memoria condivisa o distribuita. Quello che stai cercando è chiamato "riduzione" – NoseKnowsAll

8

MPI è l'acronimo di Message Passing Interface. È un insieme di dichiarazioni API sul trasferimento di messaggi (come invio, ricezione, trasmissione, ecc.) E quale comportamento ci si dovrebbe aspettare dalle implementazioni.

L'idea di "passaggio di messaggi" è piuttosto astratta. Potrebbe significare passare il messaggio tra processi o processi locali distribuiti attraverso host in rete, ecc. Le moderne implementazioni cercano molto di essere versatili e astratti via i molteplici meccanismi sottostanti (accesso alla memoria condivisa, rete IO, ecc.).

OpenMP è un'API che consente di semplificare (presumibilmente) più facilmente la scrittura di programmi multi-elaborazione con memoria condivisa. Non c'è idea di trasmettere messaggi in giro. Invece, con un insieme di funzioni standard e direttive del compilatore, si scrivono programmi che eseguono thread locali in parallelo e si controlla il comportamento di quei thread (a quale risorsa dovrebbero avere accesso, come sono sincronizzati, ecc.). OpenMP richiede il supporto del compilatore, quindi puoi anche considerarlo come un'estensione delle lingue supportate.

E non è raro che un'applicazione possa utilizzare sia MPI che OpenMP.