Nvidia GPU одновременный доступ к одному месту в глобальной памяти - PullRequest
2 голосов
/ 30 января 2020

Мне было интересно, что происходит, когда несколько потоков в одной деформации пытаются получить доступ к одному и тому же месту в глобальной памяти (например, к одному и тому же 4-байтовому слову), особенно в графических процессорах Turing с вычислительной возможностью 7.5. Я считаю, что в разделяемой памяти, которая может привести к конфликту банков, если все потоки не обращаются к одному и тому же месту, данные будут транслироваться.

Просто для того, чтобы придумать надуманный пример:

1) Учтите, что первые 16 потоков деформации обращаются к одному 4-байтовому слову, тогда как остальные 16 потоков обращаются к следующему 4-байтному. слово. Как осуществляется доступ в такой ситуации? Сериализован ли он для каждого потока в полу-деформации?

2) Что если вся деформация попытается получить доступ к одному 4-байтовому слову из глобальной памяти?

1 Ответ

4 голосов
/ 30 января 2020
  1. Нет сериализации. Все графические процессоры CUDA Kepler и новее будут транслироваться в этом сценарии. Хита производительности нет.

  2. Без разницы. Любой шаблон перекрывающегося доступа на чтение обрабатывается в одном запросе с оптимизированным числом транзакций на запрос. Количество транзакций на запрос будет не выше, чем при обычном считывании типа «один поток на соседнее местоположение», и может быть ниже. Например, на современном графическом процессоре вы можете наблюдать 4 (32-байтовые) транзакции на объединенный глобальный запрос на чтение. В случае, если все потоки (в основе) получают доступ к одному местоположению, это будет только одна транзакция на запрос.

...