如何调试 java(jcuda) 程序调用的内核

how to debug kernels called by a java(jcuda) program

有什么方法可以调试 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" 时,我无法访问它,它显示 "source not found"。我怎样才能将这些资源附加到我的项目中?

提前致谢

我能够调试 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