NVIDIA CCCL 3.1 เพิ่มการควบคุมความแน่นอนของจุดทศนิยมสำหรับการคำนวณ GPU
Caroline Bishop 5 มี.ค. 2026 17:46
NVIDIA CCCL 3.1 แนะนำระดับความแน่นอนสามระดับสำหรับการลดแบบขนาน ช่วยให้นักพัฒนาสามารถแลกเปลี่ยนประสิทธิภาพกับความสามารถในการทำซ้ำในการคำนวณ GPU
NVIDIA ได้เปิดตัวการควบคุมความแน่นอนใน CUDA Core Compute Libraries (CCCL) 3.1 เพื่อแก้ไขปัญหาที่มีมาอย่างยาวนานในการคำนวณ GPU แบบขนาน: การได้รับผลลัพธ์ที่เหมือนกันจากการดำเนินการจุดทศนิยมในหลายรอบและฮาร์ดแวร์ที่แตกต่างกัน
การอัปเดตนี้แนะนำระดับความแน่นอนที่กำหนดค่าได้สามระดับผ่าน API แบบเฟสเดียวของ CUB ให้นักพัฒนาสามารถควบคุมอย่างชัดเจนเกี่ยวกับการแลกเปลี่ยนระหว่างความสามารถในการทำซ้ำและประสิทธิภาพที่เป็นปัญหาในแอปพลิケชัน GPU มาหลายปี
เหตุใดความแน่นอนของจุดทศนิยมจึงสำคัญ
นี่คือปัญหา: การบวกจุดทศนิยมไม่ได้มีคุณสมบัติการเปลี่ยนหมู่อย่างเคร่งครัด เนื่องจากการปัดเศษที่ความแม่นยำจำกัด (a + b) + c ไม่เท่ากับ a + (b + c) เสมอไป เมื่อเธรดแบบขนานรวมค่าในลำดับที่คาดเดาไม่ได้ คุณจะได้ผลลัพธ์ที่แตกต่างกันเล็กน้อยในแต่ละรอบ สำหรับแอปพลิケชันหลายประเภท—การสร้างแบบจำลองทางการเงิน การจำลองทางวิทยาศาสตร์ การคำนวณบล็อกเชน การฝึกอบรมการเรียนรู้ของเครื่อง—ความไม่สอดคล้องกันนี้สร้างปัญหาจริง
API ใหม่ให้นักพัฒนาระบุได้อย่างแม่นยำว่าพวกเขาต้องการความสามารถในการทำซ้ำมากเพียงใดผ่านสามโหมด:
ความแน่นอนที่ไม่รับประกัน ให้ความสำคัญกับความเร็วสูงสุด ใช้การดำเนินการอะตอมิกที่ดำเนินการตามลำดับใดก็ตามที่เธรดทำงาน ทำการลดให้เสร็จสมบูรณ์ในการเปิด kernel ครั้งเดียว ผลลัพธ์อาจแตกต่างกันเล็กน้อยระหว่างรอบ แต่สำหรับแอปพลิケชันที่คำตอบโดยประมาณเพียงพอ การเพิ่มประสิทธิภาพมีนัยสำคัญ—โดยเฉพาะอย่างยิ่งในอาร์เรย์อินพุตที่เล็กกว่าซึ่ง overhead ของการเปิด kernel ครอบงำ
ความแน่นอนแบบรอบต่อรอบ (ค่าเริ่มต้น) รับประกันผลลัพธ์ที่เหมือนกันเมื่อใช้อินพุต การกำหนดค่า kernel และ GPU เดียวกัน NVIDIA บรรลุสิ่งนี้โดยการจัดโครงสร้างการลดเป็นต้นไม้ลำดับชั้นคงที่แทนที่จะพึ่งพาอะตอมิก องค์ประกอบจะรวมกันภายในเธรดก่อน จากนั้นข้ามวาร์ปผ่านคำสั่ง shuffle จากนั้นข้ามบล็อกโดยใช้หน่วยความจำที่ใช้ร่วมกัน โดยมี kernel ที่สองรวมผลลัพธ์สุดท้าย
ความแน่นอนแบบ GPU ต่อ GPU ให้ความสามารถในการทำซ้ำที่เข้มงวดที่สุด รับประกันผลลัพธ์ที่เหมือนกันในทุก GPU ของ NVIDIA การใช้งานใช้ Reproducible Floating-point Accumulator (RFA) ที่จัดกลุ่มค่าอินพุตเป็นช่วงเอกซ์โพเนนต์คงที่—ค่าเริ่มต้นเป็นสามช่อง—เพื่อตอบโต้ปัญหาการไม่มีคุณสมบัติการเปลี่ยนหมู่ที่เกิดขึ้นเมื่อบวกตัวเลขที่มีขนาดแตกต่างกัน
การแลกเปลี่ยนประสิทธิภาพ
เกณฑ์มาตรฐานของ NVIDIA บน GPU H200 วัดต้นทุนของความสามารถในการทำซ้ำ ความแน่นอนแบบ GPU ต่อ GPU เพิ่มเวลาการดำเนินการ 20% ถึง 30% สำหรับขนาดปัญหาขนาดใหญ่เมื่อเทียบกับโหมดที่ผ่อนคลาย ความแน่นอนแบบรอบต่อรอบอยู่ระหว่างสองสุดขั้ว
การกำหนดค่า RFA สามช่องเสนอสิ่งที่ NVIDIA เรียกว่า "ค่าเริ่มต้นที่เหมาะสมที่สุด" ที่สมดุลความแม่นยำและความเร็ว ช่องที่มากขึ้นปรับปรุงความแม่นยำเชิงตัวเลขแต่เพิ่มการรวมระหว่างกลางที่ทำให้การดำเนินการช้าลง
รายละเอียดการใช้งาน
นักพัฒนาเข้าถึงการควบคุมใหม่ผ่าน cuda::execution::require() ซึ่งสร้างอ็อบเจ็กต์สภาพแวดล้อมการดำเนินการที่ส่งไปยังฟังก์ชันการลด ไวยากรณ์ตรงไปตรงมา—ตั้งค่าความแน่นอนเป็น not_guaranteed, run_to_run หรือ gpu_to_gpu ขึ้นอยู่กับความต้องการ
คุณสมบัตินี้ใช้งานได้เฉพาะกับ API แบบเฟสเดียวของ CUB เท่านั้น API แบบสองเฟสที่เก่ากว่าไม่ยอมรับสภาพแวดล้อมการดำเนินการ
ผลกระทบที่กว้างขึ้น
ความสามารถในการทำซ้ำจุดทศนิยมข้ามแพลตฟอร์มเป็นความท้าทายที่เป็นที่รู้จักในการคำนวณประสิทธิภาพสูงและแอปพลิ케ชันบล็อกเชน ซึ่งคอมไพเลอร์ที่แตกต่างกัน แฟล็กการเพิ่มประสิทธิภาพ และสถาปัตยกรรมฮาร์ดแวร์สามารถสร้างผลลัพธ์ที่แตกต่างกันจากการดำเนินการที่เหมือนกันทางคณิตศาสตร์ แนวทางของ NVIDIA ในการเปิดเผยความแน่นอนอย่างชัดเจนเป็นพารามิเตอร์ที่กำหนดค่าได้แทนที่จะซ่อนรายละเอียดการใช้งาน แสดงถึงวิธีแก้ปัญหาที่เป็นจริง
บริษัทวางแผนที่จะขยายการควบคุมความแน่นอนนอกเหนือจากการลดไปยังพื้นฐานแบบขนานเพิ่มเติม นักพัฒนาสามารถติดตามความคืบหน้าและขออัลกอริทึมเฉพาะผ่าน GitHub repository ของ NVIDIA ซึ่งมีปัญหาที่เปิดอยู่ติดตามแผนงานความแน่นอนที่ขยาย
แหล่งที่มาของภาพ: Shutterstock- nvidia
- gpu computing
- cccl
- floating-point determinism
- cuda
