调试"Invalid address space"错误

Debugging an "Invalid address space" error

本文关键字:错误 space Invalid 调试 address      更新时间:2023-10-16

我已经构建了一些使用OpenACC的C 代码,并将其与PGI编译器一起编译,以在Tesla GPU上使用。

汇编成功而没有任何警告。

我运行程序并得到两个错误:

call to cuStreamSynchronize returned error 717: Invalid address space
call to cuMemFreeHost returned error 717: Invalid address space

除了建议启用统一的内存以使问题在地毯下自动扫荡外,互联网似乎对此并不了解。我不喜欢那种解决方案。

我该如何调试?

只有C 代码仅在CPU上运行,我会启动GDB,进行回溯,然后说"啊哈!"

,但是现在我已经有cpu 在两者之间流动的数据和数据。我什至不知道要使用哪些工具。

一个后备是开始评论线条直到问题消失,但这似乎也次优。

您可以使用" cuda-gdb"调试设备代码或使用" cuda-memcheck"来检查内存错误。

尽管我不确定在这里是否有帮助。该错误表明设备代码使用错误的内存空间中的地址发布指令。例如,使用共享内存指针与期望全局内存指针的指令。

我没有在此之前看到此错误,也没有看到任何以前的错误报告,因此只能对原因进行理论化。一种可能性是,如果您有一个共享内存变量("私有"子句或"缓存"指令中的标量或数组),将从外帮循环传递到向量例程。在这种情况下,矢量例程可以访问变量,就像它在全局内存中一样。

最有可能是什么原因,这都是编译器错误。如果可能的话,请发布或发送到PGI客户服务(trs@pgroup.com)一个复制的示例,我将其交给我们的编译器工程师进行调查。

一旦我更好地理解原因,我也可以尝试为您带来工作。尽管与此同时,您可以尝试使用" -ta = tesla:nollvm,keepgpu"进行编译。" NOLLVM"将导致编译器生成OpenACC内核的中间CUDA C版本,而不是默认的LLVM设备代码生成器。" keepgpu"将保留中介" .gpu"您可以检查的文件。

有一些有用的环境变量有助于调试。任何组合都可以启用:

export PGI_ACC_TIME=1   #Profile time usage
export PGI_ACC_NOTIFY=1 #Set to values 0-3 where 3 is the most detailed
export PGI_ACC_DEBUG=1  #Extra debugging info