0Pricing
CUDA Academy · บทเรียน

เชื่อมต่อส่วนโฮสต์

จอง คัดลอก เรียกใช้ คัดลอกกลับ และคืนหน่วยความจำ

เชื่อมต่อส่วนโฮสต์ เป็นบทเรียน 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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

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

  1. เคอร์เนลบวกเวกเตอร์
  2. เชื่อมต่อส่วนโฮสต์
  3. ตรวจสอบผลลัพธ์บน CPU
  4. จับเวลาการเพิ่มความเร็วครั้งแรก
← กลับไปที่ CUDA Academy