Связь между банковским конфликтом и объединенным доступом в CUDA - PullRequest
0 голосов
/ 25 мая 2011

Я пытаюсь перенести некоторые данные из общей памяти в глобальную память. Некоторые последовательные потоки будут иметь доступ к одному банку (но не к тем же 32 битам). Так что есть некоторые банковские конфликты. (Я использую Visual Profiler, чтобы проверить это) Однако эти данные также объединяются и затем передаются в глобальную память. (Я использую Visual Profiler, чтобы проверить это) Почему данные записываются в глобальную память слитно? На мой взгляд, потоковый мультипроцессор выдает 32-битное слово одно за другим (в зависимости от пропускной способности банка). Таким образом, транзакции памяти не могут быть объединены в глобальной памяти. Я могу сделать некоторые ошибки здесь. Пожалуйста, помогите найти ошибки или дайте мне разумное объяснение. Спасибо.

1 Ответ

2 голосов
/ 25 мая 2011

Здесь происходит две разные вещи: чтение, которое влечет за собой банковский конфликт, и запись, которая не может быть объединена. Поскольку совместно используемая память намного быстрее, чем глобальная, вам обычно нужно в первую очередь беспокоиться о слиянии доступа.

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

Конфликты банков возникают, когда несколько потоков обращаются к адресам совместно используемой памяти, которые имеют одинаковые младшие биты (в частности, эквивалентны модулю 16). Если два потока используют один и тот же банк, то они будут сериализованы , что означает, что один будет выполняться после другого, вместо того, чтобы оба обращались к памяти одновременно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...