Здесь происходит две разные вещи: чтение, которое влечет за собой банковский конфликт, и запись, которая не может быть объединена. Поскольку совместно используемая память намного быстрее, чем глобальная, вам обычно нужно в первую очередь беспокоиться о слиянии доступа.
Объединение означает, что потоки записывают в небольшой диапазон адресов памяти. Например, если поток 1 пишет по адресу 1, а поток 2 по адресу 2, это хорошо. Если писать по адресам * 1 и 4 соответственно, это хуже. Менее важно, что это оптимально, если потоки записывают в увеличивающиеся адреса, начинающиеся с кратных 32, например, адресов 32 и 33. * (здесь я свободно использую «адрес», что означает смещение в 4 байта).
Конфликты банков возникают, когда несколько потоков обращаются к адресам совместно используемой памяти, которые имеют одинаковые младшие биты (в частности, эквивалентны модулю 16). Если два потока используют один и тот же банк, то они будут сериализованы , что означает, что один будет выполняться после другого, вместо того, чтобы оба обращались к памяти одновременно.