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

时间:2015-04-17 14:56:19

标签: java debugging cuda jcuda

有没有办法调试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"我无法访问它,它说"来源未找到"。我如何将资源附加到我的项目中?

提前致谢

1 个答案:

答案 0 :(得分:0)

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