CUDA Academy · บทเรียน

การแจกแจงและเลือกอุปกรณ์

cudaSetDevice และบริบทแยกตาม GPU

บทเรียน 1 จาก 413 ขั้นตอน

การแจกแจงและเลือกอุปกรณ์ เป็นบทเรียน 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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. การแจกแจงและเลือกอุปกรณ์
  2. การแบ่งงานข้าม GPU
  3. การเข้าถึงหน่วยความจำแบบเพียร์ทูเพียร์
  4. หลาย GPU ด้วย NCCL
← กลับไปที่ CUDA Academy