Calcolo distribuito vs parallelo


61

Sento spesso persone che parlano di calcolo parallelo e calcolo distribuito , ma ho l'impressione che non ci sia un chiaro confine tra i 2 e che le persone tendano a confonderlo abbastanza facilmente, mentre credo che sia molto diverso:

  • L' elaborazione parallela è più strettamente accoppiata al multi-threading o al modo di sfruttare appieno una singola CPU.
  • Il calcolo distribuito si riferisce alla nozione di dividere e conquistare, eseguendo attività secondarie su macchine diverse e quindi unendo i risultati.

Tuttavia, da quando siamo entrati nell'era dei Big Data , sembra che la distinzione si stia davvero sciogliendo e la maggior parte dei sistemi oggi utilizza una combinazione di elaborazione parallela e distribuita.

Un esempio che uso nel mio lavoro quotidiano è Hadoop con il paradigma Mappa / Riduci, un sistema chiaramente distribuito con i lavoratori che eseguono compiti su macchine diverse, ma sfruttando al massimo ogni macchina con un po 'di calcolo parallelo.

Vorrei ricevere qualche consiglio per capire come fare esattamente la distinzione nel mondo di oggi, e se possiamo ancora parlare di calcolo parallelo o non esiste più una chiara distinzione. A me sembra che il calcolo distribuito sia cresciuto molto negli ultimi anni, mentre il calcolo parallelo sembra stagnare, il che potrebbe probabilmente spiegare perché sento molto di più parlare di distribuire calcoli che parallelizzare.


5
Il calcolo parallelo non significa necessariamente una singola CPU: ci sono sistemi che hanno più CPU fisiche.
svick,

2
Inoltre, il calcolo distribuito non è limitato alla divisione e alla conquista di per sé. Ho più problemi con le persone che confondono concorrenza e parallelismo.
Raffaello

1
Se stai affrontando esplicitamente il calcolo distribuito, dovrai gestire casi di errore molto più profondi. Molte cose sono distribuite solo per motivi geografici. Alcuni sistemi distribuiti hanno ben poco da fare in parallelo perché un nodo centrale nella rete è un collo di bottiglia.
Rob,

Risposte:


57

Questa è in parte una questione di terminologia e, come tale, richiede solo che tu e la persona con cui stai parlando lo chiarisca in anticipo. Tuttavia, ci sono diversi argomenti che sono maggiormente associati al parallelismo , alla concorrenza o ai sistemi distribuiti .

Il parallelismo si occupa generalmente di realizzare un determinato calcolo il più rapidamente possibile, sfruttando più processori. La scala dei processori può variare da più unità aritmetiche all'interno di un singolo processore, a più processori che condividono la memoria, alla distribuzione del calcolo su molti computer. Per quanto riguarda i modelli di calcolo, il parallelismo consiste generalmente nell'utilizzare internamente più thread simultanei di calcolo, al fine di calcolare un risultato finale. Il parallelismo viene talvolta utilizzato anche per sistemi reattivi in tempo reale , che contengono molti processori che condividono un singolo clock principale; tali sistemi sono completamente deterministici .

La concorrenza è lo studio dei calcoli con più thread di calcolo. La concorrenza tende a venire dall'architettura del software piuttosto che dall'architettura dell'hardware. Il software può essere scritto per utilizzare la concorrenza al fine di sfruttare il parallelismo hardware, ma spesso la necessità è inerente al comportamento del software, per reagire a diversi eventi asincroni (ad esempio un thread di calcolo che funziona indipendentemente da un thread dell'interfaccia utente o un programma che reagisce agli interrupt di processo passando a un thread del gestore di interrupt).

Gli studi di calcolo distribuito separano i processori collegati da collegamenti di comunicazione. Mentre i modelli di elaborazione parallela spesso (ma non sempre) assumono memoria condivisa, i sistemi distribuiti si basano fondamentalmente sul passaggio dei messaggi. I sistemi distribuiti sono intrinsecamente concorrenti. Come la concorrenza, la distribuzione fa spesso parte dell'obiettivo, non solo della soluzione: se le risorse si trovano in posizioni geograficamente distinte, il sistema è intrinsecamente distribuito. I sistemi in cui sono possibili guasti parziali (dei nodi del processore o dei collegamenti di comunicazione) rientrano in questo dominio.


2
Buona risposta. Si dovrebbe sottolineare che il calcolo distribuito è un sottoinsieme del calcolo parallelo.
Raffaello

6
@Raphael: Non penso che ciò rappresenti accuratamente il focus dei due campi. In effetti, sono spesso considerati campi completamente separati, perché trattano questioni completamente diverse. Quando si programma un computer parallelo utilizzando MPI, non ci si preoccupa realmente di errori parziali, poiché è meno probabile che si verifichino in tali computer. D'altra parte, il calcolo distribuito è più interessato ai problemi della distribuzione, come i guasti parziali, e molto meno preoccupato di spremere ogni ciclo della CPU dalle macchine disponibili.
Dave Clarke,

4
@Raphael Al contrario, il calcolo distribuito è molto indipendente dal calcolo parallelo. Nello studio dei sistemi distribuiti, il calcolo parallelo è spesso il caso noioso (nessuna risorsa locale interessante, nessun errore).
Gilles 'SO- smetti di essere cattivo' il

