Elaborazione parallela e distribuita


15

Qual è (sono) le differenze tra elaborazione parallela e distribuita? Quando si tratta di scalabilità ed efficienza, è molto comune vedere soluzioni che si occupano di calcoli in gruppi di macchine, e talvolta viene definita elaborazione parallela o elaborazione distribuita.

In un certo senso, il calcolo sembra essere sempre parallelo, poiché ci sono cose che corrono contemporaneamente. Ma il calcolo distribuito è semplicemente correlato all'uso di più di una macchina o ci sono ulteriori specificità che distinguono questi due tipi di elaborazione? Non sarebbe ridondante dire, ad esempio, che un calcolo è parallelo E distribuito ?

Risposte:


16

Semplicemente impostato, "parallelo" significa eseguire contemporaneamente su risorse distinte (CPU), mentre "distribuito" significa eseguire su computer distinti, comportando problemi relativi alle reti.

Il calcolo parallelo che utilizza ad esempio OpenMP non è distribuito, mentre il calcolo parallelo con Message Passing è spesso distribuito.

Essere in un'impostazione "distribuita ma non parallela" significherebbe sottoutilizzare le risorse, quindi raramente si incontra ma è concettualmente possibile.


4

I termini "calcolo parallelo" e "calcolo distribuito" hanno certamente una grande sovrapposizione, ma possono essere ulteriormente differenziati. In realtà, lo hai già fatto nella tua domanda, chiedendo in seguito "elaborazione parallela" e "elaborazione distribuita".

Si potrebbe considerare "calcolo distribuito" come il termine più generale che implica "elaborazione distribuita" e, ad esempio, "archiviazione distribuita". Il termine comune, "distribuito", di solito si riferisce a una sorta di Message Passing su una rete, tra macchine che sono fisicamente separate.

Anche il termine "calcolo parallelo" sta per essere ulteriormente definito, ad esempio differenziando esplicitamente tra i termini "parallelo" e "concorrente", dove - approssimativamente - il primo fa riferimento al parallelismo dei dati e il secondo al parallelismo dei compiti , sebbene lì sono definizioni difficilmente rigide e vincolanti.

Quindi si potrebbe dire questo

  • "elaborazione distribuita" di solito (anche se non necessariamente) significa che è anche "elaborazione parallela"
  • Il "calcolo distribuito" è più generale e copre anche aspetti che non sono correlati al parallelismo
  • e ovviamente "calcolo parallelo" / "elaborazione parallela" non implica che sia "distribuito"

3

Le risposte presentate finora sono molto belle, ma mi aspettavo anche un'enfasi su una particolare differenza tra elaborazione parallela e distribuita: il codice eseguito. Considerando i processi paralleli, il codice eseguito è lo stesso, indipendentemente dal livello di parallelismo (istruzioni, dati, attività). Scrivi un singolo codice e verrà eseguito da thread / processori diversi, ad es. Durante il calcolo di prodotti di matrici o la generazione di permutazioni.

D'altra parte, il calcolo distribuito comporta l'esecuzione simultanea di algoritmi / programmi diversi in processori diversi (da una o più macchine). Tali calcoli vengono successivamente uniti in risultati intermedi / finali utilizzando i mezzi disponibili di comunicazione / sincronizzazione dei dati (memoria condivisa, rete). Inoltre, il calcolo distribuito è molto interessante per l'elaborazione di BigData, poiché consente di sfruttare il parallelismo del disco (di solito il collo di bottiglia per database di grandi dimensioni).

Infine, per il livello di parallelismo, può essere preso piuttosto come un vincolo alla sincronizzazione. Ad esempio, in GPGPU, che è multi-istruzione (SIMD) a singola istruzione, il parallelismo si verifica avendo input diversi per una singola istruzione, ciascuna coppia (data_i, istruzione) viene eseguita da un thread diverso. Tale è la moderazione che, in caso di rami divergenti, è necessario scartare molti calcoli non necessari, fino a quando i fili non si ricongiungono. Per i thread della CPU, tuttavia, divergono comunemente; tuttavia, è possibile utilizzare strutture di sincronizzazione per garantire l'esecuzione simultanea di sezioni specifiche del codice.

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.