| 기고자 가이드 | Dev 컨테이너 | 불화 | Godbolt | Github 프로젝트 | 선적 서류 비치 |
|---|
Cuda Core Compute Libraries (CCCL)에 오신 것을 환영합니다. 우리의 임무는 Cuda를 더 즐겁게 만들 수 있습니다.
이 저장소는 세 가지 필수 CUDA C ++ 라이브러리를 단일의 편리한 저장소로 통합합니다.
CCCL의 목표는 CUDA C ++ 개발자에게 안전하고 효율적인 코드를 쉽게 작성할 수있는 빌딩 블록을 제공하는 것입니다. 이러한 라이브러리를 통합하면 개발 프로세스를 간소화하고 CUDA C ++의 힘을 활용하는 능력이 넓어집니다. 이 프로젝트를 통일하기로 한 결정에 대한 자세한 내용은 여기 발표를 참조하십시오.
CUDA Core Compute Libraries (CCCL)의 개념은 CUDA 개발자에게 고품질, 고성능 및 사용하기 쉬운 C ++ 추상화를 제공하는 것입니다. 당연히, 세 프로젝트들 사이에 많은 겹치는 것이 있었으며, 단일 저장소로 통일함으로써 커뮤니티가 더 잘 봉사 할 것이라는 것이 분명해졌습니다.
추력 은 C ++ 병렬 알고리즘 라이브러리로, 병렬 알고리즘의 C ++ 표준 라이브러리에 영감을주었습니다. Strust의 고급 인터페이스는 프로그래머 생산성을 크게 향상시키는 동시에 여러 병렬 프로그래밍 프레임 워크 (CUDA, TBB 및 OpenMP)를 사용할 수있는 구성 가능한 백엔드를 통해 GPU와 Multicore CPU 간의 성능 이식성을 가능하게합니다.
Cub는 모든 GPU 아키텍처에서 라이트 속도 병렬 알고리즘을 위해 설계된 하위 수준의 CUDA 관련 라이브러리입니다. 장치 전체의 알고리즘 외에도 블록 전체 감소 및 워프 전체 스캔과 같은 협력 알고리즘을 제공하여 Cuda 커널 개발자에게 빌딩 블록을 제공하여 조명 속도, 사용자 정의 커널을 만들 수 있습니다.
Libcudacxx 는 Cuda C ++ 표준 라이브러리입니다. 호스트 및 장치 코드 모두에서 작동하는 C ++ 표준 라이브러리 구현을 제공합니다. 또한 동기화 프리미티브, 캐시 제어, 원자력 등과 같은 CUDA- 특이 적 하드웨어 기능에 대한 추상화를 제공합니다.
CCCL의 주요 목표는 표준 C ++ 라이브러리가 표준 C ++를 채우는 유사한 역할을 수행하는 것입니다. CUDA C ++ 개발자에게 일반적인 목적, 조명 속도 도구를 제공하여 문제를 해결하는 데 집중할 수 있습니다. 이 프로젝트를 통일하는 것은 그 목표를 실현하는 첫 단계입니다.
이것은 Strust, Cub 및 Libcudacxx에서 CCCL 기능의 사용을 보여주는 간단한 예입니다.
스러스트/cub/libcudacxx를 사용하여 간단한 병렬 감소 커널을 구현하는 방법을 보여줍니다. 각 스레드 블록은 cub::BlockReduce 사용하여 배열의 서브 세트의 합을 계산합니다. 그런 다음 각 블록의 합은 libcudacxx의 cuda::atomic_ref 통한 원자 첨가를 사용하여 단일 값으로 줄입니다.
그런 다음 Strust의 reduce 알고리즘을 사용하여 동일한 감소를 수행하고 결과를 비교하는 방법을 보여줍니다.
Godbolt에서 살아보십시오!
# include < thrust/execution_policy.h >
# include < thrust/device_vector.h >
# include < cub/block/block_reduce.cuh >
# include < cuda/atomic >
# include < cuda/cmath >
# include < cuda/std/span >
# include < cstdio >
template < int block_size>
__global__ void reduce (cuda::std::span< int const > data, cuda::std::span< int > result) {
using BlockReduce = cub::BlockReduce< int , block_size>;
__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< int , cuda::thread_scope_device> 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< int > data (N);
thrust::fill (data. begin (), data. end (), 1 );
// Allocate output data
thrust::device_vector< int > 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<block_size><<<num_blocks, block_size>>>(cuda::std::span< int const >( thrust::raw_pointer_cast (data. data ()), data. size ()),
cuda::std::span< int >( 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의 모든 것은 헤더 전용입니다. 따라서 사용자는 헤더 파일을 얻는 방법과 빌드 시스템에 통합하는 방법에만 관심이 필요합니다.
CCCL을 사용하기 가장 쉬운 방법은 CCCL 헤더를 포함하는 CUDA 툴킷을 통한 것입니다. nvcc 로 컴파일하면 CCCL 헤더가 자동으로 포함 된 경로에 자동으로 추가되므로 추가 구성이 필요없이 코드의 CCCL 헤더를 간단히 #include 수 있습니다.
다른 컴파일러로 컴파일하는 경우 CTK 설치 (예 : /usr/local/cuda/include )의 CCCL 헤더를 가리키기 위해 빌드 시스템 포함 검색 경로를 업데이트해야합니다.
# include < thrust/device_vector.h >
# include < cub/cub.cuh >
# include < cuda/std/atomic > CCCL 개발의 최첨단을 유지하려는 사용자는 Github에서 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 maincuda 툴킷에서
nvcc에 암시 적으로 포함 된 CCCL 헤더와의 충돌을 피하기 위해-I-isystem사용하십시오. 모든 CCCL 헤더는#pragma system_header사용하여-isystem사용하는 것처럼 경고가 여전히 침묵 할 것입니다. 자세한 내용은 #527을 참조하십시오.
설치 규칙 만 생성하는 최소 빌드는 install CMAKE 사전 설정을 사용하여 구성 할 수 있습니다.
git clone https://github.com/NVIDIA/cccl.git
cd cccl
cmake --preset install -DCMAKE_INSTALL_PREFIX=/usr/local/
cd build/install
ninja install 설치에 실험 라이브러리를 포함하려면 install-unstable 사전 설정 및 빌드 디렉토리를 사용하십시오.
실험 라이브러리 만 설치하려면 install-unstable-only 설정 및 빌드 디렉토리를 사용하십시오.
CCCL은 또한 conda-forge 채널을 통해 각 릴리스의 콘다 패키지를 제공합니다.
conda config --add channels conda-forge
conda install cccl 이것은 최신 CCCL을 Conda Environment의 $CONDA_PREFIX/include/ $CONDA_PREFIX/lib/cmake/ directories에 설치합니다. find_package(CCCL) 통해 CMAKE에 의해 발견 될 수 있으며 Conda 환경의 모든 컴파일러에서 사용할 수 있습니다. 자세한 내용은 Conda-Forge 소개를 참조하십시오.
특정 CUDA 툴킷 (예 : CUDA 12.4)과 함께 배송 된 동일한 CCCL 버전을 사용하려면 다음과 함께 CCCL을 설치할 수 있습니다.
conda config --add channels conda-forge
conda install cuda-cccl cuda-version=12.4 cuda-cccl Metapackage는 cuda-version 에 해당하는 CUDA 툴킷과 함께 제공되는 cccl 버전을 설치합니다. cuda-cccl 설치 한 후 최신 cccl 로 업데이트하려면 cccl 업데이트하기 전에 cuda-cccl 제거하십시오.
conda uninstall cuda-cccl
conda install -c conda-forge cccl참고
cuda-cccl_linux-64와 같은 이름의 콘다 패키지도 있습니다. 이러한 패키지에는 CUDA 툴킷의 일부로 배송 된 CCCL 버전이 포함되어 있지만 CUDA 툴킷에서 내부 용으로 설계되었습니다. Conda 컴파일러와의 호환성을 위해cccl또는cuda-cccl대신 설치하십시오. 자세한 내용은 CCCL Conda-Forge 레시피를 참조하십시오.
CCCL은 테스트뿐만 아니라 다른 CMAKE 프로젝트에 대한 링크를 포함하여 모든 빌드 및 설치 인프라에 CMAKE를 사용합니다. 따라서 CMAKE는 CCCL을 다른 프로젝트에 통합하는 권장 방법입니다.
Cmake 패키지 관리자를 사용하여이를 수행하는 방법에 대한 완전한 예는 기본 예제 프로젝트를 참조하십시오.
다른 빌드 시스템은 작동해야하지만 CMake 만 테스트합니다. CCCL을 다른 빌드 시스템에 단순화하기위한 기여를 환영합니다.
CCCL을 더 좋게 만드는 데 기여하고 싶으십니까? 개발 환경을 설정하고 변경하고 테스트를 실행하며 PR을 제출하기 위해 알아야 할 모든 것에 대한 포괄적 인 개요는 기고 가이드를 확인하십시오.
목표 : 이 섹션에서는 사용자가 CCCL이 성공적으로 컴파일하고 실행할 수있는 위치를 설명합니다.
일반적으로 CCCL은 CUDA 툴킷이 지원되는 모든 곳에서 작동해야하지만 악마는 세부 사항에 있습니다. 아래 섹션에서는 CUDA 툴킷, 호스트 컴파일러 및 C ++ 방언의 다양한 버전에 대한 지원 및 테스트의 세부 사항에 대해 설명합니다.
요약:
CCCL 사용자는 항상 최신 버전의 CCCL을 사용하여 최신 개선 사항과 "Live at Head"를 활용하도록 권장됩니다. 원활한 경험을 위해 전체 CUDA 툴킷과 독립적으로 CCCL을 업그레이드 할 수 있습니다. CCCL은 현재 및 이전 주요 버전 시리즈에서 모든 작은 CTK 릴리스의 최신 패치 릴리스와 후진 호환성을 유지하기 때문에 가능합니다. 일부 예외적 인 경우, Cuda Toolkit 릴리스의 최소 지원 마이너 버전은 주요 버전 시리즈 내에서 가장 오래된 릴리스보다 새롭어 질 수 있습니다. 예를 들어, CCCL은 CTK 11.0에 존재할 수없는 컴파일러 문제로 인해 11.x 시리즈에서 최소 지원 버전 11.1이 필요합니다.
새로운 주요 CTK가 출시되면 가장 오래된 지원되는 주요 버전에 대한 지원을 중단합니다.
| CCCL 버전 | CUDA 툴킷 버전을 지원합니다 |
|---|---|
| 2.X | 11.1-11.8, 12.x (최신 패치 릴리스 만) |
| 3.x (미래) | 12.x, 13.x (최신 패치 릴리스 만) |
최신 CCCL을 사용한 잘 행동 한 코드는 지원되는 CTK 버전에서 성공적으로 컴파일하고 실행해야합니다. 새로운 CTK 기능에 의존하는 새로운 기능의 경우 예외가 발생할 수 있으므로 이러한 기능은 이전 버전의 CTK에서 작동하지 않습니다. 예를 들어, Cuda 12.0까지 C ++ 20 지원이 nvcc 에 추가되지 않았으므로 C ++ 20에 의존하는 CCCL 기능은 CTK 11.x에서 작동하지 않습니다.
사용자는 최신 버전의 CCCL을 이전 CTK에 통합 할 수 있지만 다른 방법은 아닙니다. 이는 이전 버전의 CCCL이 새로운 CTK와 호환되지 않음을 의미합니다. 다시 말해, CCCL은 CUDA 툴킷과 호환되지 않습니다.
아래 표는 CTK 및 CCCL의 호환성을 요약합니다.
| CTK 버전 | CCCL 버전이 포함되어 있습니다 | 원하는 CCCL | 지원? | 메모 |
|---|---|---|---|---|
CTK XY | CCCL MAJOR.MINOR | CCCL MAJOR.MINOR+n | ✅ | 새로운 기능이 작동하지 않을 수 있습니다 |
CTK XY | CCCL MAJOR.MINOR | CCCL MAJOR+1.MINOR | ✅ | 가능한 휴식; 몇 가지 새로운 기능을 사용할 수 없습니다 |
CTK XY | CCCL MAJOR.MINOR | CCCL MAJOR+2.MINOR | CCCL은 두 개의 CTK 주요 버전 만 지원합니다 | |
CTK XY | CCCL MAJOR.MINOR | CCCL MAJOR.MINOR-n | CCCL은 전진하지 않습니다 | |
CTK XY | CCCL MAJOR.MINOR | CCCL MAJOR-n.MINOR | CCCL은 전진하지 않습니다 |
CCCL 버전화, API/ABI 호환성 및 중단 변경에 대한 자세한 내용은 아래 버전 섹션을 참조하십시오.
달리 명시되지 않는 한 CCCL은 CUDA 툴킷과 동일한 모든 운영 체제를 지원하며 여기에 문서화됩니다.
달리 명시되지 않는 한 CCCL은 여기에 문서화 된 최신 CUDA 툴킷과 동일한 호스트 컴파일러를 지원합니다.
구형 CUDA 툴킷을 사용할 때는 최신 CUDA 툴킷의 호스트 컴파일러 만 지원하지만 최소한 지원되는 구형 CUDA 툴킷의 최신 호스트 컴파일러 만 지원합니다.
우리는 추가 컴파일러의 지원을 유지할 수 있으며 합리적인 수정으로 커뮤니티의 해당 패치를 수락합니다. 그러나 구형 컴파일러의 문제를 일으키거나 고정하는 데 상당한 시간을 투자하지 않을 것입니다.
"테스트 한 내용 만 지원"의 정신으로, 우리가 테스트 한 내용에 대한 자세한 내용은 CI 개요를 참조하십시오.
달리 명시되지 않는 한 CCCL은 CUDA 툴킷과 동일한 GPU 아키텍처/컴퓨팅 기능을 모두 지원합니다. 여기에는 여기에 문서화되어 있습니다.
일부 기능은 특정 아키텍처/컴퓨팅 기능 만 지원할 수 있습니다.
CCCL의 테스트 전략은 가능한 한 많은 구성과 합리적인 CI 시간을 유지하는 것 사이의 균형을 맞 춥니 다.
CUDA 툴킷 버전의 경우 가장 오래된 지원 버전과 최신 버전에 대해 테스트가 수행됩니다. 예를 들어, CUDA 툴킷의 최신 버전이 12.3 인 경우 11.1 및 12.3에 대해 테스트가 수행됩니다. 각 CUDA 버전에 대해 모든 지원되는 C ++ 방언이있는 모든 지원되는 호스트 컴파일러에 대해 빌드가 완료됩니다.
테스트 전략과 매트릭스는 지속적으로 발전하고 있습니다. ci/matrix.yaml 파일에 정의 된 행렬은 진실의 결정적인 소스입니다. CI 파이프 라인에 대한 자세한 내용은 여기를 참조하십시오.
목표 : 이 섹션에서는 CCCL 버전, API/ABI 안정성 보장 및 업그레이드 두통을 최소화하기위한 호환 지침에 대해 설명합니다.
요약
cub:: 또는 thrust:: 네임 스페이스에서 엔티티의 ABI 안정성에 의존하지 마십시오.cuda:: 네임 스페이스의 기호에 대한 변경 사항을 깨뜨리는 것은 언제든지 발생할 수 있지만 모든 cuda:: 기호에 대한 인라인 네임 스페이스에 내장 된 ABI 버전을 증가시켜 반영됩니다. 여러 ABI 버전이 동시에 지원 될 수 있습니다.참고 : 이 저장소로 추력, Cub 및 Libcudacxx를 병합하기 전에 각 라이브러리는 시맨틱 버전 작성에 따라 독립적으로 버전으로 표시되었습니다. 2.1 릴리스부터 3 개의 라이브러리는 모두 릴리스 버전을 별도의 저장소에서 동기화했습니다. 앞으로 CCCL은 단일 시맨틱 버전으로 계속 출시 될 예정이며 2.2.0은 NVIDIA/CCCL 저장소에서 첫 번째 릴리스입니다.
깨지는 변화는 최신 버전으로 업그레이드하기 위해 사용자가 작업 해야하는 릴리스 버전간에 명시 적으로 지원되는 기능으로 변경되는 것입니다.
한계에서, 모든 변화는 어딘가에 누군가를 깨뜨릴 가능성이 있습니다. 결과적으로, 가능한 모든 소스 브레이킹 변경이 주요 시맨틱 버전을 충돌시키는 것을 보증하는 공개 API의 변화를 깨뜨리는 것으로 간주되는 것은 아닙니다.
아래 섹션에서는 CCCL의 API 및 ABI에 대한 변경 사항에 대한 세부 사항에 대해 설명합니다.
CCCL의 공개 API는 라이브러리의 유용성을 제공하기 위해 의도적으로 노출 된 기능의 전체입니다.
다시 말해, CCCL의 공개 API는 기능 서명을 넘어서서
또한 CCCL의 공개 API는 다음 중 어느 것도 포함 하지 않습니다 .
_ 또는 __ 로 접두사가있는 모든 기호detail:: 네임 스페이스 또는 매크로를 포함하여 이름이 포함 된 모든 detaildetail/ 디렉토리 또는 하위 디렉토리에 포함 된 모든 헤더 파일일반적으로 목표는 공개 API에서 어떤 것도 깨지는 것을 피하는 것입니다. 이러한 변경 사항은 사용자에게 더 나은 성능, 이해하기 쉬운 API 및/또는 더 일관된 API를 제공하는 경우에만 이루어집니다.
공개 API에 대한 파괴 변경에는 CCCL의 주요 버전 번호가 필요합니다. Cuda Minor 버전 호환성에 따라 API가 변경 및 CCCL 주요 버전 범프는 Cuda Toolkit의 새로운 주요 버전 릴리스와 일치하는 경우 만 발생합니다.
공개 API의 일부가 아닌 것은 언제든지 경고없이 변경 될 수 있습니다.
모든 CCCL 구성 요소의 공개 API는 MAJOR.MINOR.PATCH 의 통합 시맨틱 버전을 공유합니다.
가장 최근에 출시 된 버전 만 지원됩니다. 원칙적으로 기능 및 버그 수정은 이전에 출시 된 버전 또는 지점으로 백포링되지 않습니다.
버전을 쿼리하는 데 선호되는 방법은 아래에 설명 된대로 CCCL_[MAJOR/MINOR/PATCH_]VERSION 사용하는 것입니다. 역 호환성을 위해 스러스트/cub/libcudacxxx 버전 정의를 사용할 수 있으며 항상 CCCL_VERSION 과 일치합니다. Thrust/Cub는 MMMmmmpp 방식을 사용하는 반면 CCCL 및 Libcudacxx는 MMMmmmppp 사용합니다.
| CCCL | libcudacxx | 추력 | 견습생 | |
|---|---|---|---|---|
| 헤더 | <cuda/version> | <cuda/std/version> | <thrust/version.h> | <cub/version.h> |
| 주요 버전 | 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 브레이킹 변경입니다.
CCCL에서 ABI에 대한 보증은 다음과 같습니다.
thrust:: 및 cub:: 네임 스페이스는 언제든지 경고없이 ABI를 끊을 수 있습니다.thrust:: 및 cub:: 기호의 ABI에는 컴파일에 사용되는 CUDA 아키텍처가 포함됩니다. 따라서 thrust:: 또는 cub:: 기호는 다른 ABI를 가질 수 있습니다.-x cu ) 대 C ++ 소스 ( -x cpp )로 컴파일cuda:: 네임 스페이스의 기호도 언제든지 ABI를 깰 수 있습니다. 그러나 cuda:: Symbols는 ABI 브레이크가 발생할 때마다 증가하는 ABI 버전 번호를 포함합니다. 여러 ABI 버전이 동시에 지원 될 수 있으므로 사용자는 이전 ABI 버전으로 되돌릴 수 있습니다. 자세한 내용은 여기를 참조하십시오.누가 ABI에 관심을 가져야합니까?
일반적으로 CCCL 사용자는 API에 CCCL에서 제공하는 유형을 직간접 적으로 포함하는 이진 아티팩트 (공유 라이브러리)를 구축하거나 사용할 때 ABI 문제에 대해 걱정하면됩니다.
예를 들어, libA.so CCCL 버전 X 사용하여 구축되었고 공개 API가 다음과 같은 기능을 포함하는지 고려하십시오.
void foo (cuda::std::optional< int >); 다른 라이브러리 인 libB.so 가 CCCL 버전 Y 사용하여 컴파일되고 libA.so 의 foo 사용하는 경우 버전 X 와 Y 사이에 ABI 브레이크가 있으면 실패 할 수 있습니다. API 브레이킹 변경과 달리 ABI 브레이크는 일반적으로 코드 변경이 필요하지 않으며 동일한 ABI 버전을 사용하려면 모든 것을 다시 컴파일해야합니다.
ABI에 대해 자세히 알아 보려면 ABI가 무엇인지, C ++가 무엇을 해야하는지 확인하십시오.
위에서 언급했듯이 모든 가능한 소스 브레이킹 변경이 CCCL의 API 메이저 버전 번호를 증가시켜야하는 파괴 변경을 구성하는 것은 아닙니다.
사용자는 공개 API의 일부가 아닌 CCCL의 일부에 따라 우연히 혼란의 위험을 최소화하기 위해 다음 지침을 준수하도록 권장됩니다.
cuda::std::iterator_traits 전문화하는 특정 기호에 대한 예외가 표시되지 않는 한 thrust:: , cub:: , nv:: 또는 cuda:: 네임 스페이스에 선언을 추가하거나 템플릿을 전문화하지 마십시오.thrust:: , cub:: , cuda:: 또는 nv:: 네임 스페이스에서 API의 주소를 사용하지 마십시오.thrust:: , cub:: , cuda:: 또는 nv:: 네임 스페이스에서 API를 선언하지 마십시오._ , __ 로 접두사 또는 세부 사항을 포함하여 이름의 어느 곳에서나 detail 사항을 직접 참조하지 마십시오 detail:: 네임 스페이스 또는 매크로#include . 다시 말해, 다른 헤더에 암시 적으로 포함 된 헤더에 의존하지 마십시오.이 섹션의 일부는 Abseil의 호환성 지침에서 영감을 얻었습니다.
공개 API, ABI를 중단하거나 지원되는 플랫폼 및 컴파일러를 수정하기 전에 사용자에게 알리기 위해 최선을 다할 것입니다.
적절하게, 비활성화 될 수있는 프로그램 경고의 형태로 감가 상각이 나옵니다.
감가 상각 기간은 변경의 영향에 따라 다르지만 일반적으로 2 개 이상의 사소한 버전 릴리스가 지속됩니다.
곧 올 것입니다!
CI 파이프 라인에 대한 자세한 개요는 Ci-OverView.md를 참조하십시오.
CUDA를 더 즐겁게 만들기위한 CCCL의 사명과 관련된 프로젝트 :
프로젝트가 CCCL을 사용합니까? 이 목록에 프로젝트를 추가하려면 PR을 열어보세요!