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