0

有没有办法调试 java (jcuda) 调用的 cuda 函数?

我的程序启动此异常:

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”时,我无法访问它,它显示“找不到源”。我如何将这些资源附加到我的项目中?

提前致谢

4

1 回答 1

1

我能够调试我的 JCuda 可执行代码的最佳方法是将 printf 语句放在任何地方。完成后显然删除它们,但你必须从某个地方开始。

将以下内容添加到调用内核代码的 .java 代码中。

JCudaDriver.cuCtxSetLimit(CUlimit.CU_LIMIT_PRINTF_FIFO_SIZE, 4096);

然后在你的 CUDA 内核中,使用 printf(""); CUDA 内核代码中的语句以确定问题所在。如果我有一个猜测,那是因为你访问了一段你不应该访问的内存。

我还建议用 if(gtid == 0){printf("hello\n");} 包装 printf,否则您将让每个线程都尝试执行 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

于 2015-05-15T19:41:30.290 回答