Para nvidia (y amd para el caso) gpus, la memoria local se divide en bancos de memoria. Cada banco solo puede direccionar un conjunto de datos a la vez, por lo que si un medio warp intenta cargar / almacenar datos desde / hacia el mismo banco, el acceso debe ser serializado (esto es un conflicto bancario). Para gt200 gpus hay 16 bancos (32 bancos para fermi), 16 o 32 bancos para AMD gpus (57xx o superior: 32, todo a continuación: 16)), que están intercalados con una granuidad de 32 bits (por lo que los bytes 0-3 están en banco 1, 4-7 en el banco 2, ..., 64-69 en el banco 1 y así sucesivamente). Para una mejor visualización, básicamente se ve así:
Bank | 1 | 2 | 3 |...
Address | 0 1 2 3 | 4 5 6 7 | 8 9 10 11 |...
Address | 64 65 66 67 | 68 69 70 71 | 72 73 74 75 |...
...
Entonces, si cada hilo en una media distorsión accede a valores sucesivos de 32 bits, no hay conflictos bancarios. Una excepción a esta regla (cada subproceso debe acceder a su propio banco) son las difusiones: si todos los subprocesos acceden a la misma dirección, el valor solo se lee una vez y se transmite a todos los subprocesos (para GT200 tiene que ser todos los subprocesos en el halfwarp que acceden al misma dirección, iirc fermi y AMD gpus pueden hacer esto para cualquier número de subprocesos que accedan al mismo valor).