调试"Invalid address space"错误
Debugging an "Invalid address space" error
我已经构建了一些使用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
- 警告处理为错误这里有什么问题
- "error: no matching function for call to"构造函数错误
- boost::进程间消息队列引发错误
- C++,OpenCV,尝试显示图像时"OpenCV(4.3.0) Error: Assertion failed (size.width>0 && size.height>0)"此错误
- 有关插入适配器的错误。[错误]请求从 'back_insert_iterator<vector<>>' 类型转换为非标量类型
- QT在错误的班级中寻找空位
- vector.resize()中的分配错误
- 代码在main()中运行,但在函数中出现错误
- 释放错误后堆使用
- (C++)分析树以计算返回错误值的简单算术表达式
- Project Euler问题4的错误解决方案
- 我的字符计数代码计算错误.为什么
- 从"int*"强制转换为"unsigned int"会丢失精度错误
- 尝试导入pybind-opencv模块时出现libgtk错误
- CMake项目Boost库错误:Boost/config/compiler/gcc.hpp:165:10:致命错误:cs
- 在某些循环内使用vector.push_back时出现分段错误
- 从 MSVC14 切换到 MSVC16 会导致"compiler is out of heap space (C1060)"错误
- 在析构函数中调用"delete"运算符时"compiler is out of heap space"编译器错误
- boost :: filesystem :: space()报告错误的磁盘空间
- 调试"Invalid address space"错误