กลับสู่คอร์สเรียน
AI021 Professional

คู่มือการเขียนโปรแกรม CUDA

แหล่งข้อมูลทางการและครอบคลุมสำหรับนักพัฒนาที่ต้องการเรียนรู้โมเดลการเขียนโปรแกรม CUDA และวิธีเขียนโค้ดประสิทธิภาพสูงที่ทำงานบนหน่วยประมวลผลกราฟิกของ NVIDIA คู่มือนี้ครอบคลุมสถาปัตยกรรมแพลตฟอร์ม ชุดคำสั่งการเขียนโปรแกรม คุณสมบัติฮาร์ดแวร์ขั้นสูง และข้อมูลเทคนิคต่างๆ

5.0
30.0h
1762 ผู้เรียน
1 การถูกใจ
ปัญญาประดิษฐ์
เริ่มเรียน

ภาพรวมคอร์สเรียน

📚 สรุปเนื้อหา

แหล่งข้อมูลทางการและครบถ้วนสำหรับนักพัฒนาที่ต้องการเรียนรู้โมเดลโปรแกรม CUDA และวิธีเขียนโค้ดประสิทธิภาพสูงที่ทำงานบนหน่วยประมวลผลกราฟิกของ NVIDIA คู่มือนี้ครอบคลุมสถาปัตยกรรมแพลตฟอร์ม หน้าที่การใช้งานของโปรแกรม การใช้คุณสมบัติฮาร์ดแวร์ขั้นสูง และรายละเอียดทางเทคนิค

เชี่ยวชาญศิลปะของการคำนวณแบบขนานด้วยคู่มือมาตรฐานในอุตสาหกรรมสำหรับ NVIDIA CUDA

ผู้เขียน: บริษัท NVIDIA Corporation

คำขอบคุณ: สิทธิ์การใช้งาน © 2007-2024 บริษัท NVIDIA Corporation และบริษัทในเครือ สงวนลิขสิทธิ์ทั้งหมด

🎯 เป้าหมายการเรียนรู้

  1. กำหนดบทบาทของโฮสต์ (โปรเซสเซอร์) และอุปกรณ์ (กราฟิกไพเพอร์) ภายในระบบไฮบริด
  2. อธิบายโมเดลโปรแกรมแบบ SIMT และโครงสร้างระดับชั้นของเธรด บล็อก และกริด
  3. แยกความแตกต่างระหว่างรหัส PTX (Parallel Thread Execution) และรหัสไบนารี (cubins) และอธิบายว่าการคอมไพล์แบบจุดเวลา (JIT) ช่วยให้เกิดความเข้ากันได้ได้อย่างไร
  4. พัฒนาและคอมไพล์เคอร์เนล CUDA: เขียนฟังก์ชัน global กำหนดการดำเนินการด้วยสัญลักษณ์สามชั้น และจัดการกระบวนการคอมไพล์โดยใช้ NVCC
  5. ปรับปรุงการจัดการหน่วยความจำและการเคลื่อนย้ายข้อมูล: แยกแยะโมเดลหน่วยความจำแบบรวม (Unified), แบบระบุชัด (Explicit), และแบบแมป (Mapped) และนำหน่วยความจำโฮสต์ที่ตรึงหน้า (page-locked) มาใช้เพื่อการส่งข้อมูลอย่างมีประสิทธิภาพ
  6. จัดการการดำเนินการแบบขนาน: ใช้สตรีม, อีเวนต์ และกลุ่มการทำงานร่วมกัน (Cooperative Groups) เพื่อจัดการงานแบบไม่ซิงโครนัส และทำให้การดำเนินการระหว่าง CPU กับ GPU ซิงโครนัสกันได้
  7. ดำเนินการคำนวณตัวชี้ที่ซับซ้อนและระบุจุดที่เป็นปัญหาในสถาปัตยกรรม (แบบ von Neumann ตรงกับแบบ Harvard)
  8. ใช้รูปแบบการดำเนินงานขั้นสูงของ CUDA เช่น การเรียกเคอร์เนลตามเงื่อนไขที่ควบคุมด้วยโปรแกรม และการถ่ายโอนข้อมูลแบบบัทช์ที่หลากหลาย
  9. ใช้คุณสมบัติเฉพาะฮาร์ดแวร์ เช่น ขอบเขตของเธรด (Thread Scopes), ตัวแทนแบบไม่ซิงโครนัส (Asynchronous Proxies), และพายเปล (Pipelines) เพื่อเพิ่มความสามารถในการทำงานพร้อมกันสูงสุด
  10. ตั้งค่าและปรับแต่งประสิทธิภาพของหน่วยความจำแบบรวม (Unified Memory) โดยใช้การดึงข้อมูลล่วงหน้า (prefetching), คำแนะนำการใช้งาน (usage hints), และการจัดการขนาดหน้า (page size management)

