Программа отладки CUDA Lane User Stack Overflow - PullRequest
0 голосов
/ 02 августа 2011

Я использую Totalview, чтобы попытаться отладить ядро ​​CUDA.Я выбрал опцию отладки ошибок памяти в CUDA и остановки ошибок памяти на хосте.

Я получаю остановку в одном из ядер на этой строке:

d_test_filt[i*cols+j] = cuCmulf(cuCmulf(d_usKernel[i*cols + j],d_convolver[i*cols + j]),d_rr[i*cols + j]) ;

ошибка в строке говорит: «Переполнение стека пользователя Lane»

Что именно означает эта ошибка?Как мне решить проблему?

В этом случае все эти массивы d_ были выделены на устройстве.i * cols + j намного меньше размера массивов (1024 x 1024), где i и j равны 311 и 808 соответственно

Ответы [ 2 ]

3 голосов
/ 02 августа 2011

В руководстве CUDA-gdb написано:

CUDA_EXCEPTION_2: «Переполнение стека пользователем Lane»

Это происходит, когда поток превышает ограничение памяти стека.

Для объяснения того, что такое дорожка в руководстве CUDA-gdb, говорится:

Поток устройства принадлежит блоку, который, в свою очередь, принадлежит ядру.Поток, блок и ядро ​​- это программные координаты фокуса.Поток устройства работает на дорожке.Линия принадлежит деформации, которая принадлежит SM, который, в свою очередь, принадлежит устройству.Линия, деформация, SM и устройство являются аппаратными координатами фокуса.Координаты программного и аппаратного обеспечения могут использоваться взаимозаменяемо и одновременно, пока они остаются связными.

В руководстве CUDA-gdb содержится дополнительная информация о получении информации из дорожек среди других.Для этой ошибки вы превысили максимальный предел памяти стека, как сказал AJG85.

1 голос
/ 02 августа 2011

A переполнение стека может быть вызвано многими факторами.Обычно это означает только то, что сказано.Объем стека вызовов ограничен, и вы превысили его.Несколько распространенных ошибок, которые могут вызвать это, - глубокая рекурсия и бесконечные циклы, когда у вас столько вызовов в стеке, что вы превышаете доступную память.

Это отличается от вне диапазона или за пределами исключение, когда вы пытаетесь получить доступ к памяти сверх того, что было выделено и доступно для объекта, что может быть вызвано индексацией за концом массива, как вы описали в вопросе.Дело не в этом.

Я понятия не имею, что такое Пользователь Lane , но я подозреваю, что это терминология, связанная с CUDA, которую вы, вероятно, можете найти где-нибудь на сайте nvidia.Вам нужно будет показать больше окружающего кода для лучшего ответа, поскольку того, что вы показали, недостаточно для определения причины этой ошибки.

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