-2

clang++-12在 CMake 中设置为 CUDA 编译器如下:

cmake .. -DCMAKE_BUILD_TYPE=Debug \
  -DCMAKE_CUDA_ARCHITECTURES="75" \
  -DCMAKE_CUDA_COMPILER=clang++-12 \
  -DCMAKE_CXX_COMPILER=clang++-12 -DCMAKE_C_COMPILER=clang-12

我尝试用它编译一个大型代码库,但基本上它对于.cu包含 CUB 的文件失败并使用一些纹理并出现以下错误:

clang: warning: Unknown CUDA version. cuda.h: CUDA_VERSION=11040. Assuming the latest supported version 10.1 [-Wunknown-cuda-version]
clang: warning: argument unused during compilation: '-G -Werror' [-Wunused-command-line-argument]
In file included from /scratch/src/libgpu/src/skelapp/skel_dummy.cu:2:
In file included from /scratch/src/libgpu/include/gg.cuh:5:
In file included from /scratch/src/libgpu/include/AppendOnlyList.cuh:6:
In file included from /usr/local/cuda-11.4/include/cub/cub.cuh:61:
In file included from /usr/local/cuda-11.4/include/cub/device/device_spmv.cuh:41:
In file included from /usr/local/cuda-11.4/include/cub/device/dispatch/dispatch_spmv_orig.cuh:42:
In file included from /usr/local/cuda-11.4/include/cub/device/dispatch/../../agent/agent_spmv_orig.cuh:47:
/usr/local/cuda-11.4/include/cub/device/dispatch/../../agent/../iterator/tex_ref_input_iterator.cuh:133:39: error: reference to __host__ variable 'ref' in __device__ function
                words[i] = tex1Dfetch(ref, (tex_offset * TEXTURE_MULTIPLE) + i);
                                      ^
In file included from <built-in>:1:
In file included from /usr/lib/llvm-12/lib/clang/12.0.1/include/__clang_cuda_runtime_wrapper.h:333:
/usr/local/cuda-11.4/include/texture_indirect_functions.h:111:4: error: use of undeclared identifier '__nv_tex_surf_handler'
   __nv_tex_surf_handler("__itex1Dfetch", ptr, obj, x);
   ^
/usr/local/cuda-11.4/include/texture_indirect_functions.h:120:3: note: in instantiation of function template specialization 'tex1Dfetch<int>' requested here
  tex1Dfetch(&ret, texObject, x);
  ^
/scratch/src/libgpu/include/worklist.cuh:393:12: note: in instantiation of function template specialization 'tex1Dfetch<int>' requested here
    item = tex1Dfetch<int>(tx, id);
           ^
2 errors generated when compiling for sm_75.
make[2]: *** [libgpu/CMakeFiles/some_gpu.dir/build.make:146: libgpu/CMakeFiles/some_gpu.dir/src/skelapp/skel_dummy.cu.o] Error 1

如何解决这个问题?我应该向 NVIDIA 或 LLVM 提交错误吗?

环境是带有 LLVM/Clang 12 和 CUDA Toolkit 11.4.1 的 Ubuntu 20.04。CUB 与 CUDA 工具包捆绑在一起。

4

1 回答 1

2

如何解决这个问题?我应该向 NVIDIA 或 LLVM 提交错误吗?

没有解决方法。现在 Clang 不支持纹理/表面查找,无论使用什么 CUDA 版本。已经有一个错误打开:https ://bugs.llvm.org/show_bug.cgi?id=26400

可以实现纹理支持,但到目前为止还没有特别需要证明这种努力的合理性。

于 2021-09-20T18:48:45.113 回答