Aula 4: Dimensionando o Grid — Threads Suficientes para N
Escondido em todo lançamento de GPU há um pequeno quebra-cabeça de contagem: você tem n itens para processar, mas as threads vêm em blocks de tamanho fixo — então quantos blocks cobrem todos eles sem deixar os últimos de fora? É disso que esta aula trata: garantir que existam threads suficientes. Vo
Você precisa transportar 1000 pessoas em ônibus com 256 lugares. 1000 dividido por 256 é cerca de 3,9, mas você não pode pedir 3,9 ônibus — você precisa de 4 inteiros, senão os últimos passageiros ficam para trás. A fórmula de teto sempre arredonda para cima, para um ônibus inteiro. É verdade que o quarto ônibus tem alguns lugares vazios — essas são as threads extras que simplesmente ficam paradas em silêncio.
- divisão de teto
- Divisão que sempre arredonda para cima. Em inteiros, é expressa como (n + d - 1) / d para obter o número de grupos que cobre todos os n elementos.
- threads por block
- O número de threads em cada block (o segundo número em <<<>>>). Um valor comum é 256. É o denominador na fórmula do número de blocks.
- tamanho do grid
- O número de blocks lançados, numBlocks. Escolhido para que o total de threads (numBlocks vezes threadsPerBlock) seja pelo menos n.
- verificação de limites
- A condição if (i < n) dentro do kernel que faz as threads excedentes (aquelas cujo índice está além de n) evitarem tocar na memória.