| Contoh | Godbolt | Dokumentasi |
|---|
Libcu ++, perpustakaan standar NVIDIA C ++, adalah perpustakaan standar C ++ untuk seluruh sistem Anda. Ini memberikan implementasi heterogen dari perpustakaan standar C ++ yang dapat digunakan di dan antara kode CPU dan GPU.
Jika Anda tahu cara menggunakan perpustakaan standar C ++ Anda, maka Anda tahu cara menggunakan libcu ++. Yang harus Anda lakukan adalah menambahkan cuda/std/ ke awal perpustakaan standar Anda termasuk dan cuda:: sebelum penggunaan std::
# include < cuda/std/atomic >
cuda::std::atomic< int > x;Perpustakaan standar NVIDIA C ++ adalah proyek open source; Ini tersedia di GitHub dan termasuk dalam NVIDIA HPC SDK dan CUDA Toolkit. Jika Anda memiliki salah satu dari SDK yang diinstal, tidak ada instalasi tambahan atau bendera kompiler yang diperlukan untuk menggunakan libcu ++.
cuda:: dan cuda::std::Saat digunakan dengan NVCC, fasilitas perpustakaan standar NVIDIA C ++ hidup dalam hierarki header mereka sendiri dan namespace dengan struktur yang sama seperti, tetapi berbeda dari, perpustakaan standar kompiler host:
std:: / <*> : Saat menggunakan NVCC, ini adalah pustaka standar kompiler host Anda yang hanya berfungsi dalam kode __host__ , meskipun Anda dapat menggunakan flag --expt-relaxed-constexpr untuk menggunakan fungsi constexpr dalam kode __device__ . Dengan NVCC, LibCU ++ tidak menggantikan atau mengganggu pustaka standar host Compiler.cuda::std:: / <cuda/std/*> : implementasi fasilitas yang sangat sesuai dari perpustakaan standar yang berfungsi dalam kode __host__ __device__ .cuda:: / <cuda/*> : Menyesuaikan ekstensi ke perpustakaan standar yang berfungsi dalam kode __host__ __device__ .cuda::device / <cuda/device/*> : menyesuaikan ekstensi ke pustaka standar yang hanya berfungsi dalam kode __device__ . // Standard C++, __host__ only.
# include < atomic >
std::atomic< int > x;
// CUDA C++, __host__ __device__.
// Strictly conforming to the C++ Standard.
# include < cuda/std/atomic >
cuda::std::atomic< int > x;
// CUDA C++, __host__ __device__.
// Conforming extensions to the C++ Standard.
# include < cuda/atomic >
cuda::atomic< int , cuda::thread_scope_block> x; Perpustakaan standar NVIDIA C ++ bekerja di seluruh basis kode Anda, baik di maupun di seluruh kode host dan perangkat. Libcu ++ adalah perpustakaan standar C ++ untuk seluruh sistem Anda, bukan hanya CPU atau GPU Anda. Segala sesuatu di cuda:: adalah __host__ __device__ .
Fasilitas LibCU ++ dirancang untuk dilewatkan antara host dan kode perangkat. Kecuali dinyatakan sebaliknya, objek LibCU ++ apa pun yang dapat disalin atau dipindahkan dapat disalin atau dipindahkan antara host dan kode perangkat.
Objek sinkronisasi bekerja di seluruh host dan kode perangkat, dan dapat digunakan untuk menyinkronkan antara utas host dan perangkat. Namun, ada beberapa batasan yang harus diperhatikan; Silakan lihat bagian Sinkronisasi Primitif untuk lebih jelasnya.
cuda::device::Sejumlah kecil fasilitas libcu ++ hanya berfungsi dalam kode perangkat, biasanya karena tidak ada implementasi yang masuk akal dalam kode host.
Fasilitas seperti itu hidup di cuda::device:: .
Saat ini, perpustakaan standar NVIDIA C ++ memberikan subset prioritas tinggi dari perpustakaan standar C ++ saat ini, dan setiap rilis meningkatkan set fitur. Tapi itu adalah subset; Tidak semuanya tersedia saat ini. Bagian API standar mencantumkan fasilitas yang tersedia dan rilis yang pertama kali diperkenalkan.
Perpustakaan standar NVIDIA C ++ adalah proyek open source yang dikembangkan di GitHub. Ini adalah varian Nvidia dari LIBC ++ LLVM. Libcu ++ didistribusikan di bawah Lisensi Apache v2.0 dengan pengecualian LLVM.
Perpustakaan standar NVIDIA C ++ bertujuan untuk menjadi implementasi yang sesuai dari standar C ++, ISO/IEC adalah 14882, Klausul 16 hingga 32.
Perpustakaan standar NVIDIA C ++ tidak mempertahankan stabilitas ABI jangka panjang. Stabilitas ABI jangka panjang yang menjanjikan akan mencegah kita memperbaiki kesalahan dan memberikan kinerja terbaik dalam kelas. Jadi, kami tidak membuat janji seperti itu.
Setiap rilis toolkit CUDA utama, ABI akan rusak. Siklus hidup versi ABI adalah sekitar satu tahun. Dukungan jangka panjang untuk versi ABI berakhir setelah sekitar dua tahun. Silakan lihat bagian versi untuk lebih jelasnya.
Kami menyarankan Anda selalu mengkompilasi ulang kode dan dependensi Anda dengan SDK NVIDIA terbaru dan menggunakan NVIDIA C ++ Standard Library ABI terbaru. Hidup di kepala.