путаница в оптимизации совместной памяти - PullRequest
4 голосов
/ 10 апреля 2011

Я написал приложение на языке cuda, которое использует 1 КБ общей памяти в каждом блоке. Поскольку в каждом SM имеется только 16 КБ разделяемой памяти, в общей сложности можно разместить всего 16 блоков (правильно ли я понимаю?), Хотя на время можно запланировать только 8 блоков, но теперь, если какой-либо блок занят выполнением операции с памятью Таким образом, другой блок будет запланирован в gpu, но вся общая память используется другими 16 блоками, которые уже были запланированы там, так что cuda не будет планировать больше блоков на том же sm, если предыдущие выделенные блоки не будут полностью завершены? или он переместит разделяемую память какого-либо блока в глобальную память и выделит другой блок (в этом случае мы должны беспокоиться о задержке доступа к глобальной памяти?)

1 Ответ

7 голосов
/ 10 апреля 2011

Так не работает.Количество блоков, которые планируется запустить в любой момент на одном SM, всегда будет минимальным из следующих значений:

  1. 8 блоков
  2. Количество блоков, сумма которыхстатической и динамически выделяемой общей памяти составляет менее 16 КБ или 48 КБ, в зависимости от архитектуры и настроек графического процессора.Существуют также ограничения по размеру страницы разделяемой памяти, которые означают, что для каждого блока выделяется округление до следующего наибольшего значения, кратного размеру страницы
  3. Количество блоков, у которых сумма использования регистров на блок меньше 8192/16384/32678в зависимости от архитектуры.Существуют также размеры страниц в регистровом файле, которые означают, что для каждого блока выделения округляются до следующего наибольшего кратного размера страницы.

Это все, что нужно сделать.Нет «подкачки» разделяемой памяти для размещения большего количества блоков.NVIDIA создает электронную таблицу для загрузки компьютеров, которая поставляется вместе с инструментарием и доступна для отдельной загрузки.Вы можете увидеть точные правила в формулах, которые он содержит.Они также обсуждаются в разделе 4.2 Руководства по программированию CUDA.

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