我有一个为 RTX2060 编写的 CUDA C/C++ 应用程序,现在正在调试。我采取的第一步是使用 compute-sanitizer 运行可执行文件,发现有一些错误...
我有一个为 RTX2060 编写的 CUDA C/C++ 应用程序,现在正在调试。我采取的第一步是使用 运行可执行文件 compute-sanitizer
,发现发生了一些越界访问。本质上,这是一个与此线程中发生的问题非常类似的问题: Memcpy 上的未指定启动失败 。它看起来像这样:
Starting iteration 0
Evolving fluid interior and boundary
========= Invalid __global__ read of size 4 bytes
========= at FluidAdvance(float *, float *, float *, float *, float *, float *, float *, float *, const float *, const float *, const float *, const float *, const float *, const float *, const float *, const float *, float *, float *, float *, float *, float *, float *, float *, float *, float, float, float, float, float, int, int, int)+0xfc50
========= by thread (0,2,0) in block (0,0,0)
========= Address 0x74fafcffc110 is out of bounds
========= and is 16,112 bytes before the nearest allocation at 0x74fafd000000 of size 1,048,576 bytes
========= Saved host backtrace up to driver entry point at kernel launch time
利用我对 CMake 的新手理解,我有一个正常运行的构建系统,为了确定越界访问发生的位置,我添加了以下行 CMakeLists.txt
:
target_compile_options(imhd-debug PRIVATE $<$<COMPILE_LANGUAGE:CUDA>:
-v
-g
-lineinfo
>)
但是,当我重建项目并运行的时候 compute-sanitizer
,我没有发现输出中添加了任何信息来指示源中发生错误的行。
这是为什么?我需要做什么才能解决这个问题?感谢您的帮助。
编辑:问题解决了! imhd-debug
代表了主可执行文件,但发生越界访问的函数定义在另一个库中,我需要添加一个 target_compile_options( ... -lineinfo)
for。完成此操作后,我找到了所需的行信息!:)