Come sottolineato da @Raphael, il Distributed Computing è un sottoinsieme del Parallel Computing; a sua volta, Parallel Computing è un sottoinsieme di Concurrent Computing.
La concorrenza si riferisce alla condivisionedi risorse nello stesso lasso di tempo. Ad esempio, diversi processi condividono la stessa CPU (o core della CPU) o condividono la memoria o un dispositivo I / O. I sistemi operativi gestiscono risorse condivise. Le macchine multiprocessore e i sistemi distribuiti sono architetture in cui il controllo della concorrenza svolge un ruolo importante. La concorrenza si verifica sia a livello hardware che software. Più dispositivi funzionano contemporaneamente, i processori hanno parallelismo interno e lavorano su più istruzioni contemporaneamente, i sistemi hanno più processori e i sistemi interagiscono attraverso la comunicazione di rete. La concorrenza si verifica a livello di applicazioni nella gestione del segnale, nella sovrapposizione di I / O e nell'elaborazione, nella comunicazione e nella condivisione di risorse tra processi o tra thread nello stesso processo.
Due processi (o thread) in esecuzione sullo stesso sistema in modo che la loro esecuzione sia intercalata nel tempo sono simultanei: i processi (thread) condividono la risorsa CPU. Mi piace la seguente definizione: due processi (thread) in esecuzione sullo stesso sistema sono simultanei se e solo se il secondo processo (thread) inizia l'esecuzione quando il primo processo (thread) non ha ancora terminato la sua esecuzione.
La concorrenza diventa parallelismo quando i processi (o thread) vengono eseguiti su CPU diverse (o core della stessa CPU). Il parallelismo in questo caso non è "virtuale" ma "reale".
Quando quelle CPU appartengono alla stessa macchina, ci riferiamo al calcolo come "parallelo"; quando le CPU appartengono a macchine diverse , possono essere geograficamente diffuse, ci riferiamo al calcolo come "distribuito".
Pertanto, il calcolo distribuito è un sottoinsieme del calcolo parallelo, che è un sottoinsieme del calcolo simultaneo.
Certo, è vero che, in generale, il calcolo parallelo e distribuito sono considerati diversi. Il calcolo parallelo è correlato ad applicazioni strettamente collegate e viene utilizzato per raggiungere uno dei seguenti obiettivi:
- Risolvi i problemi ad alta intensità di calcolo più velocemente;
- Risolvi problemi più grandi nello stesso lasso di tempo;
- Risolvi problemi delle stesse dimensioni con maggiore precisione nello stesso lasso di tempo.
In passato, il primo obiettivo era la ragione principale del calcolo parallelo: accelerare la soluzione del problema. In questo momento, e quando possibile, gli scienziati utilizzano principalmente il calcolo parallelo per raggiungere il secondo obiettivo (ad esempio, sono disposti a trascorrere lo stesso tempo impiegato in passato a risolvere in parallelo un problema di dimensioni per risolvere ora un problema di dimensione ) o il terzo (cioè, sono disposti a passare la stessa quantità di tempo trascorso in passato a risolvere in parallelo un problema di dimensione per risolvere ora un problema di dimensionexTx5xTxxma con una maggiore precisione utilizzando un modello molto più complesso, più equazioni, variabili e vincoli). L'elaborazione parallela può utilizzare memoria condivisa, passaggio di messaggi o entrambi (ad esempio, intra-nodo di memoria condivisa utilizzando OpenMP, inter-nodo di passaggio messaggi mediante MPI); può usare anche acceleratori GPU. Poiché l'applicazione viene eseguita su un supercomputer parallelo, di solito non prendiamo in considerazione problemi come guasti, partizioni di rete ecc., Poiché la probabilità di questi eventi è, a fini pratici, prossima allo zero. Tuttavia, applicazioni parallele di grandi dimensioni come le simulazioni dei cambiamenti climatici, che possono essere eseguite per diversi mesi, di solito si occupano di guasti e utilizzano il meccanismo di controllo / riavvio per evitare di riavviare la simulazione dall'inizio in caso di problemi.
Il calcolo distribuito è correlato ad applicazioni vagamente accoppiate, in cui l'obiettivo (per il supercalcolo distribuito ) è risolvere problemi altrimenti troppo grandi o la cui esecuzione può essere suddivisa su diversi componenti che potrebbero trarre vantaggio dall'esecuzione su architetture diverse. Esistono diversi modelli tra cui client-server, peer-to-peer ecc. I problemi che sorgono nel calcolo distribuito, come sicurezza, guasti, partizione di rete ecc. Devono essere presi in considerazione in fase di progettazione, poiché in questo contesto i guasti sono la regola e non l'eccezione.
Infine, Grid e Cloud computing sono entrambi sottoinsiemi di elaborazione distribuita. Il paradigma del grid computing è emerso come un nuovo campo distinto dal tradizionale computing distribuito per la sua attenzione alla condivisione delle risorse su larga scala e alle applicazioni innovative ad alte prestazioni. Le risorse condivise appartengono generalmente a più domini amministrativi diversi (le cosiddette organizzazioni virtuali ). Grid Computing, pur essendo stato ampiamente utilizzato dagli scienziati nell'ultimo decennio, è tradizionalmente difficile per gli utenti ordinari. Il cloud computing cerca di colmare il divario, consentendo agli utenti ordinari di sfruttare facilmente più macchine, che si trovano nello stesso data center e non sono geograficamente distribuite, attraverso l'uso di macchine virtualiche possono essere assemblati dagli utenti per eseguire le loro applicazioni. A causa dell'hardware, in particolare la solita mancanza di un'interconnessione di rete ad alte prestazioni (come Infiniband ecc.), I cloud non sono destinati all'esecuzione di applicazioni MPI parallele. Le applicazioni distribuite in esecuzione su cloud sono generalmente implementate per sfruttare il paradigma Mappa / Riduci. A proposito, molte persone pensano a Map / ridurre come un modello di flusso di dati parallelo.