| ตัวอย่าง | Godbolt | เอกสาร |
|---|
Libcu ++, ไลบรารีมาตรฐาน Nvidia C ++ เป็นไลบรารีมาตรฐาน C ++ สำหรับระบบทั้งหมดของคุณ มันมีการใช้งานที่แตกต่างกันของไลบรารีมาตรฐาน C ++ ที่สามารถใช้ในและระหว่างรหัส CPU และ GPU
หากคุณรู้วิธีใช้ไลบรารีมาตรฐาน C ++ ของคุณคุณจะรู้วิธีใช้ LIBCU ++ สิ่งที่คุณต้องทำคือเพิ่ม cuda/std/ ไปยังจุดเริ่มต้นของห้องสมุดมาตรฐานของคุณรวมถึงและ cuda:: ก่อนการใช้งาน std:: :::
# include < cuda/std/atomic >
cuda::std::atomic< int > x;ไลบรารีมาตรฐาน NVIDIA C ++ เป็นโครงการโอเพ่นซอร์ส มันมีอยู่ใน GitHub และรวมอยู่ในชุดเครื่องมือ Nvidia HPC SDK และ CUDA หากคุณมีหนึ่งใน SDK ที่ติดตั้งไม่จำเป็นต้องใช้การติดตั้งเพิ่มเติมหรือธงคอมไพเลอร์เพื่อใช้ LIBCU ++
cuda:: และ cuda::std::เมื่อใช้กับ NVCC สิ่งอำนวยความสะดวกห้องสมุดมาตรฐาน NVIDIA C ++ อาศัยอยู่ในลำดับชั้นส่วนหัวและเนมสเปซที่มีโครงสร้างเดียวกับ แต่แตกต่างจากไลบรารีมาตรฐานของโฮสต์คอมไพเลอร์:
std:: / <*> : เมื่อใช้ NVCC นี่คือไลบรารีมาตรฐานของโฮสต์คอมไพเลอร์ของคุณที่ทำงานในรหัส __host__ เท่านั้นแม้ว่าคุณสามารถใช้ธง --expt-relaxed-constexpr เพื่อใช้ฟังก์ชั่น constexpr ใด ๆ ในรหัส __device__ ด้วย NVCC, LIBCU ++ ไม่ได้แทนที่หรือแทรกแซงไลบรารีมาตรฐานของโฮสต์คอมไพเลอร์cuda::std:: / <cuda/std/*> : การติดตั้งสิ่งอำนวยความสะดวกอย่างเคร่งครัดจากห้องสมุดมาตรฐานที่ทำงานในรหัส __host__ __device__cuda:: / <cuda/*> : การขยายส่วนขยายกับไลบรารีมาตรฐานที่ทำงานในรหัส __host__ __device__cuda::device / <cuda/device/*> : การขยายส่วนขยายไปยังไลบรารีมาตรฐานที่ทำงานเฉพาะในรหัส __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; ไลบรารีมาตรฐาน NVIDIA C ++ ทำงานได้ทั่ว Codebase ทั้งหมดของคุณทั้งในและระหว่างรหัสโฮสต์และอุปกรณ์ LIBCU ++ เป็นไลบรารีมาตรฐาน C ++ สำหรับระบบทั้งหมดของคุณไม่ใช่แค่ CPU หรือ GPU ของคุณ ทุกอย่างใน cuda:: คือ __host__ __device__
สิ่งอำนวยความสะดวก LIBCU ++ ได้รับการออกแบบให้ส่งผ่านระหว่างโฮสต์และรหัสอุปกรณ์ วัตถุ LIBCU ++ ใด ๆ ที่สามารถคัดลอกได้หรือสามารถเคลื่อนย้ายได้สามารถคัดลอกหรือย้ายระหว่างโฮสต์และรหัสอุปกรณ์
วัตถุการซิงโครไนซ์ทำงานข้ามโฮสต์และรหัสอุปกรณ์และสามารถใช้เพื่อซิงโครไนซ์ระหว่างโฮสต์และเธรดอุปกรณ์ อย่างไรก็ตามมีข้อ จำกัด บางประการที่ต้องระวัง โปรดดูส่วนการซิงโครไนซ์ดั้งเดิมสำหรับรายละเอียดเพิ่มเติม
cuda::device::สิ่งอำนวยความสะดวก LIBCU ++ จำนวนน้อยทำงานเฉพาะในรหัสอุปกรณ์โดยปกติแล้วเนื่องจากไม่มีการใช้งานที่สมเหตุสมผลในรหัสโฮสต์
สิ่งอำนวยความสะดวกดังกล่าวอาศัยอยู่ใน cuda::device::
วันนี้ไลบรารีมาตรฐาน NVIDIA C ++ มอบชุดย่อยที่มีลำดับความสำคัญสูงของไลบรารีมาตรฐาน C ++ ในวันนี้และแต่ละรุ่นจะเพิ่มชุดคุณสมบัติ แต่มันเป็นชุดย่อย วันนี้ไม่ใช่ทุกอย่าง ส่วน API มาตรฐานแสดงรายการสิ่งอำนวยความสะดวกที่มีอยู่และการเปิดตัวที่พวกเขาได้รับการแนะนำครั้งแรก
ไลบรารีมาตรฐาน NVIDIA C ++ เป็นโครงการโอเพ่นซอร์สที่พัฒนาขึ้นบน GitHub มันเป็นตัวแปรของ LIBC ++ ของ LLVM LIBCU ++ มีการแจกจ่ายภายใต้ใบอนุญาต Apache v2.0 พร้อมข้อยกเว้น LLVM
ไลบรารีมาตรฐาน NVIDIA C ++ มีจุดมุ่งหมายที่จะดำเนินการตามมาตรฐาน C ++, ISO/IEC คือ 14882, ข้อ 16 ถึง 32
ห้องสมุดมาตรฐาน NVIDIA C ++ ไม่ได้รักษาเสถียรภาพ ABI ระยะยาว ความมั่นคงในระยะยาวของ ABI จะป้องกันไม่ให้เราแก้ไขข้อผิดพลาดและให้ประสิทธิภาพที่ดีที่สุดในชั้นเรียน ดังนั้นเราจึงไม่ทำสัญญาดังกล่าว
การเปิดตัวชุดเครื่องมือ CUDA ที่สำคัญทุกครั้ง ABI จะถูกทำลาย วงจรชีวิตของรุ่น ABI นั้นประมาณหนึ่งปี การสนับสนุนระยะยาวสำหรับรุ่น ABI สิ้นสุดลงหลังจากประมาณสองปี โปรดดูส่วนการกำหนดเวอร์ชันสำหรับรายละเอียดเพิ่มเติม
เราขอแนะนำให้คุณรวบรวมรหัสและการพึ่งพาของคุณด้วย Nvidia SDKs ล่าสุดและใช้ไลบรารีมาตรฐาน Nvidia C ++ ล่าสุด ABI อยู่ที่หัว