Aula 9: Grids e Blocks 2D
Matrizes e imagens são naturalmente bidimensionais, então o CUDA permite organizar as threads em um grid 2D. Em vez de uma única dimensão x, temos threadIdx.x e threadIdx.y, blockIdx.x e blockIdx.y, além de blockDim.x e blockDim.y. Cada thread calcula um row e um col: row = blockIdx.y * blockDim.y +
Um teatro com fileiras e assentos. Para descobrir o assento a partir de um único número sequencial, você conta: cada fileira completa contribui com width assentos, então o assento é row vezes width mais o número do col. Cada lanterninha (a thread) sabe exatamente o seu row e o seu col.
- grid 2D
- Organizar as threads em duas dimensões (x e y), conveniente para matrizes e imagens onde cada elemento tem uma linha e uma coluna.
- row e col
- row vem da dimensão y (blockIdx.y, threadIdx.y) e col da dimensão x. Juntos, eles são a coordenada 2D da thread.
- achatamento row-major
- Transformar (row, col) em um índice plano: idx = row * width + col, porque a memória é armazenada linha após linha.
- dim3
- Um tipo de três componentes (x, y, z) que descreve o tamanho de um block ou grid, por exemplo dim3 block(16, 16).