เชื่อมต่อส่วนโฮสต์
จอง คัดลอก เรียกใช้ คัดลอกกลับ และคืนหน่วยความจำ
เชื่อมต่อส่วนโฮสต์ เป็นบทเรียน CUDA Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน CUDA Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส CUDA Academy มีบทเรียนทั้งหมด 4 บทเรียน
โฮสต์ก็มีหน้าที่เช่นกัน
เคอร์เนลทำหน้าที่คำนวณ แต่ CPU ของ โฮสต์ เป็นผู้เตรียมทุกอย่าง หน้าที่คือจัดสรร คัดลอกเข้า เรียกใช้ คัดลอกกลับ และคืนหน่วยความจำ 🧩
ตัวชี้สองชุด
คุณเก็บ ตัวชี้โฮสต์ สำหรับอาร์เรย์บน CPU และเก็บ ตัวชี้อุปกรณ์ แยกต่างหากสำหรับบัฟเฟอร์บน GPU โดยมักตั้งชื่อเป็น h_A และ d_A
float *h_A, *h_B, *h_C;
float *d_A, *d_B, *d_C;เติมข้อมูลอินพุตบน CPU
ขั้นแรกให้เตรียมข้อมูลในหน่วยความจำโฮสต์ปกติ ที่นี่คุณเพียงกำหนดค่าเริ่มต้นให้ h_A และ h_B ด้วยค่าที่ GPU จะนำไปบวกในภายหลัง
for (int i = 0; i < n; i++) {
h_A[i] = i; h_B[i] = 2 * i;
}จัดสรรบนอุปกรณ์
GPU ต้องมีบัฟเฟอร์ของตนเอง ดังนั้นให้เรียก cudaMalloc สำหรับแต่ละอาร์เรย์ โปรดสังเกตว่าขนาดเป็นไบต์ โดยคำนวณจากจำนวนสมาชิกคูณ sizeof(float)
size_t bytes = n * sizeof(float);
cudaMalloc(&d_A, bytes);คัดลอกอินพุตขึ้นไป
ย้ายอาร์เรย์อินพุตไปยัง GPU ด้วย cudaMemcpy และทิศทาง HostToDevice เคอร์เนลจะมองเห็นได้เฉพาะข้อมูลที่อยู่บนอุปกรณ์เท่านั้น
cudaMemcpy(d_A, h_A, bytes, cudaMemcpyHostToDevice);
cudaMemcpy(d_B, h_B, bytes, cudaMemcpyHostToDevice);กำหนดรูปแบบการเรียกใช้
เลือกจำนวนเธรดต่อบล็อก จากนั้นคำนวณว่าต้องใช้กี่บล็อกจึงจะครอบคลุมสมาชิกทั้งหมด การปัดขึ้นรับประกันว่า ทุก สมาชิกจะมีเธรดประจำ
int threads = 256;
int blocks = (n + threads - 1) / threads;เรียกใช้เคอร์เนล
ตอนนี้เปิดใช้งานเคอร์เนลด้วยไวยากรณ์ วงเล็บเหลี่ยมสามชั้น พร้อมส่งตัวชี้อุปกรณ์ของคุณเข้าไป การเรียกนี้จะส่งคืนทันทีขณะที่ GPU กำลังทำงาน
vecAdd<<<blocks, threads>>>(d_A, d_B, d_C, n);คัดลอกผลลัพธ์ลงมา
เมื่อเคอร์เนลทำงานเสร็จ ให้นำ C กลับมาด้วย cudaMemcpyDeviceToHost การคัดลอกนี้จะรอให้การเรียกใช้เคอร์เนลเสร็จสิ้นก่อนเช่นกัน
cudaMemcpy(h_C, d_C, bytes, cudaMemcpyDeviceToHost);คืนหน่วยความจำอุปกรณ์
หน่วยความจำ GPU ไม่ได้ถูกเก็บคืนโดยอัตโนมัติ ดังนั้นให้คืนบัฟเฟอร์ทุกตัวด้วย cudaFree หากข้ามขั้นตอนนี้ หน่วยความจำจะรั่วไปจนกว่าโพรเซสจะสิ้นสุด
cudaFree(d_A); cudaFree(d_B); cudaFree(d_C);ลำดับนี้สำคัญมาก
ทำตามลำดับเดิมเสมอ: จัดสรร คัดลอกเข้า เรียกใช้ คัดลอกกลับ คืนหน่วยความจำ หากสลับขั้นตอน เคอร์เนลจะอ่านข้อมูลเก่าหรือข้อมูลที่ไม่ถูกต้อง
โค้ดโฮสต์เป็น C++ ปกติ
สังเกตว่าโค้ดฝั่งโฮสต์เป็น C++ ทั่วไปที่เพิ่มการเรียกใช้ cuda เพียงไม่กี่รายการ ไม่มีเวทมนตร์พิเศษจากคอมไพเลอร์นอกเหนือจากการเรียกใช้เคอร์เนล
ตรวจสอบความเข้าใจ
ต้องทำสิ่งใดก่อนจึงจะเรียกใช้เคอร์เนล vecAdd ได้
สรุปทบทวน
คุณเชื่อมต่อส่วนโฮสต์ครบทุกขั้นตอนแล้ว ได้แก่ ชุดพอยน์เตอร์สองชุด, cudaMalloc, การคัดลอกข้อมูลขึ้นไป, การเรียกใช้เคอร์เนล, การคัดลอกข้อมูลกลับมา และ cudaFree นี่คือโค้ดพื้นฐานที่ใช้ขับเคลื่อนเคอร์เนลทุกตัว ✅
คำถามที่พบบ่อย
บทเรียน “เชื่อมต่อส่วนโฮสต์” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “เชื่อมต่อส่วนโฮสต์” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส CUDA Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส CUDA Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “เชื่อมต่อส่วนโฮสต์”
จอง คัดลอก เรียกใช้ คัดลอกกลับ และคืนหน่วยความจำ คุณปฏิบัติ CUDA Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน CUDA Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน CUDA Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน
บทเรียน “เชื่อมต่อส่วนโฮสต์” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน CUDA Academy นี้ได้ไหม
ได้ บทเรียน CUDA Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- เคอร์เนลบวกเวกเตอร์
- เชื่อมต่อส่วนโฮสต์
- ตรวจสอบผลลัพธ์บน CPU
- จับเวลาการเพิ่มความเร็วครั้งแรก