การเขียนโปรแกรมโปรเซสเซอร์แบบขนานขนาดใหญ่: แนวทางปฏิบัติจริง
หลักสูตรนี้ให้การแนะนำอย่างละเอียดเกี่ยวกับการคำนวณบนหน่วยประมวลผลกราฟิก (GPU) และการเขียนโปรแกรมแบบขนานโดยใช้สภาพแวดล้อม CUDA C ครอบคลุมสถาปัตยกรรม GPU การประมวลผลแบบขนานของข้อมูล การจัดการเธรด การปรับปรุงหน่วยความจำ และประเด็นเรื่องประสิทธิภาพขั้นสูง พร้อมยกตัวอย่างกรณีศึกษาจริง เช่น การสร้างภาพจากการถ่ายภาพด้วยแม่เหล็กไฟฟ้า (MRI) และการมองเห็นโมเลกุล
ภาพรวมคอร์สเรียน
สรุปเนื้อหา
หลักสูตรนี้ให้การแนะนำอย่างละเอียดเกี่ยวกับการประมวลผลบนหน่วยประมวลผลกราฟิก (GPU) และการเขียนโปรแกรมแบบขนานโดยใช้สภาพแวดล้อม CUDA C โดยครอบคลุมสถาปัตยกรรม GPU การทำงานแบบขนานข้อมูล การจัดการเธรด การปรับปรุงหน่วยความจำ และประเด็นเรื่องประสิทธิภาพขั้นสูง พร้อมยกตัวอย่างกรณีศึกษาจริง เช่น การกู้คืนภาพ MRI และการมองเห็นโมเลกุล
เชี่ยวชาญศิลปะของการประมวลผลขนานที่มีประสิทธิภาพสูง ด้วยแนวทางปฏิบัติจริงในการใช้ CUDA และสถาปัตยกรรม GPU
ผู้แต่ง: David B. Kirk, Wen-mei W. Hwu
ขอบคุณ: Ian Buck, John Nickolls, ทีม NVIDIA DevTech, Jensen Huang, David Luebke, Bill Bean, Simon Green, Mark Harris, Manju Hedge, Nadeem Mohammad, Brent Oster, Peter Shirley, Eric Young, และ Cyril Zeller
เป้าหมายการเรียนรู้
- แยกแยะปรัชญาการออกแบบและแนวโน้มประสิทธิภาพระหว่างโปรเซสเซอร์หลายคอร์ (multicore CPU) และโปรเซสเซอร์หลายหน่วย (many-core GPU)
- ระบุองค์ประกอบหลักของสถาปัตยกรรม GPU สมัยใหม่ รวมถึง Streaming Multiprocessors (SMs) และโครงสร้างหน่วยความจำ
- ประยุกต์ใช้กฎของ Amdahl เพื่อคำนวณความเร็วที่เป็นไปได้ทางทฤษฎี และระบุผลกระทบจากจุดที่ทำให้เกิดความล่าช้าในส่วนลำดับ
- เปรียบเทียบ ความแตกต่างทางสถาปัตยกรรมระหว่างเส้นทางการทำงานแบบคงที่ (fixed-function pipelines) กับอาร์เรย์โปรเซสเซอร์ที่สามารถเขียนโปรแกรมได้ (programmable unified processor arrays)
- อธิบาย บทบาทของ "GPGPU" เป็นขั้นตอนกลาง และข้อจำกัดของโมเดลการเขียนโปรแกรมชูดิโอ (shader programming) แบบดั้งเดิม
- วิเคราะห์ ว่าฟีเจอร์ฮาร์ดแวร์เช่น การดำเนินการแบบอะตอม (atomic operations), การซิงโครไนซ์แบบบาร์เรียร์ (barrier synchronization), และการรองรับเลขทศนิยมสองตำแหน่ง (double-precision support) สนับสนุนการเปลี่ยนผ่านสู่การประมวลผลทั่วไปที่ขยายขนาดได้
- ระบุและใช้ประโยชน์จากความขนานข้อมูลภายในอัลกอริธึมการคูณเมทริกซ์กับเมทริกซ์
- นำเสนอบริหารหน่วยความจำบนอุปกรณ์ (device memory management) รวมถึงการจัดสรร การถ่ายโอนข้อมูลระหว่างโฮสต์กับอุปกรณ์ และการปล่อยหน่วยความจำกลับ
- สร้างและเริ่มต้นเคอร์เนลใน CUDA โดยใช้การดัชนีเธรดและการกำหนดโครงสร้างกริด/บล็อกที่เหมาะสม
- ออกแบบ โครงสร้างระดับเธรดแบบหลายมิติ (กริดและบล็อก) เพื่อจับคู่โครงสร้างข้อมูลที่ซับซ้อนเข้ากับฮาร์ดแวร์ GPU