Sobes.tech
Senior

Cos'è la memoria condivisa e perché usarla?

sobes.tech AI

Risposta dell'AI

La memoria condivisa nel contesto di GPU e CUDA è un'area di memoria accessibile a tutti i thread all’interno di un blocco di thread. Si trova sulla GPU stessa ed è molto più veloce della memoria globale, poiché ha una bassa latenza e un’ampia banda passante.

L’uso della memoria condivisa permette di scambiare dati in modo efficiente tra i thread del blocco senza dover accedere alla memoria globale lenta. Questo è particolarmente importante per algoritmi di machine learning e calcoli paralleli, dove spesso è necessario condividere risultati intermedi.

Esempio: nell’implementazione di convoluzioni o operazioni matriciali, si possono prima caricare i dati nella memoria condivisa, eseguire i calcoli e poi scrivere il risultato nella memoria globale, accelerando significativamente l’esecuzione.

Esempio di codice CUDA:

__shared__ float tile[32][32];

int tx = threadIdx.x;
int ty = threadIdx.y;

// Caricare i dati dalla memoria globale a quella condivisa
tile[ty][tx] = input[y * width + x];
__syncthreads();

// Usare i dati della memoria condivisa per i calcoli
float val = tile[ty][tx] * 2.0f;

// Scrivere il risultato di nuovo nella memoria globale
output[y * width + x] = val;

In questo modo, la memoria condivisa aiuta a ottimizzare le prestazioni riducendo il numero di accessi lenti alla memoria globale.