如何调试错误代码 77:cudaErrorIllegal地址当 cuda-memcheck 没有发现问题时

How to debug error code 77: cudaErrorIllegalAddress when cuda-memcheck finds no issues?

本文关键字:cuda-memcheck 地址 发现问题 cudaErrorIllegal 何调试 调试 错误代码      更新时间:2023-10-16

我有一个复杂的 Cuda C++应用程序,在我构建 cuda 代码-g -G之前运行良好。 构建调试时,它会崩溃并带有cudaErrorIllegalAddress,所以我运行了cuda-memcheck,但这没有发现任何问题。 我也运行了valgrind,它没有发现任何问题。

cuda-memcheck找不到任何东西时,有哪些策略可以找出 Cuda 代码中非法内存读取或写入发生的位置? 有没有办法用cuda-gdb来访问具有无效内存访问的代码行?

我在 cuda-gdb 下运行我的应用程序,调试器在无效的内存访问处得到一个断点:

CUDA Exception: Warp Illegal Address
The exception was triggered at PC 0x50225260 (gpu_core.h:275)
Thread 1 "preprocess" received signal CUDA_EXCEPTION_14, Warp Illegal Address.
[Switching focus to CUDA kernel 0, grid 617, block (0,0,0), thread (0,0,0), device 0, sm 0, warp 2, lane 0]
0x0000000050225270 in thrust::cuda_cub::cub::BlockRadixSort<int, 256, 19, int, 6, true, (thrust::cuda_cub::cub::BlockScanAlgorithm)2, (cudaSharedMemConfig)1, 1, 1, 700>::BlockRadixSort (this=0x0, this=0x0, temp_storage=0xffffb17cffff159c, keys=0x1300001d1300001d, values=0x1300001d1300001d, begin_bit=<optimized out>, end_bit=<optimized out>, is_descending=..., is_keys_only=..., num_items=<optimized out>) at /home/user/git/infra/libgpu/src/gpu_core.h:275