
科学计算【免费下载链接】thrust[ARCHIVED] The C parallel algorithms library. See https://github.com/NVIDIA/cccl项目地址https://gitcode.com/gh_mirrors/th/thrust点击查看免费下载Thrust 是 NVIDIA 出品的 C 并行算法库其模板化算法thrust::transform、thrust::sort、thrust::reduce等可在 CUDA、OpenMP、TBB 与串行 CPP 等多种后端上运行。本文以仓库中官方文档 requirements.md 为骨架系统梳理使用与构建 Thrust 所必需的软件环境——系统软件、C 标准、编译器、设备与宿主架构、操作系统及构建工具——并结合thrust/detail/config下的源码说明各项要求的底层检测与告警机制。读完本文你将能对照清单核验自己的开发环境是否满足要求理解弃用警告的来源与关闭方式并据此搭出一套可编译、可测试的 Thrust 开发环境。说明当前仓库为 Thrust 的归档镜像项目开发已整体迁移至 NVIDIA 的 cccl 仓库。以下要求均针对本项目仓库main分支的代码形态具体某个发布版本的详细变更请以 CHANGELOG.md 为准。适用范围与版本基线官方 requirements.md 开篇明确所有要求均针对 GitHub 上main分支的最新代码。这意味着本文列举的编译器版本下限、C 标准支持范围等代表的是当前开发主线即本仓库的状态而不是某个历史 release 标签的状态。关于不同发布版本的具体差异文档要求读者查阅 CHANGELOG.md。从该文件可以还原出环境要求随版本演进的完整脉络Thrust 1.10.0起CHANGELOG.md正式移除 C03 支持不再支持 GCC 5、Clang 6、MSVC 2017并宣布 C11 进入弃用流程Thrust 1.12.0起CHANGELOG.md进一步弃用 Clang 7.0 与 MSVC 2019即 19.20/16.0/14.20这与本文档编译器一节的现行门槛完全一致。此外Thrust 拥有独立于 CUDA Toolkit 与 NVHPC 的版本体系其版本号编码方式MMM.mmm.ss-ppp以及thrust/version.h中的THRUST_VERSION、THRUST_MAJOR_VERSION等宏可参考 版本化说明。本仓库 version.h 当前定义THRUST_VERSION 200200即 2.2.0 版本。使用环境要求Usage Requirements要使用 Thrust含随附的 CUB必须逐项满足以下四类要求系统软件、C 标准、编译器、设备/宿主架构与操作系统。系统软件NVHPC 或 CUDA ToolkitThrust 与 CUB 要求安装以下二者之一软件说明NVIDIA HPC SDKNVHPCNVIDIA 面向高性能计算的一体化编译器套件自带 NVC 编译器与 CUDA 支持CUDA Toolkit标准 CUDA 开发工具包内含 NVCC 编译器、运行时库与头文件官方测试策略有两点值得注意Thrust 与 CUB 的发布版本只针对最新版本的 NVHPC 与 CUDA 进行过测试——即本仓库main分支的状态只保证与当时最新的工具链组合协同工作非官方支持的组合虽然可以通过从 GitHub 获取较新的 Thrust/CUB 发布版本来搭配较旧的 NVHPC 或 CUDA 使用但文档明确警告这种组合not officially supported请自行承担风险。对国内用户来说常规做法是直接安装与目标 Thrust 版本配套的 CUDA Toolkit例如本仓库 2.2.0 对应的近期 CUDA 版本并在编译时让 NVCC 找到thrust/头文件目录。C 标准支持范围Thrust 与 CUB 当前支持的 C 方言为C11已弃用deprecatedC14C17其中 C14 是官方默认与推荐的标准CMake 中THRUST_CPP_DIALECT默认值为14见 CMake 选项文档C11 虽仍可编译但会产生弃用警告且官方已宣布将在未来版本移除CHANGELOG.md。底层原理方言的自动检测Thrust 并不依赖 CMake 单独判定标准版本而是在头文件 thrust/detail/config/cpp_dialect.h 中于编译期自动检测当前方言优先使用THRUST_CPP_DIALECT宏覆盖内置检测对 MSVC 特殊处理由于 MSVC 的__cplusplus值不可靠转而使用_MSVC_LANG并将 MSVC 2015THRUST_MSVC_VERSION 1910报告的 C14 强制修正为 C11因其缺少扩展 constexpr 支持见 cpp_dialect.h其余编译器按__cplusplus值映射 201103L→ C03201103L→ C11201402L→ C14201703L→ C17更大的值记为 2020cpp_dialect.h。编译器要求配合 NVCC 使用与 NVCC 配合使用时Thrust 与 CUB 支持以下宿主编译器编译器支持版本备注NVCC最新版本NVIDIA CUDA 编译器NVC最新版本NVIDIA HPC SDK 自带编译器GCC5Linux 下的主流宿主编译器Clang7含 AppleClang 等衍生版本MSVC201919.20/16.0/14.20Windows 下的宿主编译器配合 NVCC 使用的含义是NVCC 负责设备端CUDA代码的编译而宿主编译器GCC/Clang/MSVC/NVC负责处理 NVCC 预处理后的宿主端代码因此宿主编译器的版本门槛同样约束着 Thrust 能否正常使用。底层原理编译器版本检测与弃用告警上述版本门槛并非仅停留在文档层面而是在编译期被强制执行。在 thrust/detail/config/compiler.h 中Thrust 通过__GNUC__、__clang_major__、_MSC_VER等宏计算各编译器的归一化版本号THRUST_GCC_VERSION__GNUC__ * 10000 __GNUC_MINOR__ * 100 __GNUC_PATCHLEVEL__compiler.h因此 GCC 5.0 对应数值50000THRUST_CLANG_VERSION同理按major*10000 minor*100 patch计算compiler.hClang 7.0 对应70000THRUST_MSVC_VERSION直接取_MSC_VERMSVC 2019 的 19.20 对应数值1920。随后 cpp_dialect.h 在未定义THRUST_IGNORE_DEPRECATED_COMPILER的前提下执行硬性检查#ifndef THRUST_IGNORE_DEPRECATED_COMPILER # if THRUST_HOST_COMPILER THRUST_HOST_COMPILER_GCC THRUST_GCC_VERSION 50000 THRUST_COMPILER_DEPRECATION(GCC 5.0); # elif THRUST_HOST_COMPILER THRUST_HOST_COMPILER_CLANG THRUST_CLANG_VERSION 70000 THRUST_COMPILER_DEPRECATION(Clang 7.0); # elif THRUST_HOST_COMPILER THRUST_HOST_COMPILER_MSVC THRUST_MSVC_VERSION 1910 THRUST_COMPILER_DEPRECATION(MSVC 2019 (19.20/16.0/14.20)); # elif THRUST_HOST_COMPILER THRUST_HOST_COMPILER_MSVC THRUST_MSVC_VERSION 1920 THRUST_COMPILER_DEPRECATION_SOFT(MSVC 2019 (19.20/16.0/14.20), MSVC 2017); # endif #endif可以看到对 GCC 5、Clang 7、MSVC 2017 属于硬弃用提示Thrust requires at least ...而对 MSVC 20171910 _MSC_VER 1920则是软弃用提示仍受支持但将在未来版本移除。告警消息本身通过#pragma messageMSVC或#pragma GCC warningGCC/Clang机制输出cpp_dialect.h并附上Define THRUST_IGNORE_DEPRECATED_CPP_DIALECT to suppress this message的提示。关闭弃用警告THRUST_IGNORE_DEPRECATED_COMPILER文档明确指出遇到不支持的编译器版本产生的弃用警告时可在编译期间定义宏THRUST_IGNORE_DEPRECATED_COMPILER来消除。源码给出了更细粒度的控制手段cpp_dialect.h宏作用THRUST_IGNORE_DEPRECATED_COMPILER仅忽略旧编译器产生的弃用警告C03/C11 的警告不受影响THRUST_IGNORE_DEPRECATED_CPP_11仅忽略 C11 方言的弃用警告THRUST_IGNORE_DEPRECATED_CPP_DIALECT一次性忽略所有弃用方言与过时编译器的警告且三者可以组合使用定义THRUST_IGNORE_DEPRECATED_CPP_DIALECT会自动展开为后两者cpp_dialect.h。为兼容 CUB源码还会把CUB_IGNORE_DEPRECATED_*系列宏自动映射为对应的THRUST_IGNORE_DEPRECATED_*宏cpp_dialect.h。在 CMake 集成场景中这一宏也可以通过构建配置传递thrust_create_target会依据配置将THRUST_IGNORE_DEPRECATED_COMPILER作为INTERFACE编译定义附加到生成的 target 上thrust-config.cmake从而让依赖该 target 的所有下游编译单元自动获得宏定义。需要提醒的是关闭警告只是短期缓解手段文档与 CHANGELOG.md 均如此说明这些平台最终会被移除支持长期方案仍是升级工具链。设备架构SM 35 及以上Thrust 与 CUB 支持自 SM 35 起的所有 NVIDIA 设备架构包含 Maxwell、Pascal、Volta、Turing、Ampere、Hopper 等各代直至当时的最新架构。这一下限同样有源码佐证CUB 曾移除针对 SM 35 以下不支持硬件的调优策略CHANGELOG.md。在 CMake 构建中可通过THRUST_ENABLE_COMPUTE_XX系列选项精确控制目标架构合法取值包括35, 37, 50, 52, 53, 60, 61, 62, 70, 72, 75, 80等见 CMake 选项文档默认情况下所有架构均启用如需收紧可设置THRUST_DISABLE_ARCH_BY_DEFAULTON。宿主架构与操作系统Thrust 与 CUB 官方支持的宿主CPU架构与操作系统如下类别支持范围宿主架构aarch64、x86-64、ppc64le宿主操作系统Linux、Windows也就是说在 x86-64 与 aarch64如 NVIDIA Jetson、ARM 服务器以及 ppc64leIBM POWER上的 Linux/Windows 环境中Thrust 均属于受支持平台。macOS 不在官方支持列表内如需使用请自行评估风险。构建与测试要求CMake在上述使用要求全部满足的基础上若要自行构建并测试Thrust 与 CUB官方文档额外要求的工具只有一个CMake。结合仓库 CMakeLists.txt 可以进一步明确版本细节顶层声明cmake_minimum_required(VERSION 3.15)注释说明3.15是作为add_subdirectory方式被引入其他项目时的最低版本3.17用于独立构建本项目的测试/示例3.18.3用于 C17 CUDA 组合CMakeLists.txt未显式指定CMAKE_BUILD_TYPE时默认使用RelWithDebInfo可选项为Debug、Release、RelWithDebInfo、MinSizeRelCMakeLists.txt顶层构建默认开启头文件编译测试THRUST_ENABLE_HEADER_TESTINGON、单元测试THRUST_ENABLE_TESTINGON与示例构建THRUST_ENABLE_EXAMPLESON基准测试默认关闭CMakeLists.txt。一个典型的单配置构建流程为# 配置指定宿主系统CPP/TBB/OMP、设备系统CUDA/TBB/OMP/CPP与 C 标准 cmake -DTHRUST_HOST_SYSTEMCPP -DTHRUST_DEVICE_SYSTEMCUDA -DTHRUST_CPP_DIALECT17 \ -DCMAKE_BUILD_TYPERelease /path/to/thrust/sources # 构建 cmake --build . -j # 运行测试单元测试通过 ctest 驱动 ctest其中THRUST_DEVICE_SYSTEMCUDA是默认的设备后端选择若只想在纯 CPU 环境无 CUDA 工具链下验证 Thrust 的算法正确性可将设备系统设为CPP、OMP或TBB此时不依赖 CUDA Toolkit但 TBB 后端需要额外指定THRUST_TBB_ROOT指向 TBB 安装根目录各选项的完整说明见 CMake 选项文档。若需要同时覆盖多种宿主/设备/方言组合可开启THRUST_ENABLE_MULTICONFIG的多配置模式。环境自检清单将全文要求汇总为一份可直接对照的自检清单系统软件已安装 CUDA Toolkit 或 NVIDIA HPC SDK版本尽可能新以匹配 Thrustmain分支的测试基线C 标准编译时使用 C14 或 C17若被迫使用 C11留意弃用警告宿主编译器NVCC 为最新版GCC ≥ 5.0、Clang ≥ 7.0、MSVC ≥ 201919.20不满足时可通过定义THRUST_IGNORE_DEPRECATED_COMPILER临时压制警告设备架构目标 GPU 计算能力 ≥ SM 35宿主平台Linux 或 Windows架构为 x86-64 / aarch64 / ppc64le构建工具CMake ≥ 3.15独立构建推荐 ≥ 3.17C17CUDA 需 ≥ 3.18.3。只要逐项满足上述条件即可正常使用 Thrust 的全部并行算法、迭代器与内存管理设施并顺利通过本仓库 testing 目录下的单元测试验证。若在编译期收到形如Thrust requires at least ...的告警请回到第 2、3 项核对版本并视情况通过本文介绍的THRUST_IGNORE_DEPRECATED_*系列宏处理。赞分享科学计算【免费下载链接】thrust[ARCHIVED] The C parallel algorithms library. See https://github.com/NVIDIA/cccl项目地址https://gitcode.com/gh_mirrors/th/thrust点击查看免费下载相关推荐Lsyncd 源码编译构建指南环境要求、CMake 配置与安装验证Lsyncd 源码编译构建指南环境要求、CMake 配置与安装验证 LsyncdLive Syncing Daemon是一个以 C 语言为核心、以 Lua后端LAMMPS 构建前提条件全解析编译器、CMake 与 GNU make 环境要求LAMMPS 构建前提条件全解析编译器、CMake 与 GNU make 环境要求 本指南系统梳理 LAMMPS 从源码编译前的软硬件前提条件C17 编科研科学计算高性能计算XenonRecomp构建指南CMake配置与Clang编译环境搭建XenonRecomp构建指南CMake配置与Clang编译环境搭建 XenonRecomp是一个强大的工具能够将Xbox 360游戏可执行文件重新编译为原开发工具上一篇WarcraftHelper魔兽争霸3终极增强插件5分钟快速上手指南下一篇WarcraftHelper三步搞定魔兽争霸3所有兼容问题立即获得专业级游戏体验创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考