Для графических процессоров nvidia (и amd в этом отношении) локальная память разделена на банки памяти. Каждый банк может обращаться только к одному набору данных за раз, поэтому, если halfwarp пытается загрузить / сохранить данные из / в один и тот же банк, доступ должен быть сериализован (это конфликт банков). Для gt200 gpus имеется 16 банков (32 банка для fermi), 16 или 32 банка для графических процессоров AMD (57xx или выше: 32, все ниже: 16)), которые чередуются с размером 32 бита (так что байты 0-3 находятся в банк 1, 4-7 в банке 2, ..., 64-69 в банке 1 и так далее). Для лучшей визуализации это выглядит примерно так:
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 |...
...
Таким образом, если каждый поток в полувиске обращается к последовательным 32-битным значениям, конфликты банков отсутствуют. Исключением из этого правила (каждый поток должен иметь доступ к своему собственному банку) являются широковещательные рассылки: если все потоки обращаются к одному и тому же адресу, значение считывается только один раз и транслируется всем потокам (для GT200 это должны быть все потоки в полувиске, обращающиеся к один и тот же адрес, iirc fermi и AMD gpus могут сделать это для любого количества потоков, обращающихся к одному и тому же значению).