使用cuda12编译时报错block_merge_sort.cuh(169): error: expected a “,“ or “>“

部署运行你感兴趣的模型镜像

模型的工程化版C++程序使用CUDA11.3和11.6编译时没任何错误,为适应高版本的jetpack环境,切换到CUDA12编译时总是报错:

/workspace/cuda-12.0/bin/nvcc /workspace/focc/iou3d_nms.cu -c -o ./build/CMakeFiles/bev.dir/src/./bev_generated_iou3d_nms.cu.o -m64 -D__HAVE_NVJPEG__ -Xcompiler ,\"-std=c++14\",\"-O0\",\"-g\",\"-Wno-deprecated-declarations\",\"-DENABLE_TEXT_BACKEND_STB\" -gencode arch=compute_86,code=compute_86 -ccbin /usr/bin/g++ -std=c++14 -O0 -g -Wno-deprecated-declarations -DENABLE_TEXT_BACKEND_STB -DNVCC -I/workspace/cuda-12.0/include -I/workspace/TensorRT-8.6.1.6/include -I/workspace/focc/include -I/usr/include/eigen3
/workspace/cuda-12.0/include/cub/agent/../block/block_merge_sort.cuh(169): error: expected a "," or ">"
1 error detected in the compilation of "/workspace/focc/src/iou3d_nms.cu".
/opt/conda/bin/cmake -E rm -f /workspace/focc/build/CMakeFiles/bev.dir/src/./bev_generated_iou3d_nms.cu.o
CMake Error at bev_generated_iou3d_nms.cu.o.DEBUG.cmake:281 (message):
  Error generating file
  /workspace/focc/build/CMakeFiles/bev.dir/src/./bev_generated_iou3d_nms.cu.o

感觉这肯定是和cuda版本变化有关cuda12新增的代码里可能有什么不兼容的地方,于是查看报错的cuda-12.0/include/cub/agent/../block/block_merge_sort.cuh发现报错的地方有这样的类模板定义:

template <typename KeyT,
          typename ValueT,
          int NUM_THREADS,
          int ITEMS_PER_THREAD,
          typename SynchronizationPolicy>
class BlockMergeSortStrategy
{
  static_assert(PowerOfTwo<NUM_THREADS>::VALUE,
                "NUM_THREADS must be a power of two");

...

169行是int NUM_THREADS,  NUM_THREADS是个int类型的宏值,不可能是空值,怎么可能会导致error: expected a "," or ">" 这样的和语法格式有关的低级错误呢?开始有点束手无策,后来突然想到是不是NUM_THREADS有多个地方定义冲突了,导致编译时替换模板参数为具体的值时对不上而造成语法格式错误,但定义冲突不可能出现在cuda这样的成熟工具软件的内部,那么肯定是在我们自己的程序里了,查查我们自己的代码,果然也有NUM_THREADS的宏定义,把其名字和相关使用的地方都改名,然后再编译错误就消失了。感觉NVIDIA在定义宏时也有点随便了,他们的宏定义起码应该都加上 _NV_ 才是啊,这样避免和应用程序冲突。

您可能感兴趣的与本文相关的镜像

PyTorch 2.8

PyTorch 2.8

PyTorch
Cuda

PyTorch 是一个开源的 Python 机器学习库,基于 Torch 库,底层由 C++ 实现,应用于人工智能领域,如计算机视觉和自然语言处理

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Arnold-FY-Chen

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值