Aula 18: Conflitos de Bank em Shared Memory
Shared memory é rápida, mas ela é dividida em 32 canais paralelos chamados banks. As 32 threads de um warp podem ler juntas em um único passo — mas só se cada uma acessar um bank diferente. Quando duas acessam o mesmo bank, ocorre um bank conflict, e o hardware as obriga a esperar na fila. Nesta aul
Imagine 32 caixas de um mercado e 32 clientes. Se cada cliente vai para um caixa diferente, todos pagam ao mesmo tempo, rápido. Mas se dois clientes se amontoam no mesmo caixa, um espera pelo outro. O padding é como deslocar a fila na diagonal para que, de novo, cada cliente tenha um caixa só para si.
- bank
- Uma das 32 unidades de memória paralelas que compõem a shared memory. Uma palavra no índice i pertence ao bank i % 32.
- bank conflict
- Quando threads do mesmo warp acessam endereços diferentes que caem no mesmo bank, o hardware as serializa (um conflito de n vias custa n vezes o tempo).
- broadcast
- Quando todas as threads do warp leem exatamente o mesmo endereço em shared, o valor é distribuído (broadcast) para todas em um único passo — sem penalidade.
- padding
- Adicionar uma coluna extra (dummy), tile[N][N+1], que desloca cada linha em um bank, de modo que o acesso a colunas caia em 32 banks diferentes.