| Panduan Kontributor | Wadah dev | Perselisihan | Godbolt | Proyek GitHub | Dokumentasi |
|---|
Selamat datang di Cuda Core Compute Libraries (CCCL) di mana misi kami adalah membuat Cuda lebih menyenangkan.
Repositori ini menyatukan tiga perpustakaan CUDA C ++ yang penting menjadi satu repositori yang nyaman:
Tujuan CCCL adalah untuk memberi CUDA C ++ pengembang blok bangunan yang membuatnya lebih mudah untuk menulis kode yang aman dan efisien. Menyatukan perpustakaan ini merampingkan proses pengembangan Anda dan memperluas kemampuan Anda untuk memanfaatkan kekuatan CUDA C ++. Untuk informasi lebih lanjut tentang keputusan untuk menyatukan proyek -proyek ini, lihat pengumuman di sini.
Konsep untuk CUDA Core Compute Libraries (CCCL) tumbuh secara organik dari proyek dorongan, Cub, dan libcudacxx yang dikembangkan secara mandiri selama bertahun-tahun dengan tujuan yang sama: untuk memberikan abstrak C ++ berkualitas tinggi, berkinerja tinggi, dan mudah digunakan untuk pengembang CUDA. Secara alami, ada banyak tumpang tindih di antara tiga proyek, dan menjadi jelas bahwa masyarakat akan lebih baik dilayani dengan menyatukan mereka menjadi satu repositori.
Thrust adalah perpustakaan algoritma paralel C ++ yang menginspirasi pengenalan algoritma paralel ke perpustakaan standar C ++. Antarmuka tingkat tinggi Thrust sangat meningkatkan produktivitas programmer sambil memungkinkan portabilitas kinerja antara GPU dan CPU multicore melalui backend yang dapat dikonfigurasi yang memungkinkan menggunakan beberapa kerangka kerja pemrograman paralel (seperti CUDA, TBB, dan OpenMP).
Cub adalah perpustakaan spesifik CUDA yang lebih rendah yang dirancang untuk algoritma paralel kecepatan cahaya di semua arsitektur GPU. Selain algoritma perangkat di seluruh perangkat, ini menyediakan algoritma kooperatif seperti pengurangan blok-lebar dan pemindaian warp-wide, memberikan pengembang kernel CUDA dengan blok bangunan untuk membuat speed-of-light, kernel khusus.
libcudacxx adalah perpustakaan standar CUDA C ++. Ini menyediakan implementasi perpustakaan standar C ++ yang berfungsi dalam kode host dan perangkat. Selain itu, ia memberikan abstraksi untuk fitur perangkat keras khusus CUDA seperti primitif sinkronisasi, kontrol cache, atomik, dan banyak lagi.
Tujuan utama CCCL adalah untuk mengisi peran serupa yang diisi oleh Perpustakaan C ++ standar untuk C ++ standar: Menyediakan alat serba guna, kecepatan-cahaya untuk pengembang CUDA C ++, yang memungkinkan mereka untuk fokus pada penyelesaian masalah yang penting. Menyatukan proyek -proyek ini adalah langkah pertama menuju mewujudkan tujuan itu.
Ini adalah contoh sederhana yang menunjukkan penggunaan fungsionalitas CCCL dari Thrust, Cub, dan Libcudacxx.
Ini menunjukkan cara menggunakan Thrust/Cub/LibCudacxx untuk mengimplementasikan kernel reduksi paralel sederhana. Setiap blok utas menghitung jumlah subset array menggunakan cub::BlockReduce . Jumlah setiap blok kemudian dikurangi menjadi nilai tunggal menggunakan ADD atomik melalui cuda::atomic_ref dari libcudacxx.
Ini kemudian menunjukkan bagaimana reduksi yang sama dapat dilakukan dengan menggunakan algoritma reduce Thrust dan membandingkan hasilnya.
Cobalah hidup di 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 ;
}Segala sesuatu di CCCL hanya header. Oleh karena itu, pengguna hanya perlu khawatir dengan bagaimana mereka mendapatkan file header dan bagaimana mereka memasukkan mereka ke dalam sistem build mereka.
Cara termudah untuk memulai menggunakan CCCL adalah melalui toolkit CUDA yang mencakup header CCCL. Saat Anda mengkompilasi dengan nvcc , secara otomatis menambahkan header CCCL ke jalur sertakan Anda sehingga Anda dapat #include header CCCL apa pun dalam kode Anda tanpa konfigurasi tambahan yang diperlukan.
Jika menyusun dengan kompiler lain, Anda perlu memperbarui sistem pencarian sistem build Anda untuk menunjuk ke header CCCL di instalasi CTK Anda (misalnya, /usr/local/cuda/include ).
# include < thrust/device_vector.h >
# include < cub/cub.cuh >
# include < cuda/std/atomic > Pengguna yang ingin tetap berada di ujung tombak pengembangan CCCL didorong untuk menggunakan CCCL dari GitHub. Menggunakan versi CCCL yang lebih baru dengan versi yang lebih lama dari CUDA Toolkit didukung, tetapi tidak sebaliknya. Untuk informasi lengkap tentang kompatibilitas antara CCCL dan CUDA Toolkit, lihat Dukungan Platform kami.
Segala sesuatu di CCCL hanya header, jadi kloning dan memasukkannya ke dalam proyek sederhana semudah berikut:
git clone https://github.com/NVIDIA/cccl.git
nvcc -Icccl/thrust -Icccl/libcudacxx/include -Icccl/cub main.cu -o mainCatatan Gunakan
-Idan bukan-isystemuntuk menghindari tabrakan dengan header CCCL yang secara implisit dimasukkan olehnvccdari toolkit CUDA. Semua header CCCL menggunakan#pragma system_headeruntuk memastikan peringatan masih akan dibungkam seolah -olah menggunakan-isystem, lihat #527 untuk informasi lebih lanjut.
Build minimal yang hanya menghasilkan aturan instalasi dapat dikonfigurasi menggunakan preset 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 Untuk memasukkan pustaka eksperimental dalam instalasi, gunakan direktori install-unstable preset dan build.
Untuk hanya menginstal pustaka eksperimental, gunakan direktori dan pembuatan direktori install-unstable-only .
CCCL juga menyediakan paket Conda dari setiap rilis melalui saluran conda-forge :
conda config --add channels conda-forge
conda install cccl Ini akan menginstal CCCL terbaru ke Conda Environment $CONDA_PREFIX/include/ dan $CONDA_PREFIX/lib/cmake/ direktori. Ini dapat ditemukan oleh CMake melalui find_package(CCCL) dan dapat digunakan oleh kompiler apa pun di lingkungan Conda. Untuk informasi lebih lanjut, lihat Pengantar Conda-Forge ini.
Jika Anda ingin menggunakan versi CCCL yang sama yang dikirimkan dengan toolkit CUDA tertentu, misalnya CUDA 12.4, Anda dapat menginstal CCCL dengan:
conda config --add channels conda-forge
conda install cuda-cccl cuda-version=12.4 Metapackage cuda-cccl menginstal versi cccl yang dikirimkan dengan toolkit CUDA yang sesuai dengan cuda-version . Jika Anda ingin memperbarui ke cccl terbaru setelah menginstal cuda-cccl , uninstall cuda-cccl sebelum memperbarui cccl :
conda uninstall cuda-cccl
conda install -c conda-forge ccclCatatan Ada juga paket Conda dengan nama-nama seperti
cuda-cccl_linux-64. Paket -paket tersebut berisi versi CCCL yang dikirim sebagai bagian dari toolkit CUDA, tetapi dirancang untuk penggunaan internal oleh CUDA Toolkit. Pasangccclataucuda-ccclsebagai gantinya, untuk kompatibilitas dengan kompiler CONDA. Untuk informasi lebih lanjut, lihat resep CCCL Conda-Forge.
CCCL menggunakan CMake untuk semua infrastruktur build dan instalasi, termasuk tes serta target yang harus dihubungkan dengan proyek CMake lainnya. Oleh karena itu, CMake adalah cara yang disarankan untuk mengintegrasikan CCCL ke dalam proyek lain.
Untuk contoh lengkap tentang cara melakukan ini menggunakan CMake Package Manager, lihat proyek contoh dasar kami.
Sistem pembuatan lainnya harus berfungsi, tetapi hanya CMake yang diuji. Kontribusi untuk menyederhanakan mengintegrasikan CCCL ke dalam sistem build lainnya dipersilakan.
Tertarik berkontribusi membuat CCCL lebih baik? Lihatlah panduan berkontribusi kami untuk tinjauan komprehensif tentang semua yang perlu Anda ketahui untuk mengatur lingkungan pengembangan Anda, melakukan perubahan, menjalankan tes, dan mengirimkan PR.
Tujuan: Bagian ini menjelaskan di mana pengguna dapat mengharapkan CCCL untuk dikompilasi dan berjalan dengan sukses.
Secara umum, CCCL harus bekerja di mana pun Toolkit CUDA didukung, namun, iblis ada dalam perinciannya. Bagian di bawah ini menjelaskan detail dukungan dan pengujian untuk berbagai versi toolkit CUDA, kompiler host, dan dialek C ++.
Ringkasan:
Pengguna CCCL didorong untuk memanfaatkan peningkatan terbaru dan "Live at Head" dengan selalu menggunakan versi terbaru CCCL. Untuk pengalaman yang mulus, Anda dapat meningkatkan CCCL secara independen dari seluruh toolkit CUDA. Ini dimungkinkan karena CCCL mempertahankan kompatibilitas mundur dengan rilis patch terbaru dari setiap rilis CTK minor dari seri versi utama saat ini dan sebelumnya. Dalam beberapa kasus luar biasa, versi minor minimum yang didukung dari rilis CUDA Toolkit mungkin perlu lebih baru dari rilis tertua dalam seri versi utamanya. Misalnya, CCCL membutuhkan versi minimum yang didukung 11.1 dari seri 11.x karena masalah kompiler yang tidak dapat dihindari hadir dalam CTK 11.0.
Ketika CTK besar baru dirilis, kami menjatuhkan dukungan untuk versi utama yang didukung tertua.
| Versi CCCL | Mendukung Versi Toolkit CUDA |
|---|---|
| 2.x | 11.1 - 11.8, 12.x (hanya rilis tambalan terbaru) |
| 3.x (masa depan) | 12.x, 13.x (hanya pelepasan tambalan terbaru) |
Kode perilaku baik menggunakan CCCL terbaru harus dikompilasi dan berjalan dengan sukses dengan versi CTK yang didukung. Pengecualian dapat terjadi untuk fitur -fitur baru yang bergantung pada fitur CTK baru, sehingga fitur -fitur tersebut tidak akan berfungsi pada versi CTK yang lebih lama. Misalnya, dukungan C ++ 20 tidak ditambahkan ke nvcc sampai CUDA 12.0, jadi fitur CCCL yang bergantung pada C ++ 20 tidak akan bekerja dengan CTK 11.X.
Pengguna dapat mengintegrasikan versi CCCL yang lebih baru ke dalam CTK yang lebih lama, tetapi tidak sebaliknya. Ini berarti versi CCCL yang lebih lama tidak kompatibel dengan CTK yang lebih baru. Dengan kata lain, CCCL tidak pernah kompatibel dengan toolkit CUDA.
Tabel di bawah ini merangkum kompatibilitas CTK dan CCCL:
| Versi CTK | Termasuk versi CCCL | CCCL yang diinginkan | Didukung? | Catatan |
|---|---|---|---|---|
CTK XY | CCCL MAJOR.MINOR | CCCL MAJOR.MINOR+n | ✅ | Beberapa fitur baru mungkin tidak berfungsi |
CTK XY | CCCL MAJOR.MINOR | CCCL MAJOR+1.MINOR | ✅ | Kemungkinan istirahat; Beberapa fitur baru mungkin tidak tersedia |
CTK XY | CCCL MAJOR.MINOR | CCCL MAJOR+2.MINOR | CCCL hanya mendukung dua versi utama CTK | |
CTK XY | CCCL MAJOR.MINOR | CCCL MAJOR.MINOR-n | CCCL tidak kompatibel ke depan | |
CTK XY | CCCL MAJOR.MINOR | CCCL MAJOR-n.MINOR | CCCL tidak kompatibel ke depan |
Untuk informasi lebih lanjut tentang versi CCCL, kompatibilitas API/ABI, dan perubahan perubahan, lihat bagian versi di bawah ini.
Kecuali ditentukan lain, CCCL mendukung semua sistem operasi yang sama dengan Toolkit CUDA, yang didokumentasikan di sini:
Kecuali ditentukan lain, CCCL mendukung kompiler host yang sama dengan toolkit CUDA terbaru, yang didokumentasikan di sini:
Saat menggunakan CUDA Toolkit yang lebih lama, kami juga hanya mendukung kompiler host dari toolkit CUDA terbaru, tetapi setidaknya kompiler host terbaru dari setiap toolkit CUDA yang lebih lama yang didukung.
Kami dapat mempertahankan dukungan dari kompiler tambahan dan akan menerima tambalan yang sesuai dari masyarakat dengan perbaikan yang wajar. Tetapi kami tidak akan menginvestasikan waktu yang signifikan dalam triase atau memperbaiki masalah untuk kompiler yang lebih tua.
Dalam semangat "Anda hanya mendukung apa yang Anda uji", lihat tinjauan CI kami untuk informasi lebih lanjut tentang apa yang kami uji.
Kecuali ditentukan lain, CCCL mendukung semua arsitektur GPU yang sama/kemampuan menghitung seperti CUDA Toolkit, yang didokumentasikan di sini: https://docs.nvidia.com/cuda/cuda-c-programming-guide/index.html#compute kapasitas kapasitas kapasitas kapasitas
Perhatikan bahwa beberapa fitur hanya dapat mendukung arsitektur/kemampuan komputasi tertentu.
Strategi pengujian CCCL memberikan keseimbangan antara pengujian sebanyak mungkin konfigurasi dan mempertahankan waktu CI yang wajar.
Untuk versi CUDA Toolkit, pengujian dilakukan terhadap versi tertua dan terbaru yang didukung. Misalnya, jika versi terbaru dari toolkit CUDA adalah 12.3, tes dilakukan terhadap 11.1 dan 12.3. Untuk setiap versi CUDA, build diselesaikan terhadap semua kompiler host yang didukung dengan semua dialek C ++ yang didukung.
Strategi pengujian dan matriks terus berkembang. Matriks yang didefinisikan dalam file ci/matrix.yaml adalah sumber kebenaran yang pasti. Untuk informasi lebih lanjut tentang pipa CI kami, lihat di sini.
Tujuan: Bagian ini menjelaskan bagaimana CCCL diversi, jaminan stabilitas API/ABI, dan pedoman kompatibilitas untuk meminimalkan sakit kepala peningkatan.
Ringkasan
cub:: atau thrust:: Namespacescuda:: namespace dapat terjadi kapan saja, tetapi akan tercermin dengan menambah versi ABI yang tertanam dalam namespace inline untuk semua cuda:: simbol. Beberapa versi ABI dapat didukung secara bersamaan.CATATAN: Sebelum menggabungkan Dorongan, Cub, dan Libcudacxx ke dalam repositori ini, setiap perpustakaan diversi secara independen menurut versi semantik. Dimulai dengan rilis 2.1, ketiga perpustakaan menyinkronkan versi rilis mereka dalam repositori terpisah mereka. Ke depan, CCCL akan terus dirilis di bawah versi semantik tunggal, dengan 2.2.0 menjadi rilis pertama dari repositori NVIDIA/CCCL.
Perubahan yang melanggar adalah perubahan untuk fungsionalitas yang didukung secara eksplisit antara versi yang dirilis yang akan mengharuskan pengguna melakukan pekerjaan untuk meningkatkan ke versi yang lebih baru.
Dalam batasnya, setiap perubahan memiliki potensi untuk menghancurkan seseorang di suatu tempat. Akibatnya, tidak semua kemungkinan perubahan sumber yang dianggap sebagai memecah perubahan pada API publik yang menjamin menabrak versi semantik utama.
Bagian di bawah ini menjelaskan detail perubahan perubahan pada API dan ABI CCCL.
API publik CCCL adalah keseluruhan dari fungsionalitas yang secara sengaja terpapar untuk memberikan kegunaan perpustakaan.
Dengan kata lain, API publik CCCL melampaui tanda tangan fungsi yang adil dan termasuk (tetapi tidak terbatas pada):
Selain itu, API publik CCCL tidak termasuk yang berikut:
_ atau __detail termasuk detail:: namespace atau makrodetail/ direktori atau sub-direktori daripadanyaSecara umum, tujuannya adalah untuk menghindari melanggar apa pun di API publik. Perubahan seperti itu dibuat hanya jika mereka menawarkan kinerja yang lebih baik kepada pengguna, API yang lebih mudah dipahami, dan/atau API yang lebih konsisten.
Setiap perubahan besar pada API publik akan membutuhkan menabrak nomor versi utama CCCL. Sesuai dengan kompatibilitas versi Minor CUDA, API Breaking Changes dan CCCL Mayor Version Bumps hanya akan terjadi bertepatan dengan rilis versi utama baru dari CUDA Toolkit.
Apa pun yang bukan bagian dari API publik dapat berubah kapan saja tanpa peringatan.
API publik dari semua komponen CCCL berbagi versi semantik terpadu MAJOR.MINOR.PATCH .
Hanya versi yang paling baru dirilis yang didukung. Sebagai aturan, fitur dan perbaikan bug tidak dibatalkan ke versi atau cabang yang dirilis sebelumnya.
Metode yang disukai untuk meminta versi adalah menggunakan CCCL_[MAJOR/MINOR/PATCH_]VERSION seperti yang dijelaskan di bawah ini. Untuk kompatibilitas ke belakang, definisi versi Thrust/Cub/LibCudacXX tersedia dan akan selalu konsisten dengan CCCL_VERSION . Perhatikan bahwa Dorong/Cub menggunakan skema MMMmmmpp sedangkan CCCL dan LIBCUDACXX menggunakan MMMmmmppp .
| CCCL | libcudacxx | Dorongan | ANAK | |
|---|---|---|---|---|
| Header | <cuda/version> | <cuda/std/version> | <thrust/version.h> | <cub/version.h> |
| Versi Utama | CCCL_MAJOR_VERSION | _LIBCUDACXX_CUDA_API_VERSION_MAJOR | THRUST_MAJOR_VERSION | CUB_MAJOR_VERSION |
| Versi Kecil | CCCL_MINOR_VERSION | _LIBCUDACXX_CUDA_API_VERSION_MINOR | THRUST_MINOR_VERSION | CUB_MINOR_VERSION |
| Versi patch/subminor | CCCL_PATCH_VERSION | _LIBCUDACXX_CUDA_API_VERSION_PATCH | THRUST_SUBMINOR_VERSION | CUB_SUBMINOR_VERSION |
| Versi gabungan | CCCL_VERSION (MMMmmmppp) | _LIBCUDACXX_CUDA_API_VERSION (MMMmmmppp) | THRUST_VERSION (MMMmmmpp) | CUB_VERSION (MMMmmmpp) |
Application Binary Interface (ABI) adalah seperangkat aturan untuk:
ABI perpustakaan termasuk, tetapi tidak terbatas pada:
Perubahan ABI Breaking adalah perubahan yang menghasilkan perubahan pada ABI suatu fungsi atau jenis API publik. Misalnya, menambahkan anggota data baru ke struct adalah perubahan ABI yang melanggar karena mengubah ukuran jenisnya.
Di CCCL, jaminan tentang ABI adalah sebagai berikut:
thrust:: dan cub:: Namespaces dapat memecahkan ABI kapan saja tanpa peringatan.thrust:: dan cub:: Simbol mencakup arsitektur CUDA yang digunakan untuk kompilasi. Karena itu, thrust:: atau cub:: simbol mungkin memiliki abi yang berbeda jika:-x cu ) vs sumber c ++ ( -x cpp )cuda:: namespace juga dapat memecahkan ABI kapan saja. Namun, cuda:: Simbol menanamkan nomor versi ABI yang bertambah setiap kali terjadi istirahat ABI. Beberapa versi ABI dapat didukung secara bersamaan, dan oleh karena itu pengguna memiliki opsi untuk kembali ke versi ABI sebelumnya. Untuk informasi lebih lanjut, lihat di sini.Siapa yang harus peduli dengan Abi?
Secara umum, pengguna CCCL hanya perlu khawatir tentang masalah ABI saat membangun atau menggunakan artefak biner (seperti perpustakaan bersama) yang API yang secara langsung atau tidak langsung mencakup jenis yang disediakan oleh CCCL.
Misalnya, pertimbangkan apakah libA.so dibangun menggunakan CCCL versi X dan API publiknya mencakup fungsi seperti:
void foo (cuda::std::optional< int >); Jika perpustakaan lain, libB.so , dikompilasi menggunakan CCCL versi Y dan menggunakan foo dari libA.so , maka ini bisa gagal jika ada istirahat ABI antara versi X dan Y . Berbeda dengan perubahan API yang melanggar, ABI Break biasanya tidak memerlukan perubahan kode dan hanya memerlukan kompilasi semuanya untuk menggunakan versi ABI yang sama.
Untuk mempelajari lebih lanjut tentang ABI dan mengapa itu penting, lihat apa itu ABI, dan apa yang harus dilakukan C ++ tentang itu?.
Seperti yang disebutkan di atas, tidak semua kemungkinan perubahan sumber daya merupakan perubahan pemecahan yang membutuhkan penambahan nomor versi utama API CCCL.
Pengguna didorong untuk mematuhi pedoman berikut untuk meminimalkan risiko gangguan dari secara tidak sengaja tergantung pada bagian CCCL yang bukan bagian dari API publik:
thrust:: , cub:: , nv:: , atau cuda:: namespaces kecuali sebuah pengecualian terkenal untuk simbol tertentu, misalnya, mengkhususkan cuda::std::iterator_traitsthrust:: , cub:: , cuda:: , atau nv:: namespaces.thrust:: , cub:: , cuda:: , atau nv:: namespaces._ , __ , atau dengan detail di mana saja atas namanya termasuk detail:: namespace atau makro#include file header yang menyatakan simbol itu. Dengan kata lain, jangan mengandalkan header yang secara implisit dimasukkan oleh header lain.Bagian dari bagian ini terinspirasi oleh pedoman kompatibilitas Abseil.
Kami akan melakukan yang terbaik untuk memberi tahu pengguna sebelum membuat perubahan besar pada API publik, ABI, atau memodifikasi platform dan kompiler yang didukung.
Sesuai yang sesuai, penyusutan akan datang dalam bentuk peringatan terprogram yang dapat dinonaktifkan.
Periode Pengececaan akan tergantung pada dampak perubahan, tetapi biasanya akan bertahan setidaknya 2 rilis versi minor.
Segera hadir!
Untuk ikhtisar terperinci dari pipa CI, lihat ci-oveview.md.
Proyek yang terkait dengan misi CCCL untuk membuat CUDA lebih menyenangkan:
Apakah proyek Anda menggunakan CCCL? Buka PR untuk menambahkan proyek Anda ke daftar ini!