1
我怀疑我在运行的大型CUDA内核中有细粒度的内存错误。设备端printf在应该是确定性的变量上显示一些不同的值。我正在使用已删除的设备仿真模式的CUDA开发工具的“稳定”版本,其版本的cuda-gdb不适用于模板化函数。 Cuda-memcheck运行,但没有捕获任何东西。CUDA的细粒度内存检查器?
在CPU上,我会使用valgrind或电篱笆来捕捉像这样的内存错误。如果所有可用的都是printf,那么调试内存错误时有什么巧妙的技巧?
例如,有没有办法用nans洪泛整个内存空间,并使用printfs找到它们在我的计算中首次弹出的位置?
如果你在分配之间留有一些空白,这基本上是自己实施电子围栏库。一个缺点是,如果你真的分配了整个可用内存空间,那么你将自己限制为每个GPU一个cuda应用程序。 – 2011-05-17 13:33:44
现在我想到了,假设你正在做主机上的所有分配,几乎可以实现自由度;你只需要使用LD_PRELOAD攻击来捕获cudaMalloc和cudaFree。唯一缺少的是将填充区域标记为不可读/不可写的功能,以便在出现界限时自动对段进行分段。 – 2011-05-17 13:38:10
@Drew Wagner:如果你愿意的话,你可以少分配整个gou的内存。 CUDA-memcheck或运行时可以捕捉可能会压缩VRAM或其他应用程序空间的事物。我只是把它全部分配,因为我倾向于处理需要每个字节的大线性代数问题。 – talonmies 2011-05-17 13:46:45