Aula 16: Fundamentos de Shared Memory
Shared memory é uma memória pequena e rápida que fica no chip do SM e serve como um scratchpad para todas as threads do mesmo block. Você a declara com a palavra-chave __shared__, por exemplo __shared__ float tile[256];, e ela é cerca de 100 vezes mais rápida que global memory — mas pequena (dezenas
Global memory é um armazém enorme e distante. Shared memory é uma gaveta pequena ao lado da mesa da equipa: você busca no armazém uma vez, coloca na gaveta, e todo mundo da equipa pega dali rapidamente. Cada equipa (block) recebe sua própria gaveta separada.
- shared memory
- Memória rápida on-chip partilhada por todas as threads do mesmo block, declarada com __shared__. Muito mais rápida que global, mas pequena.
- scratchpad
- Um espaço de trabalho temporário onde o block guarda dados lidos repetidas vezes, para evitar ter que ir até a global memory lenta a cada vez.
- escopo de block
- O escopo de shared memory: só para o block que a criou, e só enquanto esse block está a correr. Outros blocks não a veem.
- reuso de dados
- Quando o mesmo valor é necessário várias vezes. Nesse caso, vale a pena carregá-lo uma vez na shared memory e lê-lo dali de forma barata.