如何确定cudaErrorIllegalAddress是由于目标地址还是源地址?

时间:2019-03-28 19:06:45

标签: c++ error-handling cuda memory-corruption

documentation for cudaErrorIllegalAddress说:

  

设备在无效的内存地址上遇到了加载或存储指令。这会使进程处于不一致状态,并且任何进一步的CUDA工作都将返回相同的错误。要继续使用CUDA,必须终止该过程并重新启动。

在我的C ++代码中,我致电:

cudaMemcpy( dst, src, size, kind );

如何确定dstsrc无效的内存?


运行cuda-memcheck未报告错误,valgrind未报告错误。假设仅当使用-g -G构建此崩溃时,我才可以采取哪些步骤进行进一步调试?设备代码中是否可以检查cudaErrorIllegalAddress是否发生,因此我可以分治在设备代码中失败的地方?

1 个答案:

答案 0 :(得分:1)

答案都不是。根据{{​​3}},cudaMemcpy本身只会返回以下三种状态代码之一:

cudaSuccess, cudaErrorInvalidValue, cudaErrorInvalidMemcpyDirection

但是,文档还指出以下内容:

  

请注意,此函数还可能返回先前异步启动的错误代码。

其中可能是错误的根源,即先前的内核正在生成运行时错误,然后由阻塞API调用报告该错误。