Как отлаживать ядра, вызываемые программой Java(jcuda)

Есть ли способ отладки функций cuda, вызываемых java (jcuda)?

Моя программа запускает это исключение:

Exception in thread "main" jcuda.CudaException:CUDA_ERROR_ILLEGAL_ADDRESS
at jcuda.driver.JCudaDriver.checkResult(JCudaDriver.java:288)
at jcuda.driver.JCudaDriver.cuCtxSynchronize(JCudaDriver.java:1852)
at CalculateurGPU.updateAndCompute(rGPUcalculator.java:129)
at Test.main(Test.java:90)

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

Другой вопрос: когда я нажимаю "JCudaDriver.java:288", у меня нет доступа к нему, он говорит "источник не найден". Как я могу прикрепить эти источники к моему проекту?

заранее спасибо

1 ответ

Решение

Лучший способ отладить мой исполняемый код JCuda - это везде помещать операторы printf. Очевидно, удалите их после того, как вы закончите, но вы должны начать где-нибудь.

Добавьте следующее в ваш код.java, который вызывает код вашего ядра.

JCudaDriver.cuCtxSetLimit (CUlimit.CU_LIMIT_PRINTF_FIFO_SIZE, 4096);

Затем внутри вашего ядра CUDA используйте printf(""); операторы в вашем коде ядра CUDA, чтобы определить, где существует проблема. Если бы у меня было предположение, это было бы из-за того, что вы получили доступ к части памяти, которой вы не должны быть.

Я бы также предложил обернуть printf с помощью if(gtid == 0){printf("hello\n");} в противном случае каждый поток будет пытаться выполнить printf.

Источник: http://forum.byte-welt.net/byte-welt-projekte-projects/swogl-jcuda-jocl/jcuda/3255-gpu-printf-compute-capility-2-0-a.html

РЕДАКТИРОВАТЬ:

Я хотел бы добавить, что на сайте JCuda был добавлен раздел отладки. Он предлагает использовать инструмент под названием "cuda-memcheck", чтобы помочь в отладке ваших приложений CUDA.

http://www.jcuda.org/debugging/Debugging.html

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