Где CUDA выделяет фрейм стека для ядер?

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

При вызове 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 КБ для моей карты). Применимо ли нечто подобное к размеру кадра стека?

6
задан codetwiddler 12 July 2012 в 20:15
поделиться