Memoria distribuita - Distributed memory
In informatica , la memoria distribuita si riferisce a un sistema informatico multiprocessore in cui ogni processore ha la propria memoria privata . Le attività di calcolo possono operare solo su dati locali e, se sono necessari dati remoti, l'attività di calcolo deve comunicare con uno o più processori remoti. Al contrario, un multiprocessore a memoria condivisa offre un unico spazio di memoria utilizzato da tutti i processori. I processori non devono essere consapevoli di dove risiedono i dati, tranne per il fatto che potrebbero esserci penalità sulle prestazioni e che le condizioni di competizione devono essere evitate.
In un sistema di memoria distribuita c'è tipicamente un processore, una memoria e una qualche forma di interconnessione che consente ai programmi su ciascun processore di interagire tra loro. L'interconnessione può essere organizzata con collegamenti punto a punto oppure un hardware separato può fornire una rete di commutazione. La topologia di rete è un fattore chiave nel determinare come la macchina multiprocessore scale . I collegamenti tra i nodi possono essere implementati utilizzando alcuni protocolli di rete standard (ad esempio Ethernet ), utilizzando collegamenti di rete personalizzati (utilizzati ad esempio nel transputer ) o utilizzando memorie a doppia porta .
Programmazione di macchine a memoria distribuita
La questione chiave nella programmazione di sistemi di memoria distribuita è come distribuire i dati sulle memorie. A seconda del problema risolto, i dati possono essere distribuiti staticamente oppure possono essere spostati attraverso i nodi. I dati possono essere spostati su richiesta oppure i dati possono essere inviati anticipatamente ai nuovi nodi.
Ad esempio, se un problema può essere descritto come una pipeline in cui i dati x vengono elaborati successivamente tramite le funzioni f , g , h , ecc. (Il risultato è h ( g ( f ( x )))), allora questo può essere espresso come un problema di memoria distribuita in cui i dati vengono trasmessi prima al nodo che esegue f che passa il risultato al secondo nodo che calcola g , e infine al terzo nodo che calcola h . Questo è anche noto come calcolo sistolico .
I dati possono essere conservati staticamente nei nodi se la maggior parte dei calcoli avviene localmente e solo le modifiche sui bordi devono essere riportate ad altri nodi. Un esempio di ciò è la simulazione in cui i dati vengono modellati utilizzando una griglia e ogni nodo simula una piccola parte della griglia più grande. Ad ogni iterazione, i nodi informano tutti i nodi vicini dei nuovi dati edge.
Allo stesso modo, nella memoria condivisa distribuita ogni nodo di un cluster ha accesso a una grande memoria condivisa oltre alla memoria privata non condivisa limitata di ogni nodo.
- Il vantaggio della memoria condivisa (distribuita) è che offre uno spazio di indirizzi unificato in cui è possibile trovare tutti i dati.
- Il vantaggio della memoria distribuita è che esclude le race condition e costringe il programmatore a pensare alla distribuzione dei dati.
- Il vantaggio della memoria distribuita (condivisa) è che è più facile progettare una macchina scalabile con l'algoritmo
La memoria condivisa distribuita nasconde il meccanismo di comunicazione, non nasconde la latenza della comunicazione.