Как определить, связан ли cudaErrorIllegalAddress с адресом назначения или адресом источника? - PullRequest
0 голосов
/ 28 марта 2019

Документация для cudaErrorIllegalAddress говорит:

Устройство обнаружило инструкцию загрузки или сохранения по недействительному адресу памяти. Это оставляет процесс в несовместимом состоянии, и любая дальнейшая работа CUDA будет возвращать ту же ошибку. Чтобы продолжить использование CUDA, процесс должен быть остановлен и перезапущен.

В моем коде C ++ я позвонил:

cudaMemcpy( dst, src, size, kind );

Как определить, является ли dst или src недействительной памятью?


Запуск cuda-memcheck не сообщил об ошибках и valgrind не сообщил об ошибках. Учитывая, что этот сбой происходит только при сборке с -g -G, какие шаги я могу предпринять для дальнейшей отладки? Есть ли способ в коде устройства проверить, произошел ли cudaErrorIllegalAddress, чтобы я мог разделить и завоевать, где в коде устройства он не работает?

1 Ответ

1 голос
/ 29 марта 2019

Ответ - нет.Согласно документации , cudaMemcpy вернет только один из трех кодов состояния:

cudaSuccess, cudaErrorInvalidValue, cudaErrorInvalidMemcpyDirection

Однако в документации также отмечается следующее:

Обратите внимание, что эта функция также может возвращать коды ошибок из предыдущих асинхронных запусков.

И в этом заключается вероятный источник ошибки, т.е. предыдущее ядро ​​генерирует ошибку времени выполнения, о которой затем сообщаетвызов API блокировки.

...