【发布时间】:2011-06-25 12:03:32
【问题描述】:
cuda-memcheck 正在报告发布模式 CUDA 内核的此信息:
========= Error: process didn't terminate successfully
========= Invalid __global__ read of size 4
========= at 0x000002c8 in xx_kernel
========= by thread (0,0,0) in block (0,0)
========= Address 0x10101600014 is out of bounds
=========
========= ERROR SUMMARY: 1 error
此故障仅在释放模式下发生。在 cuda-gdb 下运行时也不会发生这种情况。
如何获取 0x000002c8 地址并确定导致故障的代码?我查看了缓存的中间文件(.ptx、.cubin 等),没有发现明显的方法可以确定错误的源代码。
这是在带有 CUDA 3.2 的 x86_64 Linux 上。
更新:原来这是 3.2 中的编译器错误。升级到 4.0 会使 memcheck 错误消失。另外,我可以从 4.0 开始使用 cuobjdump 对 CUBIN 进行反汇编,但由于它是发布模式并经过优化,因此很难将反汇编与源代码匹配。
【问题讨论】:
-
你能把你的内核代码贴出来,让我们看看为什么这个线程会访问一个越界区域吗?
-
不幸的是它的专有源代码,所以我不能发布实际代码。谢谢。