Aula 27: Multiplicação de Matrizes em Tiles
A multiplicação de matrizes C = A * B calcula cada elemento C[row][col] como uma soma de produtos ao longo da dimensão K: C[row][col] = soma sobre k de A[row][k] * B[k][col]. Na versão naive, cada thread responsável por um elemento de C lê uma linha inteira de A e uma coluna inteira de B diretamente
Imagine montar um prato e ficar correndo repetidamente até o depósito distante atrás dos mesmos ingredientes. Em vez disso, você traz uma caixa inteira de uma vez para a bancada da cozinha (a prateleira próxima), e todos os cozinheiros pegam dela rapidamente. O tiling é exatamente isso: você traz um tile de dados uma vez para a shared memory próxima, e o reaproveita ali de novo e de novo.
- multiplicação de matrizes em tiles (tiled matmul)
- Um algoritmo de matmul que carrega tiles de A e B na shared memory, sincroniza, e acumula a partir dali — economizando leituras da memória global.
- tile
- Um sub-bloco de TILE x TILE da matriz, carregado de uma vez na shared memory e usado por todas as threads do block.
- reaproveitamento da shared memory
- Cada elemento carregado na shared memory é lido por TILE threads diferentes, então uma leitura global serve muitos produtos.
- dimensão K
- A dimensão partilhada no produto: A é M x K e B é K x N. A soma sobre k percorre K e é calculada tile por tile.