在CUDA工具包中包含的Thrust库中找不到thrust/universal_vector.h

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

我目前正在使用 Thrust 在 GPU 和 CPU 之间传输数据。但是当我在代码中包含

<thrust/universal_vector.h>
并使用 CMake 配置项目时,弹出“致命错误:没有这样的文件或目录”。

安装 CUDA 和 CUDA Toolkit 后我不需要安装 Thrust,正如 Nvidia 所说:

安装 CUDA Toolkit 会将 Thrust 头文件复制到标准 CUDA include 您系统的目录。由于Thrust是头文件的模板库,所以不再赘述 需要安装才能开始使用 Thrust。

  1. 我检查了我计算机上

    thrust
    目录中CUDA工具包安装中包含的
    include
    目录,我没有找到官方Thrust GitHub存储库中存在的几个文件,例如
    universal_allocator.h
    universal_ptr.h
    universal_vector.h

  2. 这是我的

    CMakeLists.txt

    cmake_minimum_required(VERSION 3.10)
    
    set(CMAKE_CXX_STANDARD 17)
    set(CMAKE_BUILD_TYPE Release)
    
    project(hellocuda LANGUAGES CXX CUDA)
    
    add_executable(main main.cu)
    target_include_directories(main PUBLIC ../../include)
    target_compile_options(main PUBLIC $<$<COMPILE_LANGUAGE:CUDA>:--extended-lambda>)
    target_compile_options(main PUBLIC $<$<COMPILE_LANGUAGE:CUDA>:--expt-relaxed-constexpr>)
    
  3. 我不能只下载 Thrust 存储库并包含在

    CMakeLists.txt
    中,因为我缺少其他依赖项。只需将文件
    universal_allocator.h
    universal_ptr.h
    universal_vector.h
    复制到 CUDA 目录中包含的 Thrust 目录也不起作用,但会出现很多错误。

  4. 我还用

    nvcc --version
    检查我的 CUDA 版本:

    nvcc: NVIDIA (R) Cuda compiler driver
    Copyright (c) 2005-2020 NVIDIA Corporation
    Built on Mon_Oct_12_20:09:46_PDT_2020
    Cuda compilation tools, release 11.1, V11.1.105
    Build cuda_11.1.TC455_06.29190527_0
    

我实际上使用CMake成功运行了一些CUDA代码,所以我认为CUDA版本应该没有错误。

cuda thrust
1个回答
0
投票

正如 talonmies 的评论中所指出的,

universal_
API 是 Thrust 相对较新的新增内容。它们附带 Thrust v1.12,包含在 CUDA Toolkit v11.4 和 Nvidia HPC SDK v21.3 中。

但是,您仍然可以从 GitHub 获取整个 Thrust,以便将较新版本的 Thrust 与较旧版本的 CUDA 结合使用。请参阅获取推力源代码(重点是我的):

CUDA 工具包提供了最新版本的 Thrust 源代码 在

include/thrust
。这适合大多数用户。

希望为 Thrust 做出贡献或尝试新功能的用户 应该递归克隆 Thrust Github 存储库:

git clone --recursive https://github.com/NVIDIA/thrust.git

Thrust 的最新版本不在存档的 Thrust 存储库中,而是在较新的 CCCL 存储库中,其中包含自己的入门 - 用户(重点是我的):

GitHub

想要保持 CCCL 开发前沿的用户是 鼓励使用 GitHub 上的 CCCL。 使用较新版本的 CCCL 支持旧版本的 CUDA 工具包,但不支持其他版本 绕路。有关 CCCL 和 CCCL 之间兼容性的完整信息 CUDA 工具包,请参阅我们的平台支持

CCCL 中的所有内容都只是标头,因此克隆并将其包含在 简单的项目如下所示:

git clone https://github.com/NVIDIA/cccl.git
nvcc -Icccl/thrust -Icccl/libcudacxx/include -Icccl/cub main.cu -o main

注意 使用

-I
而不是
-isystem
以避免与 CUDA 工具包中的
nvcc
隐式包含的 CCCL 标头发生冲突。全部CCCL 标题使用
#pragma system_header
来确保警告仍然存在 就像使用
-isystem
一样静音,参见 #527 了解更多信息。

两个引用的 README 文件还包含有关 CMake 使用的更多信息。

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