如何调试 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。
编辑:
我想补充一点,JCuda 网站上已经添加了一个调试部分。它建议使用名为 "cuda-memcheck" 的工具来帮助调试 CUDA 应用程序。
有什么方法可以调试 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。
编辑:
我想补充一点,JCuda 网站上已经添加了一个调试部分。它建议使用名为 "cuda-memcheck" 的工具来帮助调试 CUDA 应用程序。