NVIDIA/cccl
GitHub: NVIDIA/cccl
NVIDIA官方的CUDA C++核心计算库,整合Thrust并行算法、CUB底层原语和libcudacxx标准库,为GPU开发提供从高层抽象到底层控制的完整工具链。
Stars: 2231 | Forks: 363
[](https://codespaces.new/NVIDIA/cccl?quickstart=1&devcontainer_path=.devcontainer%2Fdevcontainer.json)
|[贡献者指南](https://github.com/NVIDIA/cccl/blob/main/CONTRIBUTING.md)|[开发容器](https://github.com/NVIDIA/cccl/blob/main/.devcontainer/README.md)|[Discord](https://discord.gg/nvidiadeveloper)|[Godbolt](https://godbolt.org/z/x4G73af9a)|[GitHub 项目](https://github.com/orgs/NVIDIA/projects/6)|[文档](https://nvidia.github.io/cccl)|
|-|-|-|-|-|-|
# CUDA Core Compute Libraries (CCCL)
欢迎使用 CUDA Core Compute Libraries (CCCL),我们的使命是让 CUDA 更加令人愉悦。
本仓库将三个必不可少的 CUDA C++ 库统一到一个便捷的仓库中:
- [Thrust](thrust) ([原仓库](https://github.com/nvidia/thrust))
- [CUB](cub) ([原仓库](https://github.com/nvidia/cub))
- [libcudacxx](libcudacxx) ([原仓库](https://github.com/nvidia/libcudacxx))
CCCL 的目标是为 CUDA C++ 开发人员提供构建块,使其更轻松地编写安全且高效的代码。
将这些库整合在一起可以简化您的开发流程,并拓宽您利用 CUDA C++ 强大功能的能力。
有关统一这些项目的决策的更多信息,请参阅[此处的公告](https://github.com/NVIDIA/cccl/discussions/520)。
## 概述
CUDA Core Compute Libraries (CCCL) 的概念源于 Thrust、CUB 和 libcudacxx 项目,这些项目多年来独立开发,具有相似的目标:为 CUDA 开发人员提供高质量、高性能且易于使用的 C++ 抽象。
自然而然地,这三个项目之间存在很多重叠,很明显,将它们统一到一个仓库中可以更好地服务社区。
- **Thrust** 是 C++ 并行算法库,它的灵感促成了并行算法被引入 C++ 标准库。Thrust 的高层接口极大地提高了程序员的生产力,同时通过可配置的后端(允许使用多种并行编程框架,如 CUDA、TBB 和 OpenMP)实现了 GPU 和多核 CPU 之间的性能可移植性。
- **CUB** 是一个底层的、特定于 CUDA 的库,旨在为所有 GPU 架构提供光速并行算法。除了设备级算法外,它还提供*协同算法*(如块级归约和 warp 级扫描),为 CUDA kernel 开发人员提供构建块,以创建光速、自定义的 kernel。
- **libcudacxx** 是 CUDA C++ 标准库。它提供了可在主机和设备代码中工作的 C++ 标准库实现。此外,它还为 CUDA 特定的硬件功能(如同步原语、缓存控制、原子操作等)提供了抽象。
CCCL 的主要目标是填补与标准 C++ 库为标准 C++ 填补的类似角色:为 CUDA C++ 开发人员提供通用的、光速的工具,使他们能够专注于解决重要的问题。
统一这些项目是实现这一目标的第一步。
## 示例
这是一个演示如何使用 Thrust、CUB 和 libcudacxx 的 CCCL 功能的简单示例。
它展示了如何使用 Thrust/CUB/libcudacxx 实现一个简单的并行归约 kernel。
每个线程块使用 `cub::BlockReduce` 计算数组子集的总和。
然后使用 libcudacxx 中的 `cuda::atomic_ref` 通过原子加法将每个块的总和归约为单个值。
然后展示了如何使用 Thrust 的 `reduce` 算法完成相同的归约,并比较结果。
[在 Godbolt 上实时尝试!](https://godbolt.org/z/3KaWz3Msf)
```
#include
#include
#include
#include
#include
#include
#include
template
__global__ void reduce(cuda::std::span data, cuda::std::span result) {
using BlockReduce = cub::BlockReduce;
__shared__ typename BlockReduce::TempStorage temp_storage;
int const index = threadIdx.x + blockIdx.x * blockDim.x;
int sum = 0;
if (index < data.size()) {
sum += data[index];
}
sum = BlockReduce(temp_storage).Sum(sum);
if (threadIdx.x == 0) {
cuda::atomic_ref atomic_result(result.front());
atomic_result.fetch_add(sum, cuda::memory_order_relaxed);
}
}
int main() {
// Allocate and initialize input data
int const N = 1000;
thrust::device_vector data(N);
thrust::fill(data.begin(), data.end(), 1);
// Allocate output data
thrust::device_vector kernel_result(1);
// Compute the sum reduction of `data` using a custom kernel
constexpr int block_size = 256;
int const num_blocks = cuda::ceil_div(N, block_size);
reduce<<>>(cuda::std::span(thrust::raw_pointer_cast(data.data()), data.size()),
cuda::std::span(thrust::raw_pointer_cast(kernel_result.data()), 1));
auto const err = cudaDeviceSynchronize();
if (err != cudaSuccess) {
std::cout << "Error: " << cudaGetErrorString(err) << std::endl;
return -1;
}
int const custom_result = kernel_result[0];
// Compute the same sum reduction using Thrust
int const thrust_result = thrust::reduce(thrust::device, data.begin(), data.end(), 0);
// Ensure the two solutions are identical
std::printf("Custom kernel sum: %d\n", custom_result);
std::printf("Thrust reduce sum: %d\n", thrust_result);
assert(kernel_result[0] == thrust_result);
return 0;
}
```
## 入门指南
### 用户
CCCL 中的所有内容都是仅头文件的。
因此,用户只需关心如何获取头文件以及如何将它们整合到其构建系统中。
#### CUDA Toolkit
开始使用 CCCL 最简单的方法是通过 [CUDA Toolkit](https://developer.nvidia.com/cuda-toolkit),其中包含 CCCL 头文件。
当您使用 `nvcc` 编译时,它会自动将 CCCL 头文件添加到您的包含路径中,因此您只需在代码中 `#include` 任何 CCCL 头文件即可,无需额外配置。
如果使用其他编译器进行编译,则需要更新构建系统的包含搜索路径,以指向 CTK 安装中的 CCCL 头文件(例如 `/usr/local/cuda/include`)。
```
#include
#include
#include
```
#### GitHub
希望保持在 CCCL 开发最前沿的用户鼓励使用来自 GitHub 的 CCCL。
在较旧版本的 CUDA Toolkit 上使用较新版本的 CCCL 是受支持的,但反之则不行。
有关 CCCL 与 CUDA Toolkit 之间兼容性的完整信息,请参阅[我们的平台支持](#platform-support)。
CCCL 中的所有内容都是仅头文件的,因此克隆并将其包含在一个简单的项目中就像下面这样简单:
```
git clone https://github.com/NVIDIA/cccl.git
nvcc -Icccl/thrust -Icccl/libcudacxx/include -Icccl/cub main.cu -o main
```
##### 安装
默认的 CMake 选项仅生成安装规则,因此熟悉的
`cmake . && make install` 工作流程即可正常工作:
```
git clone https://github.com/NVIDIA/cccl.git
cd cccl
cmake . -DCMAKE_INSTALL_PREFIX=/usr/local
make install
```
还提供了一个便捷脚本:
```
ci/install_cccl.sh /usr/local
```
###### 使用预设进行高级安装
CMake 预设也可用,其中包含包含实验性
库的选项:
```
cmake --preset install -DCMAKE_INSTALL_PREFIX=/usr/local
cmake --build --preset install --target install
```
使用 `install-unstable` 预设以包含实验性库,或
使用 `install-unstable-only` 以仅安装实验性库。
#### Conda
CCCL 还通过 `conda-forge` 频道提供每个版本的 conda 包:
```
conda config --add channels conda-forge
conda install cccl
```
这会将最新的 CCCL 安装到 conda 环境的 `$CONDA_PREFIX/include/` 和 `$CONDA_PREFIX/lib/cmake/` 目录中。
它可以通过 `find_package(CCCL)` 被 CMake 发现,并且可以被 conda 环境中的任何编译器使用。
有关更多信息,请参阅 [conda-forge 简介](https://conda-forge.org/docs/user/introduction/)。
如果您想使用随特定 CUDA Toolkit(例如 CUDA 12.4)发布的相同 CCCL 版本,可以使用以下命令安装 CCCL:
```
conda config --add channels conda-forge
conda install cuda-cccl cuda-version=12.4
```
`cuda-cccl` 元包安装与对应于 `cuda-version` 的 CUDA Toolkit 一起发布的 `cccl` 版本。
如果您希望在安装 `cuda-cccl` 后更新到最新的 `cccl`,请在更新 `cccl` 之前卸载 `cuda-cccl`:
```
conda uninstall cuda-cccl
conda install -c conda-forge cccl
```
##### CMake 集成
CCCL 使用 [CMake](https://cmake.org/) 进行所有构建和安装基础架构,包括测试以及在其他 CMake 项目中链接的目标。
因此,CMake 是将 CCCL 集成到另一个项目中的推荐方式。
有关如何使用 CMake Package Manager 执行此操作的完整示例,请参阅[我们的基础示例项目](examples/basic)。
其他构建系统应该可以工作,但仅测试了 CMake。
欢迎贡献以简化将 CCCL 集成到其他构建系统中。
## 平台支持
**目标:** 本节描述用户可以期望 CCCL 在何处成功编译和运行。
通常,CCCL 应在支持 CUDA Toolkit 的任何地方工作,但是细节决定成败。
以下部分描述了对不同版本的 CUDA Toolkit、主机编译器和 C++ 方言的支持和测试细节。
### CUDA Toolkit (CTK) 兼容性
**摘要:**
- 最新版本的 CCCL 与当前和之前的 CTK 主要版本系列向后兼容
- CCCL 永远不会与任何版本的 CTK 向前兼容。请始终使用与您的 CTK 附带的版本相同或更新的版本。
- 次要版本 CCCL 升级不会破坏现有代码,但新功能可能不支持所有 CTK 版本
鼓励 CCCL 用户通过始终使用最新版本的 CCCL 来利用最新的增强功能和 ["live at head"](https://www.youtube.com/watch?v=tISy7EJQPzI)。
为了获得无缝体验,您可以独立于整个 CUDA Toolkit 升级 CCCL。
这是可能的,因为 CCCL 保持与当前和之前主要版本系列的每个次要 CTK 版本的最新补丁版本的向后兼容性。
在某些特殊情况下,CUDA Toolkit 版本的最低支持次要版本可能需要比其主要版本系列中最旧的版本更新。
当发布新的主要 CTK 时,我们会放弃对最旧的支持主要版本的支持。
| CCCL 版本 | 支持 CUDA Toolkit 版本 |
|--------------|------------------------------------------------|
| 2.x | 11.1 - 11.8, 12.x(仅限最新补丁版本) |
| 3.x | 12.x, 13.x (仅限最新补丁版本) |
使用最新 CCCL 的[行为良好的代码](#compatibility-guidelines)应能在任何受支持的 CTK 版本下成功编译和运行。
对于依赖于新 CTK 功能的新功能,可能会出现例外情况,因此这些功能在旧版本的 CTK 上将无法工作。
用户可以将较新版本的 CCCL 集成到较旧的 CTK 中,但不能反过来。
这意味着较旧版本的 CCCL 与较新的 CTK 不兼容。
换句话说,**CCCL 永远不会与 CUDA Toolkit 向前兼容。**
下表总结了 CTK 和 CCCL 的兼容性:
| CTK 版本 | 包含的 CCCL 版本 | 期望的 CCCL | 支持? | 备注 |
|:-----------:|:---------------------:|:--------------------:|:----------:|:--------------------------------------------------------:|
| CTK `X.Y` | CCCL `MAJOR.MINOR` | CCCL `MAJOR.MINOR+n` | ✅ | 某些新功能可能无法工作 |
| CTK `X.Y` | CCCL `MAJOR.MINOR` | CCCL `MAJOR+1.MINOR` | ✅ | 可能出现中断;某些新功能可能不可用|
| CTK `X.Y` | CCCL `MAJOR.MINOR` | CCCL `MAJOR+2.MINOR` | ❌ | CCCL 仅支持两个 CTK 主要版本 |
| CTK `X.Y` | CCCL `MAJOR.MINOR` | CCCL `MAJOR.MINOR-n` | ❌ | CCCL 不向前兼容 |
| CTK `X.Y` | CCCL `MAJOR.MINOR` | CCCL `MAJOR-n.MINOR` | ❌ | CCCL 不向前兼容 |
有关 CCCL 版本控制、API/ABI 兼容性和重大更改的更多信息,请参阅下面的[版本控制](#versioning)部分。
### 操作系统
除非另有说明,CCCL 支持与 CUDA Toolkit 相同的所有操作系统,文档如下:
- [Linux](https://docs.nvidia.com/cuda/cuda-installation-guide-linux/index.html#system-requirements)
- [Windows](https://docs.nvidia.com/cuda/cuda-installation-guide-microsoft-windows/index.html#system-requirements)
### 主机编译器
除非另有说明,CCCL 支持与最新 CUDA Toolkit 相同的主机编译器,文档如下:
- [Linux](https://docs.nvidia.com/cuda/cuda-installation-guide-linux/index.html#host-compiler-support-policy)
- [Windows](https://docs.nvidia.com/cuda/cuda-installation-guide-microsoft-windows/index.html#system-requirements)
对于 Linux 上的 GCC,至少需要 7.x。
当使用较旧的 CUDA Toolkit 时,我们也仅支持最新 CUDA Toolkit 的主机编译器,
但至少支持任何受支持的较旧 CUDA Toolkit 的最新主机编译器。
我们可能会保留对其他编译器的支持,并将接受来自社区的带有合理修复的相应补丁。
但我们不会投入大量时间来分类或修复较旧编译器的问题。
本着“您只支持您测试过的内容”的精神,请参阅我们的 [CI 概述](https://github.com/NVIDIA/cccl/blob/main/ci-overview.md),以获取有关我们确切测试内容的更多信息。
### GPU 架构
CCCL 支持[当前主要 CUDA Toolkit (CTK) 支持](https://developer.nvidia.com/cuda-gpus)的所有 GPU 架构。
需要明确的是,虽然 CCCL 可以使用当前和之前的 CTK 主要版本进行编译,但我们不会测试或验证仅在较旧 CTK 中受支持的架构。
这些架构可能仍然有效——我们不会故意破坏它们——但它们不在我们的常规 CI 覆盖范围内。此外,不保证新功能也能在这些架构上工作。
我们欢迎社区提供合理的修复,以解除这些旧架构上用户的障碍。
例如,CCCL 3.0 支持使用 CTK 12.x 和 13.x 进行编译,其中
- CUDA Toolkit 13.x 支持 `>=sm_75`
- CUDA Toolkit 12.x 支持 `>=sm_50`
在这种情况下,使用 CTK 12.x 编译 CCCL 3.0 并针对低于 `sm_75` 的架构可能有效,但这些配置不属于我们的常规测试。
### C++ 方言
- C++17
- C++20
### 测试策略
CCCL 的测试策略在尽可能多地测试配置与保持合理的 CI 时间之间取得了平衡。
对于 CUDA Toolkit 版本,测试针对受支持的最旧和最新版本进行。
例如,如果最新版本的 CUDA Toolkit 是 12.6,则针对 11.1 和 12.6 进行测试。
对于每个 CUDA 版本,构建针对所有受支持的主机编译器和所有受支持的 C++ 方言完成。
测试策略和矩阵在不断发展。
[`ci/matrix.yaml`](ci/matrix.yaml) 文件中定义的矩阵是事实来源。
有关我们 CI 管道的更多信息,请参阅[此处](ci-overview.md)。
## 版本控制
**目标:** 本节描述 CCCL 的版本控制方式、API/ABI 稳定性保证以及兼容性指南,以最大限度地减少升级麻烦。
**摘要**
- CCCL 的整个 API 在所有组件中共享一个通用的语义版本
- 只有最新发布的版本受支持,修复不会向后移植到以前的版本
- API 重大更改和 CCCL 主要版本的递增仅在与 CUDA Toolkit 的新主要版本发布合时发生
- 并非所有源代码重大更改都被视为需要提高主要版本号的公共 API 重大更改
- 不要依赖 `cub::` 或 `thrust::` 命名空间中实体的 ABI 稳定性
- `cuda::` 命名空间中符号的 ABI 重大更改可能随时发生,但将通过递增 ABI 版本来反映,该版本嵌入在所有 `cuda::` 符号的内联命名空间中。可能同时支持多个 ABI 版本。
**注意:** 在将 Thrust、CUB 和 libcudacxx 合并到此仓库之前,每个库都根据语义版本控制独立进行版本控制。
从 2.1 版本开始,所有三个库在其单独的仓库中同步了发布版本。
展望未来,CCCL 将继续在单个[语义版本](https://semver.org/)下发布,其中 2.2.0 是来自 [nvidia/cccl](www.github.com/nvidia/cccl) 仓库的第一个版本。
### 重大更改
重大更改是指在已发布版本之间对**明确支持**的功能的更改,该更改需要用户进行工作才能升级到较新版本。
在任何情况下,[任何更改](https://www.hyrumslaw.com/)都有可能破坏某些地方的某些人。
因此,并非所有可能的源代码重大更改都被视为需要提高主要语义版本的公共 API 重大更改。
以下部分描述了 CCCL 的 API 和 ABI 重大更改的详细信息。
### 应用程序编程接口 (API)
CCCL 的公共 API 是_有意_公开以提供库实用功能的全部功能。
换句话说,CCCL 的公共 API 不仅仅是函数签名,还包括(但不限于):
- 旨在直接包含在用户代码中的头文件的位置和名称
- 旨在直接在用户代码中使用的命名空间
- 位于头文件中并旨在直接在用户代码中使用的函数、类和变量的声明和/或定义
- 旨在直接在用户代码中使用的函数、类和变量的语义
此外,CCCL 的公共 API **不**包括以下任何内容:
- 任何带有 `_` 或 `__` 前缀的符号
- 任何名称中包含 `detail` 的符号,包括 `detail::` 命名空间或宏
- 任何包含在 `detail/` 目录或其子目录中的头文件
- 作为公共 API 一部分的任何头文件隐式包含的头文件
通常,目标是避免破坏公共 API 中的任何内容。
仅当这些更改为用户提供更好的性能、更易于理解的 API 和/或更一致的 API 时,才会进行此类更改。
对公共 API 的任何重大更改都需要提高 CCCL 的主要版本号。
为了保持 [CUDA 次要版本兼容性](https://docs.nvidia.com/deploy/cuda-compatibility/#minor-version-compatibility),
API 重大更改和 CCCL 主要版本提高仅在 CUDA Toolkit 的新主要版本发布时发生。
任何不属于公共 API 的内容都可能随时更改,恕不另行通知。
#### API 版本控制
所有 CCCL 组件的公共 API 共享统一的语义版本 `MAJOR.MINOR.PATCH`。
只有最新发布的版本受支持。
根据规则,功能和错误修复不会向后移植到以前发布的版本或分支。
查询版本的首选方法是使用 `CCCL_[MAJOR/MINOR/PATCH_]VERSION`,如下所述。
为了向后兼容,Thrust/CUB/libcudacxxx 版本定义可用,并且将始终与 `CCCL_VERSION` 保持一致。
请注意,Thrust/CUB 使用 `MMMmmmpp` 方案,而 CCCL 和 libcudacxx 使用 `MMMmmmppp`。
| | CCCL | libcudacxx | Thrust | CUB |
|------------------------|----------------------------------------|-------------------------------------------|------------------------------|---------------------------|
| Header | `` | `` | `` | `` |
| 主要版本 | `CCCL_MAJOR_VERSION` | `_LIBCUDACXX_CUDA_API_VERSION_MAJOR` | `THRUST_MAJOR_VERSION` | `CUB_MAJOR_VERSION` |
| 次要版本 | `CCCL_MINOR_VERSION` | `_LIBCUDACXX_CUDA_API_VERSION_MINOR` | `THRUST_MINOR_VERSION` | `CUB_MINOR_VERSION` |
| 补丁/子次要版本 | `CCCL_PATCH_VERSION` | `_LIBCUDACXX_CUDA_API_VERSION_PATCH` | `THRUST_SUBMINOR_VERSION` | `CUB_SUBMINOR_VERSION` |
| 拼接版本 | `CCCL_VERSION (MMMmmmppp)` | `_LIBCUDACXX_CUDA_API_VERSION (MMMmmmppp)`| `THRUST_VERSION (MMMmmmpp)` | `CUB_VERSION (MMMmmmpp)` |
### 应用程序二进制接口 (ABI)
应用程序二进制接口 (ABI) 是一组规则,用于:
- 库的组件如何在机器代码中表示
- 这些组件如何跨不同的翻译单元交互
库的 ABI 包括(但不限于):
- 函数和类型的修饰名称
- 对象和类型的大小和对齐方式
- 对象二进制表示中字节的语义
**ABI 重大更改**是导致公共 API 中函数或类型的 ABI 发生更改的任何更改。
例如,向结构体添加新数据成员是 ABI 重大更改,因为它会更改类型的大小。
在 CCCL 中,关于 ABI 的保证如下:
- `thrust::` 和 `cub::` 命名空间中的符号可能随时破坏 ABI,恕不另行通知。
- `thrust::` 和 `cub::` [符号的 ABI 包括用于编译的 CUDA 架构](https://nvidia.github.io/cccl/cub/developer_overview.html#symbols-visibility)。因此,如果满足以下条件,`thrust::` 或 `cub::` 符号可能具有不同的 ABI:
- 使用不同的架构编译
- 作为 CUDA 源文件 (`-x cu`) 与 C++ 源文件 (`-x cpp`) 编译
- `cuda::` 命名空间中的符号也可能随时破坏 ABI。但是,`cuda::` 符号嵌入了 ABI 版本号,每当发生 ABI 破坏时,该版本号就会递增。可能同时支持多个 ABI 版本,因此用户可以选择恢复到以前的 ABI 版本。有关更多信息,请参阅[此处](libcudacxx/docs/releases/versioning.md)。
**谁应该关心 ABI?**
通常,CCCL 用户只有在构建或使用其 API 直接或间接包含 CCCL 提供的类型的二进制工件(如共享库)时,才需要担心 ABI 问题。
例如,假设 `libA.so` 是使用 CCCL 版本 `X` 构建的,其公共 API 包含如下函数:
```
void foo(cuda::std::optional);
```
如果另一个库 `libB.so` 是使用 CCCL 版本 `Y` 编译的,并使用 `libA.so` 中的 `foo`,那么如果版本 `X` 和 `Y` 之间存在 ABI 破坏,则可能会失败。
与 API 重大更改不同,ABI 破坏通常不需要代码更改,只需要重新编译所有内容以使用相同的 ABI 版本。
要了解有关 ABI 及其重要性的更多信息,请参阅 [What is ABI, and What Should C++ Do About It?](https://wg21.link/P2028R0)。
### 兼容性指南
如上所述,并非所有可能的源代码重大更改都构成需要递增 CCCL API 主要版本号的重大更改。
鼓励用户遵守以下准则,以最大限度地减少因意外依赖 CCCL 中不属于公共 API 的部分而导致中断的风险:
- 除非对特定符号 noted 外,否则不要向 `thrust::`、`cub::`、`nv::` 或 `cuda::` 命名空间添加任何声明,或特化任何模板,例如特化 `cuda::std::iterator_traits`
- **理由**:如果添加了具有相同名称的符号或特化,这将导致冲突。
- 不要获取 `thrust::`、`cub::`、`cuda::` 或 `nv::` 命名空间中任何 API 的地址。
- **理由**:这将阻止添加这些 API 的重载。
- 不要前向声明 `thrust::`、`cub::`、`cuda::` 或 `nv::` 命名空间中的任何 API。
- **理由**:这将阻止添加这些 API 的重载。
- 不要直接引用任何带有 `_`、`__` 前缀或名称中任何位置包含 `detail` 的符号,包括 `detail::` 命名空间或宏
- **理由**:这些符号仅供内部使用,可能随时更改,恕不另行通知。
- 包含您使用的内容。对于您使用的每个 CCCL 符号,直接 `#include` 声明该符号的头文件。换句话说,不要依赖其他头文件隐式包含的头文件。
- **理由**:内部包含可能随时更改。
本节的部分内容灵感来自 [Abseil 的兼容性指南](https://abseil.io/about/compatibility)。
## 弃用策略
我们将尽最大努力在对公共 API、ABI 进行任何重大更改或修改支持的平台和编译器之前通知用户。
适当时,弃用将以可禁用的编程警告的形式出现。
弃用期将取决于更改的影响,但通常至少持续 2 个次要版本发布。
## 映射到 CTK 版本
| CCCL 版本 | CTK 版本 |
|--------------|-------------|
| 3.2 | 13.2 |
| 3.1 | 13.1 |
| 3.0 | 13.0 |
| 2.8 | 12.9 |
| 2.7 | 12.8 |
| 2.5 | 12.6 |
| 2.4 | 12.5 |
| 2.3 | 12.4 |
测试一下: https://cuda.godbolt.org/z/K818M4Y9f
12.4 之前的 CTK 将 Thrust、CUB 和 libcudacxx 作为单独的库发布。
| Thrust/CUB/libcudacxx 版本 | CTK 版本 |
|-------------------------------|-------------|
| 2.2 | 12.3 |
| 2.1 | 12.2 |
| 2.0/2.0/1.9 | 12.1 |
| 2.0/2.0/1.9 | 12.0 |
## CI 管道概述
有关 CI 管道的详细概述,请参阅 [ci-overview.md](ci-overview.md)。
## 相关项目
与 CCCL 让 CUDA 更令人愉悦的使命相关的项目:
- [cuCollections](https://github.com/NVIDIA/cuCollections) - GPU 加速数据结构(如哈希表)
- [NVBench](https://github.com/NVIDIA/nvbench) - 专为 CUDA 应用程序定制的基准测试库
- [stdexec](https://github.com/nvidia/stdexec) - Senders 异步编程模型的参考实现
## 使用 CCCL 的项目
您的项目使用 CCCL 吗?[打开 PR 将您的项目添加到此列表!](https://github.com/NVIDIA/cccl/edit/main/README.md)
- [AmgX](https://github.com/NVIDIA/AMGX) - 多重网格线性求解器库
- [ColossalAI](https://github.com/hpcaitech/ColossalAI) - 用于编写分布式深度学习模型的工具
- [cuDF](https://github.com/rapidsai/cudf) - 用于 ETL 数据分析的算法和文件读取器
- [cuGraph](https://github.com/rapidsai/cugraph) - 用于图分析的算法
- [cuML](https://github.com/rapidsai/cuml) - 机器学习算法和原语
- [CuPy](https://cupy.dev) - GPU 版 NumPy 和 SciPy
- [cuSOLVER](https://developer.nvidia.com/cusolver) - 稠密和稀疏线性求解器
- [CUSP](https://github.com/cusplibrary/cusplibrary) - 稀疏矩阵运算、迭代方法和代数多重网格
- [GooFit](https://github.com/GooFit/GooFit) - 最大似然拟合库
- [HeavyDB](https://github.com/heavyai/heavydb) - SQL 数据库引擎
- [HOOMD](https://github.com/glotzerlab/hoomd-blue) - 蒙特卡洛和分子动力学模拟
- [HugeCTR](https://github.com/NVIDIA-Merlin/HugeCTR) - GPU 加速推荐框架
- [Hydra](https://github.com/MultithreadCorner/Hydra) - 高能物理数据分析
- [Hypre](https://github.com/hypre-space/hypre) - 多重网格线性求解器
- [LightSeq](https://github.com/bytedance/lightseq) - 用于序列处理和生成的训练和推理
- [MatX](https://github.com/NVIDIA/matx) - 使用表达式模板提供高效、类 Python 语法的数值计算库
- [PyTorch](https://github.com/pytorch/pytorch) - 张量和神经网络计算
- [Qiskit](https://github.com/Qiskit/qiskit-aer) - 量子电路高性能模拟器
- [QUDA](https://github.com/lattice/quda) - 格点量子色动力学 (QCD) 计算
- [RAFT](https://github.com/rapidsai/raft) - 用于机器学习的算法和原语
- [TensorFlow](https://github.com/tensorflow/tensorflow) - 端到端机器学习平台
- [TensorRT](https://github.com/NVIDIA/TensorRT) - 深度学习推理
- [tsne-cuda](https://github.com/CannyLab/tsne-cuda) - 随机邻域嵌入库
- [Visualization Toolkit (VTK)](https://gitlab.kitware.com/vtk/vtk) - 渲染和可视化库
- [XGBoost](https://github.com/dmlc/xgboost) - 梯度提升机器学习算法
标签:Bash脚本, C++, CUB, CUDA, CUDA编程, GPGPU, GPU计算, HPC, libcudacxx, STL, Thrust, Vectored Exception Handling, 代码抽象, 威胁情报, 安全编码, 并行算法, 并行计算, 底层开发, 开发者工具, 异构计算, 数据并行, 数据擦除, 标准库, 核心计算库, 算法库, 统一仓库, 计算机科学, 高性能计算, 高效计算