จับเวลาการเพิ่มความเร็วครั้งแรก
วัด GPU เทียบกับ CPU ในงานเดียวกัน
จับเวลาการเพิ่มความเร็วครั้งแรก เป็นบทเรียน CUDA Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน CUDA Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส CUDA Academy มีบทเรียนทั้งหมด 4 บทเรียน
ตอนนี้มาวัดผลลัพธ์ที่ได้
เมื่อคุณมีเคอร์เนลที่ถูกต้องแล้ว คำถามที่น่าสนใจก็คือเคอร์เนลนั้น เร็วกว่า CPU มากเพียงใด การวัดจะเปลี่ยนการคาดเดาให้เป็นตัวเลขจริง ⏱️
จับเวลาค่าพื้นฐานของ CPU
เริ่มจาก ค่าพื้นฐาน ที่ยุติธรรม โดยจับเวลาการบวกแบบเดียวกันในลูป CPU ธรรมดา คุณต้องมีสิ่งสำหรับใช้เปรียบเทียบกับ GPU
อย่าจับเวลาโดยใช้วิธีที่ผิด
หลีกเลี่ยงการจับเวลาคร่อม cudaMemcpy ที่คุณลืมรอ การเรียกใช้เคอร์เนลทำงานแบบไม่พร้อมกัน ดังนั้นตัวจับเวลาแบบพื้นฐานอาจรายงานค่าที่ไร้ความหมาย
ใช้เหตุการณ์ของ CUDA
เครื่องมือที่เหมาะสมคือออบเจ็กต์ cudaEvent สองตัว ออบเจ็กต์เหล่านี้บันทึกเวลาของ GPU โดยตรงบนอุปกรณ์ ทำให้จับเวลาเคอร์เนลได้แม่นยำ
cudaEvent_t start, stop;
cudaEventCreate(&start);
cudaEventCreate(&stop);คร่อมช่วงการทำงานของเคอร์เนล
บันทึก เวลาเริ่มต้น ทันทีก่อนเรียกใช้เคอร์เนล และบันทึกเวลาสิ้นสุดทันทีหลังจากนั้น เหตุการณ์จะถูกจัดคิวในสตรีมร่วมกับเคอร์เนลของคุณ
cudaEventRecord(start);
vecAdd<<<blocks, threads>>>(d_A, d_B, d_C, n);
cudaEventRecord(stop);รอ แล้วจึงอ่านค่า
เรียกใช้ cudaEventSynchronize กับเหตุการณ์สิ้นสุด เพื่อให้ CPU รอ GPU จากนั้นจึงจะอ่านเวลาที่ผ่านไปได้
cudaEventSynchronize(stop);
float ms = 0;
cudaEventElapsedTime(&ms, start, stop);วอร์มอัปก่อน
การเรียกใช้ครั้งแรกจะมีต้นทุนการตั้งค่าที่เกิดขึ้นเพียงครั้งเดียว ให้เรียกใช้เคอร์เนล วอร์มอัป ที่ไม่ใช้ผลลัพธ์ก่อนจับเวลา เพื่อไม่ให้ต้นทุนดังกล่าวทำให้ค่าที่วัดคลาดเคลื่อน
หาค่าเฉลี่ยจากหลายรอบ
ตัวอย่างเพียงครั้งเดียวมีสัญญาณรบกวน ดังนั้นให้จับเวลาเคอร์เนลหลายครั้งแล้วหาค่า เฉลี่ย ตัวเลขที่คงที่ทำให้การอ้างว่าเร็วขึ้นมีความน่าเชื่อถือ
นับการคัดลอกข้อมูลด้วย
วัดผลอย่างตรงไปตรงมา การวัดเฉพาะเวลาเคอร์เนลอาจดูยอดเยี่ยม แต่ความเร็วที่เพิ่มขึ้นจริงต้องรวม การถ่ายโอนผ่าน PCIe ด้วย
คำนวณความเร็วที่เพิ่มขึ้น
ความเร็วที่เพิ่มขึ้นคำนวณได้ง่าย ๆ จากเวลา CPU หารด้วยเวลา GPU อาร์เรย์ขนาดเล็กอาจ ช้ากว่า เมื่อทำงานบน GPU หากนับเวลาคัดลอกข้อมูลด้วย
float speedup = cpu_ms / gpu_ms;อาร์เรย์ที่ใหญ่กว่าชนะได้มากกว่า
GPU จะแสดงประสิทธิภาพได้ดีเมื่อมี งาน มากพอที่จะซ่อนต้นทุนการถ่ายโอน เพิ่มค่า n แล้วดูความเร็วที่เพิ่มขึ้นไต่ระดับเมื่อการประมวลผลแบบขนานมีอิทธิพลมากขึ้น 📈
ตรวจสอบอย่างรวดเร็ว
เครื่องมือใดให้การจับเวลาเคอร์เนลของ GPU ที่แม่นยำ
สรุป
คุณวัดความเร็วที่เพิ่มขึ้นครั้งแรกโดยใช้ เหตุการณ์ของ CUDA ได้แก่ วอร์มอัป คร่อมช่วงการทำงานของเคอร์เนล รอให้เสร็จ และนำเวลา CPU หารด้วยเวลา GPU ปัญหาที่ใหญ่ขึ้นให้ผลลัพธ์ที่ดียิ่งขึ้น 🎉
คำถามที่พบบ่อย
บทเรียน “จับเวลาการเพิ่มความเร็วครั้งแรก” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “จับเวลาการเพิ่มความเร็วครั้งแรก” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส CUDA Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส CUDA Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “จับเวลาการเพิ่มความเร็วครั้งแรก”
วัด GPU เทียบกับ CPU ในงานเดียวกัน คุณปฏิบัติ CUDA Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน CUDA Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน CUDA Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน
บทเรียน “จับเวลาการเพิ่มความเร็วครั้งแรก” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน CUDA Academy นี้ได้ไหม
ได้ บทเรียน CUDA Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- เคอร์เนลบวกเวกเตอร์
- เชื่อมต่อส่วนโฮสต์
- ตรวจสอบผลลัพธ์บน CPU
- จับเวลาการเพิ่มความเร็วครั้งแรก