Sobes.tech
Senior

O que é memória partilhada e para que serve?

sobes.tech IA

Resposta da IA

A memória partilhada no contexto de GPU e CUDA é uma área de memória acessível a todos os threads dentro de um mesmo bloco de threads. Ela está localizada na própria GPU e é muito mais rápida do que a memória global, pois tem baixa latência e alta largura de banda.

O uso de memória partilhada permite trocar dados de forma eficiente entre os threads do bloco sem necessidade de recorrer à memória global lenta. Isto é especialmente importante para algoritmos de aprendizagem automática e cálculos paralelos, onde frequentemente é necessário partilhar resultados intermédios.

Exemplo: ao implementar convoluções ou operações matriciais, pode-se primeiro carregar os dados na memória partilhada, realizar os cálculos e depois guardar o resultado na memória global, o que acelera significativamente a execução.

Exemplo de código em CUDA:

__shared__ float tile[32][32];

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

// Carregar dados da memória global para a memória partilhada
tile[ty][tx] = input[y * width + x];
__syncthreads();

// Utilizar os dados da memória partilhada para cálculos
float val = tile[ty][tx] * 2.0f;

// Escrever o resultado de volta na memória global
output[y * width + x] = val;

Assim, a memória partilhada ajuda a otimizar o desempenho ao reduzir a quantidade de acessos lentos à memória global.