การแจกแจงและเลือกอุปกรณ์
cudaSetDevice และบริบทแยกตาม GPU
การแจกแจงและเลือกอุปกรณ์ เป็นบทเรียน CUDA Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน CUDA Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส CUDA Academy มีบทเรียนทั้งหมด 4 บทเรียน
มี GPU มากกว่าหนึ่งตัว
เครื่องหนึ่งเครื่องสามารถมี GPU ได้หลายตัว หากต้องการใช้ทั้งหมด โปรแกรมต้องตรวจสอบก่อนว่ามี อุปกรณ์อยู่กี่ตัว ก่อนส่งงานไปให้ทำ
นับจำนวนอุปกรณ์
การเรียกใช้หนึ่งครั้งจะบอกจำนวน GPU ที่สภาพแวดล้อมขณะทำงานมองเห็น cudaGetDeviceCount จะเขียนจำนวนนั้นลงใน int ที่คุณส่งให้
int count;
cudaGetDeviceCount(&count);อุปกรณ์มีหมายเลขกำกับ
GPU แต่ละตัวจะได้รับรหัสจำนวนเต็มตั้งแต่ 0 ถึงจำนวนนั้นลบหนึ่ง รหัสอุปกรณ์นี้ใช้ระบุ GPU ใด GPU หนึ่งให้สภาพแวดล้อมขณะทำงานทราบ
เลือกอุปกรณ์ที่ใช้งานอยู่
คุณเลือก GPU เป้าหมายสำหรับการเรียกใช้ครั้งถัดไปด้วย cudaSetDevice หลังจากนั้น การจัดสรรหน่วยความจำและการเปิดใช้งานเคอร์เนลจะไปยังการ์ดนั้น
cudaSetDevice(1);มีอุปกรณ์ปัจจุบันอยู่หนึ่งตัว
ในแต่ละขณะ GPU เพียงหนึ่งตัวเท่านั้นที่เป็น อุปกรณ์ปัจจุบันของเธรดที่เรียกใช้ ทุก cudaMalloc หรือการเปิดใช้งานเคอร์เนลจะไปยังอุปกรณ์ที่เป็นปัจจุบัน
ตรวจสอบอุปกรณ์
ก่อนวางใจ GPU คุณสามารถอ่านข้อมูลจำเพาะของมันได้ cudaGetDeviceProperties จะเติมข้อมูลลงในโครงสร้าง ซึ่งประกอบด้วยชื่อ ขนาดหน่วยความจำ และความสามารถด้านการคำนวณ
cudaDeviceProp prop;
cudaGetDeviceProperties(&prop, 0);อ่านคุณสมบัติ
โครงสร้างคุณสมบัติมีข้อมูลมากมาย ฟิลด์อย่าง name และ totalGlobalMem ช่วยให้คุณเลือกการ์ดที่ดีที่สุด หรือข้ามการ์ดที่มีขนาดเล็กเกินไป
อุปกรณ์แต่ละตัวเป็นเจ้าของหน่วยความจำของตน
ตัวชี้จาก cudaMalloc เป็นของ GPU ที่เป็นอุปกรณ์ปัจจุบันในขณะนั้น การใช้งานตัวชี้ดังกล่าวขณะที่ อุปกรณ์อื่นเป็นอุปกรณ์ปัจจุบันจะทำให้เกิดข้อผิดพลาดได้
บริบทแยกตามอุปกรณ์
เบื้องหลัง GPU แต่ละตัวมี บริบทที่เก็บการจัดสรรหน่วยความจำและสตรีมของมัน การเปลี่ยนอุปกรณ์ปัจจุบันจะเปลี่ยนเข้าสู่บริบทของอุปกรณ์นั้น
วนรอบ GPU ทั้งหมด
รูปแบบที่ใช้กันทั่วไปคือวนรอบโดยเรียก cudaSetDevice สำหรับแต่ละรหัส แล้วตั้งค่าบนการ์ดนั้น วิธีนี้ช่วยกระจายงานไปยัง อุปกรณ์ทุกตัว
for (int d = 0; d < count; d++) {
cudaSetDevice(d);
}คืนค่าก่อนออก
หากฟังก์ชันช่วยเหลือเปลี่ยนอุปกรณ์ปัจจุบัน ให้เปลี่ยนกลับเมื่อทำงานเสร็จ การปล่อยให้ อุปกรณ์ปัจจุบันเปลี่ยนไปอาจทำให้โค้ดส่วนอื่นทำงานผิดคาด
ตรวจสอบอย่างรวดเร็ว
ลองนึกดูว่าการเรียกใช้ใดเลือก GPU ที่จะใช้สำหรับการจัดสรรหน่วยความจำและการเปิดใช้งานเคอร์เนลครั้งถัดไป
สรุป
คุณนับจำนวน GPU เลือกหนึ่งตัวด้วย cudaSetDevice และตรวจสอบด้วยคุณสมบัติ อุปกรณ์แต่ละตัวเป็นเจ้าของหน่วยความจำและบริบทของตนเอง ถัดไป: แบ่งงานระหว่างอุปกรณ์เหล่านั้น ✨
เรียนรู้ C++ ด้วย AI tutor — ฟรี
เขียนและเรียกใช้โค้ดจริงในเบราว์เซอร์ของคุณ รับความช่วยเหลือทันทีจาก AI tutor 24/7 และเรียนรู้ต่อจากที่คุณหยุดบนเว็บหรือในแอป
- คอร์ส
- 30
- บทเรียน
- 120
คำถามที่พบบ่อย
บทเรียน “การแจกแจงและเลือกอุปกรณ์” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “การแจกแจงและเลือกอุปกรณ์” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส CUDA Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส CUDA Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “การแจกแจงและเลือกอุปกรณ์”
cudaSetDevice และบริบทแยกตาม GPU คุณปฏิบัติ CUDA Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน CUDA Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน CUDA Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน
บทเรียน “การแจกแจงและเลือกอุปกรณ์” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน CUDA Academy นี้ได้ไหม
ได้ บทเรียน CUDA Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- การแจกแจงและเลือกอุปกรณ์
- การแบ่งงานข้าม GPU
- การเข้าถึงหน่วยความจำแบบเพียร์ทูเพียร์
- หลาย GPU ด้วย NCCL