คู่มือการเขียนโปรแกรม AMD HIP
คู่มือทางเทคนิคที่ครอบคลุมสำหรับการใช้งาน Heterogeneous-compute Interface for Portability (HIP) โดยให้ API รันไทม์แบบ C++ และภาษาเคอร์เนลที่ช่วยให้นักพัฒนาสามารถสร้างแอปพลิเคชันที่ใช้งานได้กับ GPU ของ AMD และ NVIDIA จากโค้ดเดียว คู่มือนี้ครอบคลุมหัวข้อตั้งแต่การติดตั้ง การตั้งค่าสภาพแวดล้อม โมเดลการเขียนโปรแกรม การจัดสรรหน่วยความจำ และเครื่องมือในการย้ายโค้ด CUDA ไปยัง HIP
บทเรียน
Lesson
ภาพรวมคอร์สเรียน
📚 สรุปเนื้อหา
คู่มือเทคนิคที่ครอบคลุมสำหรับ Heterogeneous-compute Interface for Portability (HIP) ซึ่งให้ API รันไทม์แบบ C++ และภาษาเคอร์เนลที่ช่วยให้นักพัฒนาสามารถสร้างแอปพลิเคชันที่สามารถใช้งานได้กับ GPU ของ AMD และ NVIDIA จากโค้ดเดียวเท่านั้น คู่มือนี้ครอบคลุมหัวข้อต่างๆ เช่น การติดตั้ง การตั้งค่าสภาพแวดล้อม โมเดลการเขียนโปรแกรม การจัดสรรหน่วยความจำ และเครื่องมือในการย้ายโค้ด CUDA ไปยัง HIP
เชี่ยวชาญการเขียนโปรแกรม GPU ที่สามารถนำพาได้: โค้ดเดียวกันใช้ได้ทั้งแพลตฟอร์ม AMD และ NVIDIA
ผู้เขียน: Advanced Micro Devices, Inc. (AMD)
คำขอบคุณ: AMD, โลโก้ลูกศรของ AMD, AMD Instinct, Radeon, ROCm และรูปแบบการรวมกันของพวกมัน เป็นเครื่องหมายการค้าของ Advanced Micro Devices, Inc. Linux เป็นเครื่องหมายการค้าจดทะเบียนของ Linus Torvalds. PCIe เป็นเครื่องหมายการค้าจดทะเบียนของ PCI-SIG Corporation
🎯 เป้าหมายการเรียนรู้
- นิยามคุณสมบัติหลักและประโยชน์ที่สำคัญของเฟรมเวิร์ก HIP
- แสดงวิธีการเข้าถึงและสอบถามสภาพแวดล้อม HIP โดยใช้เครื่องมือระบบ
- อธิบายความสัมพันธ์ทางสถาปัตยกรรมระหว่างความสามารถในการนำพาของ HIP กับเทคโนโลยีคอมไพเลอร์
- ดำเนินการติดตั้งเฉพาะแพลตฟอร์มสำหรับสภาพแวดล้อม NVIDIA และ AMD
- ประสานกระบวนการสร้างหลายรีพอซิทอรีเพื่อคอมไพล์ HIP จากแหล่งรหัส
- ตรวจสอบการติดตั้งที่สำเร็จโดยใช้เครื่องมือตรวจสอบและการกำหนดค่าระบบ
- ตั้งค่าและจัดการหน่วยความจำ GPU โดยใช้การจัดสรรแบบ HIP ควบคุมความสอดคล้อง และการมองเห็นหน่วยความจำโฮสต์แบบ zero-copy
- พัฒนาเคอร์เนลประสิทธิภาพสูงโดยใช้คุณสมบัติเฉพาะของ HIP เช่น คุณสมบัติฟังก์ชัน/ตัวแปร ประเภทเวกเตอร์ และเครื่องมือสังเกตสถานะ
- นำไปใช้ในอัลกอริธึมขนานขั้นสูงโดยใช้ฟังก์ชันระดับ warp shuffle, vote, ballot และกลุ่มการทำงานร่วมกัน
- ใช้เครื่องมือ HIPIFY เพื่อแปลงโค้ด CUDA ไปเป็น HIP โดยอัตโนมัติ และจัดการการเปลี่ยนแปลงโปรเจกต์แบบในสถานที่
🔹 บทเรียนที่ 1: บทนำเกี่ยวกับความยืดหยุ่นของ HIP และสถาปัตยกรรม
ภาพรวม: บทเรียนนี้ครอบคลุมประเด็นพื้นฐานของ Heterogeneous-compute Interface for Portability (HIP) ซึ่งเน้นคุณสมบัติหลักที่กำหนดตัวตนของ HIP วิธีการเข้าถึงสภาพแวดล้อม HIP หลัก และเทคโนโลยีคอมไพเลอร์ที่อยู่เบื้องหลังซึ่งทำให้การนำพาไปยังสถาปัตยกรรม GPU ต่าง ๆ (ทั้ง AMD และ NVIDIA) ทำได้อย่างราบรื่น
ผลลัพธ์การเรียนรู้:
- นิยามคุณสมบัติหลักและประโยชน์ที่สำคัญของเฟรมเวิร์ก HIP
- แสดงวิธีการเข้าถึงและสอบถามสภาพแวดล้อม HIP โดยใช้เครื่องมือระบบ
- อธิบายความสัมพันธ์ทางสถาปัตยกรรมระหว่างความสามารถในการนำพาของ HIP กับเทคโนโลยีคอมไพเลอร์
🔹 บทเรียนที่ 2: การติดตั้งและตรวจสอบสภาพแวดล้อม HIP
ภาพรวม: บทเรียนนี้ให้แนวทางทางเทคนิคในการตั้งค่าสภาพแวดล้อม HIP (Heterogeneous-compute Interface for Portability) บนแพลตฟอร์มฮาร์ดแวร์ต่าง ๆ โดยครอบคลุมขั้นตอนการติดตั้งเฉพาะสำหรับแบ็กเอนด์ของ AMD และ NVIDIA กระบวนการซับซ้อนในการสร้างเวลาทำงานของ HIP จากแหล่งรหัส และขั้นตอนตรวจสอบสุดท้ายเพื่อยืนยันความพร้อมของระบบสำหรับการพัฒนา GPU
ผลลัพธ์การเรียนรู้:
- ดำเนินการติดตั้งเฉพาะแพลตฟอร์มสำหรับสภาพแวดล้อม NVIDIA และ AMD
- ประสานกระบวนการสร้างหลายรีพอซิทอรีเพื่อคอมไพล์ HIP จากแหล่งรหัส
- ตรวจสอบการติดตั้งที่สำเร็จโดยใช้เครื่องมือตรวจสอบและการกำหนดค่าระบบ
🔹 บทเรียนที่ 3: โมเดลการเขียนโปรแกรมและลึกซึ้งเกี่ยวกับ API ของ HIP
ภาพรวม: บทเรียนนี้นำเสนอการสำรวจอย่างละเอียดเกี่ยวกับโมเดลการเขียนโปรแกรมของ Heterogeneous-Compute Interface for Portability (HIP) ครอบคลุม API พื้นฐานสำหรับการจัดการหน่วยความจำและการเรียกใช้เคอร์เนล ความละเอียดอ่อนของภาษาเคอร์เนล HIP (รวมถึงคุณสมบัติและตัวแปรภายใน), และคุณสมบัติขั้นสูง เช่น เครื่องมือระดับ warp, กลุ่มการทำงานร่วมกัน และฟังก์ชันคณิตศาสตร์เฉพาะ
ผลลัพธ์การเรียนรู้:
- ตั้งค่าและจัดการหน่วยความจำ GPU โดยใช้การจัดสรรแบบ HIP ควบคุมความสอดคล้อง และการมองเห็นหน่วยความจำโฮสต์แบบ zero-copy
- พัฒนาเคอร์เนลประสิทธิภาพสูงโดยใช้คุณสมบัติเฉพาะของ HIP เช่น คุณสมบัติฟังก์ชัน/ตัวแปร ประเภทเวกเตอร์ และเครื่องมือสังเกตสถานะ
- นำไปใช้ในอัลกอริธึมขนานขั้นสูงโดยใช้ฟังก์ชันระดับ warp shuffle, vote, ballot และกลุ่มการทำงานร่วมกัน
🔹 บทเรียนที่ 4: การเปลี่ยนผ่านและย้ายแอปพลิเคชัน CUDA ไปยัง HIP
ภาพรวม: บทเรียนนี้ครอบคลุมกระบวนการอย่างเป็นระบบในการย้ายโค้ดต้นฉบับจาก CUDA ไปยังเฟรมเวิร์ก HIP (Heterogeneous-Compute Interface for Portability) รายละเอียดการใช้เครื่องมืออัตโนมัติเช่น HIPIFY กลยุทธ์การเปลี่ยนแปลงโปรเจกต์ การระบุพฤติกรรมของคอมไพเลอร์เฉพาะแพลตฟอร์ม (HIP-Clang เทียบกับ NVIDIA) และการจัดการความแตกต่างด้านสถาปัตยกรรม
ผลลัพธ์การเรียนรู้:
- ใช้เครื่องมือ HIPIFY เพื่อแปลงโค้ด CUDA เป็น HIP โดยอัตโนมัติ และจัดการการเปลี่ยนแปลงโปรเจกต์แบบในสถานที่
- แยกแยะระหว่างแพลตฟอร์มเป้าหมายของ AMD และ NVIDIA รวมถึงคอมไพเลอร์โดยใช้มาโครก่อนประมวลผลและคำถามสภาพแวดล้อม
- ตรวจสอบคุณสมบัติสถาปัตยกรรม (HIP_ARCH) และนำไปใช้แก้ไขปัญหาสำหรับฟังก์ชัน CUDA ที่เฉพาะเจาะจง เช่น
memcpyToSymbol