Che cos'è la "coalescenza della memoria"?


16

Sono venuto a sapere che l'unità di elaborazione grafica ha qualcosa chiamato coalescenza della memoria. Leggendolo non ero chiaro sull'argomento. È in qualche modo correlato al parallelismo a livello di memoria.

Ho cercato su Google ma non sono riuscito a ottenere una risposta soddisfacente.

Sarebbe utile se qualcuno fornisse una spiegazione più completa e di facile comprensione.


Il parallelismo a livello di memoria (MLP) è la capacità di eseguire più transazioni di memoria contemporaneamente. In molte architetture, ciò si manifesta come la capacità di eseguire contemporaneamente un'operazione di lettura e scrittura, anche se esiste comunemente come essere in grado di eseguire più letture contemporaneamente. È raro eseguire più operazioni di scrittura contemporaneamente, a causa del rischio di potenziali conflitti (tentando di scrivere due valori diversi nella stessa posizione). Si noti che questo non è lo stesso delle operazioni di memoria vettoriale, come la lettura di 4 valori separati ma contigui a 8 bit in una singola lettura a 32 bit.
Sai Kiran Grandhi,

Risposte:


11

"Coalescenza" può anche riferirsi a modelli di accesso alla memoria a coalescenza . In questo utilizzo, coalescenza viene utilizzata per assicurarsi che i thread vengano eseguiti contemporaneamente, provare ad accedere alla memoria che si trova nelle vicinanze. Questo di solito perché:

  • La memoria viene in genere recuperata in blocchi di grandi dimensioni dalla RAM.
  • Alcune unità di elaborazione tenteranno di prevedere futuri accessi alla memoria e di memorizzare la cache in anticipo, pur elaborando parti più vecchie della memoria.
  • La memoria viene memorizzata nella cache in una gerarchia di cache successivamente più grandi ma più lente.

Pertanto, è importante creare programmi in grado di utilizzare modelli di memoria prevedibili. È ancora più importante con un programma thread, in modo che le richieste di memoria non saltino dappertutto; in caso contrario l'unità di elaborazione attenderà che le richieste di memoria siano soddisfatte.

Diagrammi ispirati all'introduzione alla programmazione parallela: lezione GPU Hardware 2 e schemi di comunicazione parallela :

Sotto: quattro thread, con accesso uniforme alla memoria. Il rettangolo tratteggiato nero rappresenta una singola richiesta di memoria di 4 parole.

inserisci qui la descrizione dell'immagine

Gli accessi alla memoria sono vicini e possono essere recuperati in un colpo / blocco (o il numero minimo di richieste).

Tuttavia, se aumentiamo la " falcata " dell'accesso tra i thread, richiederà molti più accessi alla memoria. Sotto: altri quattro thread, con un passo di due.

4 fili coalescenti a memoria e 4 fili con un passo di 2

Qui puoi vedere che questi 4 thread richiedono 2 richieste di blocchi di memoria. Più piccolo è il passo, meglio è. Maggiore è il passo, maggiori sono le richieste potenzialmente richieste.

Naturalmente, peggio di un grande passo di memoria è un modello di accesso alla memoria casuale. Questi saranno quasi impossibili da pipeline, cache o prevedere.

Fonti TikZ:


2
Più thread possono anche accedere allo stesso elemento di dati (non solo un elemento all'interno dello stesso blocco più grande), in qualche modo simile alle operazioni SPLAT (ma più generiche di) nelle architetture SIMD. Come processori di throughput tolleranti alla latenza, le GPU possono permettersi di aumentare la latenza di accesso quando ciò consente una maggiore larghezza di banda effettiva.
Paul A. Clayton,

Il link fornito è interrotto.
Daniel Soutar,

3

Penso di vedere due usi della parola "coalescenza" intorno alla rete, entrambi legati alla memoria. Uno è coalizzare le allocazioni di memoria liberate , che è ciò a cui si fa riferimento nella pagina di Wikipedia collegata alla domanda.


Allocazione delle allocazioni di memoria liberate

Quando si alloca memoria, a volte il gestore della memoria può avere una situazione in cui ci sono due blocchi di memoria adiacenti che vengono liberati. La combinazione di questi li renderebbe un singolo blocco di memoria liberato - questo si chiama "coalescenza". Esempio:

A partire da 4 blocchi assegnati:

4 blocchi assegnati

Successivamente, uno di questi viene liberato:

Ora 1 blocco gratuito

E più tardi un altro viene liberato:

Ora 2 blocchi liberi adiacenti

Ora, perché avere due blocchi liberi adiacenti? Coalescendoli:

Combinando i blocchi liberati, ora 2 blocchi allocati, 1 liberato

La coalescenza può verificarsi non appena è possibile, o, ad esempio, in un garbage collector, quando il collector viene eseguito.

Fonti TikZ:


Penso che questa risposta non soddisfi ciò che voglio. La coalescenza della memoria sta leggendo blocchi contigui di memoria come hai fornito in un'altra risposta. Se possibile, rimuovi questa risposta e il link in questione che hai modificato
sai kiran grandhi,

@saikirangrandhi Terrò la risposta come riferimento. È possibile rivedere / annullare la modifica alla domanda come si desidera; puoi semplicemente premere "modifica" sotto la domanda.
Realz Slaw,
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.