Aula 23: Operações Atômicas: atomicAdd e histogramas
Quando milhares de threads tentam atualizar a mesma célula de memória ao mesmo tempo, surge uma condição de corrida (race condition). Pense num histograma: cada thread lê um valor e quer incrementar o contador bins[v] num. A operação bins[v]++ parece atómica, mas na prática ela é três passos separad
Imagine um pote de contagem partilhado. Sem atomic, duas pessoas veem o número 5, as duas somam 1 de cabeça, e as duas escrevem 6 — mas deveria ter chegado a 7, então uma contagem se perdeu. atomic é como deixar só uma pessoa por vez segurar o pote, somar, e devolver — ninguém pisa no pé do outro.
- condição de corrida (race condition)
- Quando duas operações paralelas acedem à mesma memória e pelo menos uma escreve, e o resultado depende da ordem arbitrária em que elas correm.
- operação atómica (atomic)
- Uma operação read-modify-write que o hardware executa como uma unidade indivisível — nenhuma outra thread entra no meio. Por exemplo, atomicAdd.
- read-modify-write
- Os três passos do ++: ler o valor, modificar, e escrever de volta. Em paralelo, sem proteção, esses passos se misturam entre threads.
- histograma
- Contar quantas vezes cada valor aparece. Cada thread incrementa bins[v]; várias threads no mesmo bin exigem atomicAdd.