使用 clang++ 和 CMake 构建简单的 CUDA 程序

问题描述 投票:0回答:1

我正在尝试使用

.cu
而不是
clang++
编译一个简单的
nvcc
文件,尽管 LLVM 文档 提供了基本说明,但我一直在努力应对各种 CMake 规范,即我是否需要指定
CMAKE_CUDA_COMPILER
CUDA_IMPLICIT_LINK_DIRECTORIES
等。目前我无法构建或编译
.cu
文件。

我尝试过各种 CMake 规范,但这似乎是在黑暗中进行的尝试,而且确实是一个猜谜游戏。

cmake cuda clang clang++
1个回答
0
投票

这实际上非常简单 - 使用最新版本的 CMake 和 clang。考虑单个

.cu
文件可执行文件(例如 NVIDIA 的 vectorAdd 示例,假设您已将所有相关包含文件放置在与
vectorAdd.cu
相同的目录中)。这个 CMakeLists 文件有效:

cmake_minimum_required(VERSION 3.27)
project(vector_addition_with_clang CUDA)

add_executable(vectorAdd vectorAdd.cu)
set_target_properties(vectorAdd PROPERTIES CUDA_ARCHITECTURES native)

现在,使用以下命令进行配置:

cmake \
    -B /path/to/build/dir \
    -DCMAKE_CUDA_HOST_COMPILER=/path/to/clang++ \
    -DCMAKE_CUDA_COMPILER=/path/to/clang++

这适用于 CMake 3.27 和 clang 16。


旧版本的 CMake

如果你使用3.24之前的CMake版本,你不能说

native
,你必须使用一个具体的值,或者使用一些自动检测CMake voodoo,如这里所解释的。即使旧版本的 CMake 也可能会出现其他问题。 3.8是最早支持CUDA作为“一等公民”语言的,所以绝对不是在那之前。我猜 3.18 或更高版本应该是安全的

旧版本的 clang

clang 14 会因某种原因失败 - 不确定为什么 - 即使使用较新的 CMake。我得到:

CMake Error at /path/to/share/cmake-3.27/Modules/CMakeDetermineCUDACompiler.cmake:603 (message):
  Failed to detect a default CUDA architecture.

  Compiler output:

Call Stack (most recent call first):
  CMakeLists.txt:2 (project)

不知道为什么。还没有尝试过 clang 15 - 我们鼓励读者尝试并发表评论。

© www.soinside.com 2019 - 2024. All rights reserved.