Stavo usando le parole letteralmente; peccato se i termini sono stati appropriati e quindi divergenti.
Raffaello

Grazie per la tua risposta @Gilles, mi sembra di essere un po 'distorto verso il calcolo distribuito, felice di vedere qualcuno che si riferisce a qualcosa con i termini appropriati!
Charles Menguy,

17

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:

  1. Risolvi i problemi ad alta intensità di calcolo più velocemente;
  2. Risolvi problemi più grandi nello stesso lasso di tempo;
  3. 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.


2
Penso che questa risposta sia un po 'fuorviante; si concentra sul calcolo distribuito ad alte prestazioni (che è in effetti strettamente correlato al calcolo parallelo ad alte prestazioni), mentre l'intero campo del calcolo distribuito è molto più ampio.
Jukka Suomela,

Non sono d'accordo: la risposta include anche il calcolo distribuito ad alte prestazioni, che invece è di solito escluso dal calcolo distribuito. In effetti, ho discusso di modelli client-server e peer-to-peer, sicurezza, guasti e problemi di partizione di rete che sono il regno del calcolo distribuito.
Massimo Cafaro,

+1. Bella risposta! Mi chiedo se il calcolo distribuito sia utilizzato per scopi diversi dal calcolo parallelo? In altre parole, il calcolo distribuito è un sottoinsieme del calcolo parallelo, ovvero il calcolo distribuito appartiene al calcolo parallelo? A proposito, ecco la mia domanda cs.stackexchange.com/questions/20064
Tim

1
@Tim, anche il calcolo distribuito viene utilizzato di per sé, indipendentemente dal calcolo parallelo. Pensa, ad esempio, agli algoritmi distribuiti classici come elezione dei leader, consenso ecc.
Massimo Cafaro,

7

Non sono sicuro di aver capito la domanda. La distinzione tra elaborazione parallela e distribuita è ancora presente. Il fatto che sia possibile trarre vantaggio da entrambi nello stesso calcolo non cambia il significato dei concetti.

E non so quali notizie stai seguendo, ma sono abbastanza sicuro che l'elaborazione parallela non stagnasse, soprattutto perché penso che sia utile molto più spesso.

Se è necessario elaborare terabyte di dati, il calcolo distribuito (possibilmente combinato con il calcolo parallelo) è la strada da percorrere. Ma se hai bisogno di calcolare qualcosa su un desktop o uno smartphone, il solo calcolo parallelo ti darà probabilmente i migliori risultati, considerando che la connessione Internet potrebbe non essere sempre disponibile e, quando lo è, può essere lenta.


1
-1, poiché questa risposta non risponde realmente alla domanda (ad es. Spiegare i termini).
Jukka Suomela,

@JukkaSuomela, la domanda non è di spiegare i termini, ma la distinzione tra loro.
svick,

6

Ecco un recente documento che vale la pena leggere:

Michel Raynal: "Calcolo parallelo e calcolo distribuito: una grande confusione?" , Proc. Euro-Par 2015 , doi: 10.1007 / 978-3-319-27308-2_4

Astratto:

Questo breve articolo discute del fatto che, dal punto di vista dell'insegnamento, il parallelismo e il calcolo distribuito sono spesso confusi, mentre, osservando la loro natura profonda, affrontano questioni fondamentali distinte. Pertanto, i curricula appropriati dovrebbero essere progettati separatamente per ciascuno di essi. L'atteggiamento “tutto è in tutto (e reciprocamente)” non sembra essere un approccio rilevante per insegnare agli studenti i concetti importanti che caratterizzano il parallelismo da un lato e il calcolo distribuito dall'altro.


4

Nella sezione Introduzione del libro [1], gli autori forniscono un'altra prospettiva (diversa da quelle delle altre risposte) sul confronto tra calcolo distribuito e calcolo parallelo.

In termini generali, l'obiettivo dell'elaborazione parallela è di impiegare tutti i processori per eseguire un compito di grandi dimensioni. Al contrario, ogni processore in un sistema distribuito ha generalmente una propria agenda semi-indipendente, ma per vari motivi, tra cui condivisione di risorse, disponibilità e tolleranza agli errori, i processori devono coordinare le loro azioni.

Da questo punto di vista, il paradigma Mappa / Riduci rientra principalmente nel contesto di calcolo parallelo. Tuttavia, se vogliamo che i nodi coinvolti raggiungano un consenso su un leader comune, utilizzando, ad esempio, l' algoritmo Paxos (wiki) , stiamo prendendo in considerazione un problema tipico nel calcolo distribuito.

[1] Informatica distribuita. Fondamenti, simulazioni e argomenti avanzati. Hagit Attiya e Jennifer Welch. Del 2004.


0

C'è la risposta che è più appropriata qui. Fondamentalmente, si parallelriferisce a memory-shared multiprocessormentre si distributedriferisce al suo private-memory multicomputers. Cioè, la prima è una singola macchina multicore o superscalare mentre un'altra è una rete di computer geograficamente distribuita. Quest'ultimo implica meno accoppiamento e, quindi, maggiore disponibilità e tolleranza ai guasti a scapito di minori prestazioni. Le prestazioni sono ridotte perché è necessaria la (de) serializzazione dei dati in ogni round-trip e la sua consegna su distanze più lunghe, mentre è possibile fare semplicemente riferimento a un oggetto in memoria per passarlo a un'altra CPU in un processore parallelo.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.