🔹 บทเรียนที่ 1: ความรู้พื้นฐานของ CUDA และภาพรวมสถาปัตยกรรม

ภาพรวม: บทเรียนนี้แนะนำแพลตฟอร์มการคำนวณแบบขนานของ CUDA และสถาปัตยกรรมฮาร์ดแวร์พื้นฐาน สำรวจวิธีที่ระบบไฮบริดใช้ทั้งโปรเซสเซอร์และกราฟิกไพเพอร์ โมเดลโปรแกรมแบบ SIMT (Single Instruction, Multiple Threads) และโครงสร้างระดับชั้นของเธรด บล็อก และกริด นอกจากนี้ยังครอบคลุมกระบวนการคอมไพล์ของ CUDA รวมถึงบทบาทของ PTX cubins และ fatbins ในการรับประกันความเข้ากันได้ทั้งในด้านไบนารีและอนาคต

ผลลัพธ์จากการเรียนรู้:

  • กำหนดบทบาทของโฮสต์ (โปรเซสเซอร์) และอุปกรณ์ (กราฟิกไพเพอร์) ภายในระบบไฮบริด
  • อธิบายโมเดลโปรแกรมแบบ SIMT และโครงสร้างระดับชั้นของเธรด บล็อก และกริด
  • แยกความแตกต่างระหว่างรหัส PTX (Parallel Thread Execution) และรหัสไบนารี (cubins) และอธิบายว่าการคอมไพล์แบบจุดเวลา (JIT) ช่วยให้เกิดความเข้ากันได้ได้อย่างไร

🔹 บทเรียนที่ 2: การเขียนโปรแกรมหลักของ GPU และการจัดการการดำเนินงาน

ภาพรวม: บทเรียนนี้ครอบคลุมด้านพื้นฐานและขั้นสูงของการเขียนโปรแกรมบน GPU โดยใช้ CUDA C++ ตั้งแต่การกำหนดเคอร์เนลเบื้องต้นและกระบวนการคอมไพล์ด้วย NVCC ไปจนถึงหัวข้อการจัดการการดำเนินงานขั้นสูง ได้แก่ การออกแบบเคอร์เนลแบบ SIMT ข้อจำกัดจากการเข้าถึงแบงก์หน่วยความจำแบบแชร์ (shared memory bank conflicts) และการดำเนินงานแบบไม่ซิงโครนัสโดยใช้สตรีมและอีเวนต์ นักเรียนจะเรียนรู้วิธีบาลานซ์โมเดลหน่วยความจำ (แบบรวมกับแบบระบุชัด) และเพิ่มประสิทธิภาพการใช้งานฮาร์ดแวร์เพื่อการคำนวณประสิทธิภาพสูง

ผลลัพธ์จากการเรียนรู้:

  • พัฒนาและคอมไพล์เคอร์เนล CUDA: เขียนฟังก์ชัน global กำหนดการดำเนินการด้วยสัญลักษณ์สามชั้น และจัดการกระบวนการคอมไพล์โดยใช้ NVCC
  • ปรับปรุงการจัดการหน่วยความจำและการเคลื่อนย้ายข้อมูล: แยกแยะโมเดลหน่วยความจำแบบรวม (Unified), แบบระบุชัด (Explicit), และแบบแมป (Mapped) และนำหน่วยความจำโฮสต์ที่ตรึงหน้า (page-locked) มาใช้เพื่อการส่งข้อมูลอย่างมีประสิทธิภาพ
  • จัดการการดำเนินการแบบขนาน: ใช้สตรีม, อีเวนต์ และกลุ่มการทำงานร่วมกัน (Cooperative Groups) เพื่อจัดการงานแบบไม่ซิงโครนัส และทำให้การดำเนินการระหว่าง CPU กับ GPU ซิงโครนัสกันได้

🔹 บทเรียนที่ 3: ตรรกะหน่วยความจำขั้นสูงและระบบหลายหน่วยประมวลผลกราฟิก

ภาพรวม: บทเรียนนี้สำรวจการเปลี่ยนผ่านจากสถาปัตยกรรมหน่วยความจำพื้นฐานและตรรกะตัวชี้ไปสู่เทคนิคการเร่งความเร็วของ GPU ขั้นสูง ครอบคลุมโมเดลการดำเนินงานระดับฮาร์ดแวร์ (SIMT, Independent Thread Scheduling) กลไกการซิงโครนัสที่ซับซ้อน (อีเวนต์หยุดแบบไม่ซิงโครนัส, อะตอมิกแบบจำกัดขอบเขต) และการประสานงานระบบหลายหน่วยประมวลผลกราฟิกโดยใช้ทั้ง API แบบเรนไทม์และไดรเวอร์

