Банки с постоянной памятью CUDA

Когда мы проверяем использование регистра с помощью xptxas, мы видим что-то вроде этого:

ptxas info : Used 63 registers, 244 bytes cmem[0], 51220 bytes cmem[2], 24 bytes cmem[14], 20 bytes cmem[16]

Интересно, есть ли в настоящее время какая-либо документация, которая четко объясняет cmem[x]. Какой смысл разделять постоянную память на несколько банков, сколько всего банков и для чего используются другие банки, кроме 0, 2, 14, 16?

как примечание, @njuffa (особая благодарность вам) ранее объяснил на форуме nvidia, что такое банк 0,2,14,16:

Используемая постоянная память разделена на постоянные программные "переменные" (банк 1) плюс сгенерированные компилятором константы (банк 14).

cmem [0]: аргументы ядра

cmem[2]: определенные пользователем константные объекты

cmem[16]: сгенерированные компилятором константы (некоторые из которых могут соответствовать буквальным константам в исходном коде)

2 ответа

Решение

Насколько мне известно, использование константных банков GPU в CUDA официально не задокументировано. Количество и использование постоянных банков различаются между поколениями графических процессоров. Это детали реализации низкого уровня, о которых программистам не нужно беспокоиться.

Использование банков констант может быть изменено, если это необходимо, путем анализа машинного кода (SASS), сгенерированного для данной платформы. Фактически, именно так я и получил информацию, процитированную в первоначальном вопросе (эта информация пришла из моего сообщения на форуме разработчиков NVIDIA). Насколько я помню, информация, которую я там предоставил, была основана на специальном реверс-инжиниринге, специально примененном к устройствам класса Fermi, но я не могу проверить это в настоящее время, поскольку форумы в настоящее время недоступны.

Одной из причин наличия нескольких постоянных банков является резервирование видимой пользователем постоянной памяти для использования программистами CUDA при сохранении дополнительной информации только для чтения, предоставляемой аппаратными средствами или инструментами, в дополнительных постоянных банках.

Обратите внимание, что математическая библиотека CUDA предоставляется в виде исходных файлов, а функции встроены в код пользователя, поэтому постоянное использование памяти функциями математической библиотеки CUDA включено в статистику видимой пользователем постоянной памяти.

Пожалуйста, смотрите " Разное использование NVCC ". Они отмечают, что постоянное распределение банков зависит от профиля.

В руководстве по PTX говорится, что помимо постоянной памяти 64 КБ у них было еще 10 банков постоянной памяти. Драйвер может выделять и инициализировать постоянные буферы в этих областях и передавать указатели на буферы в качестве параметров функции ядра.

Я предполагаю, что профиль, данный для nvcc, позаботится о том, какие константы войдут в какую память В любом случае, нам не нужно беспокоиться, если каждая постоянная память cmem[n] меньше 64 КБ, потому что каждый банк имеет размер 64 КБ и является общим для всех потоков в сетке.

Другие вопросы по тегам