documentation for cudaErrorIllegalAddress说:
设备在无效的内存地址上遇到了加载或存储指令。这会使进程处于不一致状态,并且任何进一步的CUDA工作都将返回相同的错误。要继续使用CUDA,必须终止该过程并重新启动。
在我的C ++代码中,我致电:
cudaMemcpy( dst, src, size, kind );
如何确定dst
或src
无效的内存?
运行cuda-memcheck
未报告错误,valgrind
未报告错误。假设仅当使用-g -G
构建此崩溃时,我才可以采取哪些步骤进行进一步调试?设备代码中是否可以检查cudaErrorIllegalAddress是否发生,因此我可以分治在设备代码中失败的地方?
答案 0 :(得分:1)
答案都不是。根据{{3}},cudaMemcpy
本身只会返回以下三种状态代码之一:
cudaSuccess, cudaErrorInvalidValue, cudaErrorInvalidMemcpyDirection
但是,文档还指出以下内容:
请注意,此函数还可能返回先前异步启动的错误代码。
其中可能是错误的根源,即先前的内核正在生成运行时错误,然后由阻塞API调用报告该错误。