ผลลัพธ์จากการเรียนรู้:

  • ดำเนินการคำนวณตัวชี้ที่ซับซ้อนและระบุจุดที่เป็นปัญหาในสถาปัตยกรรม (แบบ von Neumann ตรงกับแบบ Harvard)
  • ใช้รูปแบบการดำเนินงานขั้นสูงของ CUDA เช่น การเรียกเคอร์เนลตามเงื่อนไขที่ควบคุมด้วยโปรแกรม และการถ่ายโอนข้อมูลแบบบัทช์ที่หลากหลาย
  • ใช้คุณสมบัติเฉพาะฮาร์ดแวร์ เช่น ขอบเขตของเธรด (Thread Scopes), ตัวแทนแบบไม่ซิงโครนัส (Asynchronous Proxies), และพายเปล (Pipelines) เพื่อเพิ่มความสามารถในการทำงานพร้อมกันสูงสุด

🔹 บทเรียนที่ 4: การปรับปรุงประสิทธิภาพ กราฟ และเครื่องเร่งฮาร์ดแวร์

ภาพรวม: บทเรียนนี้ครอบคลุมเทคนิคการเขียนโปรแกรม CUDA ประสิทธิภาพสูง โดยเน้นการปรับปรุงการเคลื่อนย้ายข้อมูลและการไหลของคำสั่ง สำรวจการเปลี่ยนแปลงจากแบบการดำเนินงานแบบสตรีมไปสู่ CUDA Graphs แบบคงที่ การควบคุมละเอียดของหน่วยความจำแบบรวมผ่านการดึงข้อมูลล่วงหน้าและคำแนะนำ รวมถึงการใช้เครื่องเร่งฮาร์ดแวร์เฉพาะ เช่น ตัวเร่งหน่วยความจำเทนเซอร์ (Tensor Memory Accelerator - TMA) และการคงอยู่ของแคชระดับ 2 (L2 Cache persistence) นอกจากนี้ยังอธิบายรูปแบบการซิงโครนัสขั้นสูง การแบ่งทรัพยากรผ่าน Green Contexts และการใช้งานข้ามไลบรารี (cross-API interoperability) สำหรับการคำนวณแบบไฮบริดสมัยใหม่

ผลลัพธ์จากการเรียนรู้:

  • ตั้งค่าและปรับแต่งประสิทธิภาพของหน่วยความจำแบบรวม (Unified Memory) โดยใช้การดึงข้อมูลล่วงหน้า (prefetching), คำแนะนำการใช้งาน (usage hints), และการจัดการขนาดหน้า (page size management)
  • สร้าง ปรับปรุง และดำเนินการ CUDA Graphs รวมถึงการใช้เมมโมรีน็อดและคำสั่งเริ่มต้นที่อุปกรณ์
  • ใช้การซิงโครนัสขั้นสูงโดยใช้อีเวนต์หยุดแบบไม่ซิงโครนัสและรูปแบบผู้ผลิต-ผู้บริโภค (Producer-Consumer pattern)

🔹 บทเรียนที่ 5: ข้อมูลอ้างอิงทางเทคนิคและขยายภาษา

ภาพรวม: บทเรียนนี้นำเสนอการลงลึกเชิงเทคนิคเกี่ยวกับข้อมูลอ้างอิงของโมเดลโปรแกรม CUDA และการขยายภาษา C++ ครอบคลุมการติดต่อระหว่างซอฟต์แวร์และฮาร์ดแวร์ผ่านความสามารถในการคำนวณ (compute capabilities) ตัวแปรสภาพแวดล้อมสำหรับการควบคุมเวลาทำงาน และข้อกำหนดเฉพาะด้านไวยากรณ์สำหรับการเขียนโค้ดอุปกรณ์ประสิทธิภาพสูงโดยใช้มาตรฐาน C++ สมัยใหม่ กลุ่มการทำงานร่วมกัน และอินทรินซีกของฮาร์ดแวร์เฉพาะ

ผลลัพธ์จากการเรียนรู้:

  • ระบุข้อจำกัดของฮาร์ดแวร์และชุดคุณสมบัติที่มีอยู่ตามรุ่นของความสามารถในการคำนวณ (GPU Compute Capability)
  • ตั้งค่าสภาพแวดล้อมการดำเนินงานของ CUDA และการคอมไพล์แบบจุดเวลา (JIT) โดยใช้ตัวแปรสภาพแวดล้อมระดับระบบ
  • ใช้การขยายภาษา C++ (Annotations, lambdas, templates) โดยปฏิบัติตามข้อจำกัดด้านอุปกรณ์