Где CUDA выделяет кадр стека для ядер? - PullRequest
6 голосов
/ 18 октября 2011

Мой вызов ядра завершается с ошибкой "недостаточно памяти".Это существенно использует кадр стека, и мне было интересно, является ли это причиной его сбоя.

При вызове nvcc с параметром --ptxas-options = -v выводится следующая информация профиля:

    150352 bytes stack frame, 0 bytes spill stores, 0 bytes spill loads
ptxas info    : Used 59 registers, 40 bytes cmem[0]

Аппаратное обеспечение: GTX480, sm20, 1,5 ГБ памяти устройства, 48 КБ разделяемой памяти / мультипроцессор.

Мой вопрос: где выделяется кадр стека: в общей, глобальной памяти, постоянной памяти, ..?

Я пробовал с 1 потоком на блок, а также с 32 потоками на блок.То же «нехватка памяти».

Другая проблема: количество резидентов, принадлежащих одному мультипроцессору, можно увеличить только в том случае, если общее количество регистров не превышает количество доступных регистров в мультипроцессоре (32 тыс. Для моей карты).Относится ли что-то подобное к размеру фрейма стека?

Ответы [ 2 ]

8 голосов
/ 19 октября 2011

Стек выделяется в локальной памяти.Распределение по физическим потокам (GTX480: 15 SM * 1536 потоков / SM = 23040 потоков).Вы запрашиваете 150 352 байта / нить => ~ 3,4 ГБ стекового пространства.CUDA может уменьшить максимальное количество физических потоков на запуск, если размер такой большой.Язык CUDA не предназначен для большого стека на поток.

С точки зрения регистров GTX480 ограничен 63 регистрами на поток и 32K регистрами на SM.

0 голосов
/ 18 октября 2011

Кадр стека, скорее всего, находится в локальной памяти.

Я считаю, что есть некоторое ограничение использования локальной памяти, но даже без него драйвер CUDA может выделить больше локальной памяти, чем только для одного потокав вашей конфигурации запуска <<< 1,1 >>>.

Так или иначе, даже если вам действительно удастся запустить ваш код, я боюсь, что он может быть довольно медленным из-за всех этих операций стека.Попробуйте уменьшить количество вызовов функций (например, путем включения этих функций).

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