我正在开发一个使用多个设备上下文的程序,每个上下文都在单独的流中处理(通常是同步的)。问题是,只有在cuda-memcheck --tool initcheck
下运行时才会产生正确的结果。我的问题是:
initcheck
下运行程序如何修改它的执行?
由于复杂程度,我无法共享任何代码或产生MCVE,所以请一般地对待这个问题。已经使用nvidia提供的所有调试工具检查了该程序,并且没有产生任何错误。
答案 0 :(得分:1)
来自http://docs.nvidia.com/cuda/cuda-memcheck/#what-is-initcheck:
initcheck工具是运行时未初始化设备全局内存 接入探测器。此工具可以识别设备全局内存的时间 在没有通过设备端写入或通过设备端初始化的情况下访问 cudaMemcpy / cudaMemset。
目前,此工具仅支持检测对设备全局的访问 记忆。 [...] 注意:initcheck工具不执行任何内存访问错误检查。
如果你实际上没有检测到任何错误,但是当工具关闭时获得不同的结果,我的第一个怀疑是一些并发错误(read-after-write等...)。像上面这样的工具通常会减慢程序的某些部分,这可能会影响这类问题。
这只是一个猜测......