如何调试错误代码 77:cudaErrorIllegal地址当 cuda-memcheck 没有发现问题时
How to debug error code 77: cudaErrorIllegalAddress when cuda-memcheck finds no issues?
我有一个复杂的 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
相关文章:
- 将数组的地址分配给变量并删除
- 空基优化子对象的地址
- 编译时未启用intel oneApi CUDA支持
- C++ 指针的内存地址和指向数组的内存地址如何相同?
- 在cuda线程之间共享大量常量数据
- 在C++中打印指向不同基元数据类型的指针的内存地址
- 为什么即使使用-cudart-static进行编译,库用户仍然需要链接到cuda运行时
- 如何在c++程序中找到函数的地址
- 向量元素的引用地址与它所指向的向量元素的地址不同.为什么
- 被解释为低级别const的const对象的地址
- Cuda C++:设备上的Malloc类,并用来自主机的数据填充它
- 将地址分配给本地指针后,公共对象的变量将消失
- 为什么我在leetcode上收到AddressSanitizer:地址0x602000000058上的堆缓冲区溢出错误
- CUDA:统一内存和指针地址的更改
- 如何调试错误代码 77:cudaErrorIllegal地址当 cuda-memcheck 没有发现问题时
- CUDA:结构体的共享数据成员和对该结构体的引用成员具有不同的地址和值
- CUDA 在推力device_vector调整大小时地址未对齐
- 如何使 cuda-memcheck 在出现泄漏检查错误时返回非零
- CUDA:全局内存访问地址
- CUDA 运行时错误:未指定的启动失败 & 超出范围的共享或本地地址