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.