Лучший способ проверить это - профилировать код с помощью «Compute Visual Profiler»;это идет с инструментарием CUDA.Также есть большой раздел в GeForce Gems 3 на эту тему - «39.2.3 Предотвращение конфликтов банков».
" Когда несколько потоков в одной и той же деформации обращаются к одному и тому же банку,конфликт банков происходит, если все потоки деформации не обращаются к одному и тому же адресу в пределах одного и того же 32-битного слова". Во-первых, существует 16 банков памяти по 4 байта каждый.По сути, если у вас есть любой поток в полусфере , считывающий память из тех же 4-х байтов в банке общей памяти, у вас будут конфликты банков и сериализация и т. Д.
ОК, так что ваш первый пример :
Сначала давайте предположим, что ваши массивы, скажем, типа int ( 32-битное слово ).Ваш код сохраняет эти целые в общей памяти, через любой полусоюз, который Kth-поток сохраняет в банке Kth-памяти.Так, например, поток 0 первой половины деформации сохранит в shared_a[0]
, который находится в первом банке памяти, поток 1 сохранит в shared_a[1]
, каждая половина деформации имеет 16 потоков, которые отображаются в 16 банках по 4 байта.В следующей половине деформации первый поток теперь сохранит свое значение в shared_a [16], который снова находится в банке памяти first .Таким образом, если вы используете 4-байтовое слово типа int, float и т. Д., То ваш первый пример не приведет к конфликту банков.Если вы используете 1-байтовое слово, такое как char, в первой половине потоков деформации все 0, 1, 2 и 3 сохранят свои значения в первом банке общей памяти, что приведет к конфликту банков.
Второй пример :
Опять же, все это будет зависеть от размера используемого вами слова, но для примера я буду использовать 4-байтовое слово.Итак, глядя на первую половину деформации:
Количество потоков = 32
N = 64
Тема 0: запись в 0, 31, 63 Тема 1: записьна 1, 32
Все потоки в Half-Warp работают одновременно, поэтому запись в общую память не должна вызывать банковские конфликты.Но мне придется дважды проверить это.
Надеюсь, это поможет, извините за огромный ответ!