CUDA Academy · บทเรียน

อีเวนต์สำหรับจับเวลาและซิงค์

ใช้ cudaEvent วัดและจัดลำดับงาน

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

อีเวนต์สำหรับจับเวลาและซิงค์ เป็นบทเรียน CUDA Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน CUDA Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส CUDA Academy มีบทเรียนทั้งหมด 4 บทเรียน

อีเวนต์คืออะไร

อีเวนต์ ของ CUDA คือเครื่องหมายที่คุณแทรกไว้ในสตรีม GPU จะบันทึกเวลาที่ทำงานมาถึงจุดนั้น ทำให้คุณจับเวลาและจัดลำดับงานได้ ⏱️

แฮนเดิลของอีเวนต์

อีเวนต์ใช้แฮนเดิล cudaEvent_t เช่นเดียวกับสตรีม คุณสร้าง บันทึก ตรวจสอบ และทำลายอีเวนต์เมื่อใช้งานเสร็จ

cudaEvent_t start, stop;

การสร้างอีเวนต์

เรียกใช้ cudaEventCreate สำหรับอีเวนต์แต่ละรายการที่ต้องการ โดยทั่วไปการจับเวลาจะใช้สองรายการ รายการหนึ่งก่อนเริ่มงานและอีกรายการหลังงานเสร็จ

cudaEventCreate(&start);
cudaEventCreate(&stop);

การบันทึกอีเวนต์

cudaEventRecord จะวางอีเวนต์ลงในสตรีม GPU จะประทับเวลาให้อีเวนต์ทันทีที่ทำงานทุกอย่างที่อยู่ในคิวก่อนหน้านั้นเสร็จ

cudaEventRecord(start, stream);

การจับเวลาเคอร์เนล

บันทึกจุดเริ่มต้น เปิดใช้เคอร์เนล แล้วบันทึกจุดสิ้นสุด โดยทำทั้งหมดในสตรีมเดียวกัน ช่วงเวลาระหว่างสองจุดนี้คือเวลา ประมวลผลจริงบน GPU

cudaEventRecord(start, s);
kernel<<<g, b, 0, s>>>(d);
cudaEventRecord(stop, s);

การรออีเวนต์

อีเวนต์ทำงานแบบอะซิงโครนัส ดังนั้นโฮสต์จึงต้องรอ cudaEventSynchronize จะบล็อกจนกว่าอีเวนต์ที่ระบุจะถูกบันทึกบน GPU จริง

cudaEventSynchronize(stop);

การวัดเวลาที่ผ่านไป

cudaEventElapsedTime จะคืนค่าจำนวนมิลลิวินาทีระหว่างอีเวนต์ที่บันทึกไว้สองรายการ วิธีนี้แม่นยำนาฬิกา CPU ฝั่งโฮสต์มาก

float ms;
cudaEventElapsedTime(&ms, start, stop);

เหตุใดจึงไม่ใช้นาฬิกา CPU

ตัวจับเวลาฝั่งโฮสต์รวมเวลาส่วนเกินจากการเปิดใช้และพลาดเวลาจริงของ GPU อีเวนต์อยู่ ภายในสตรีม จึงจับสิ่งที่อุปกรณ์ทำได้อย่างแม่นยำ

การจัดลำดับข้ามสตรีม

อีเวนต์ยังใช้ซิงโครไนซ์สตรีมได้ด้วย cudaStreamWaitEvent จะทำให้สตรีมหนึ่งหยุดรอจนกว่าอีเวนต์ที่บันทึกไว้ในอีกสตรีมจะเกิดขึ้น

cudaStreamWaitEvent(streamB, eventA, 0);

การสร้างการขึ้นต่อกัน

ด้วยการรออีเวนต์จากสตรีม คุณสามารถระบุ การขึ้นต่อกัน ได้ว่า streamB จะเริ่มงานก็ต่อเมื่อ streamA ไปถึงอีเวนต์ของตน โดยไม่บล็อกโฮสต์

การล้างอีเวนต์

คืนทรัพยากรอีเวนต์ที่ไม่ต้องใช้แล้วด้วย cudaEventDestroy เช่นเดียวกับสตรีม อีเวนต์ใช้ทรัพยากรไม่มาก แต่ไม่ควรปล่อยให้รั่วไหลในแอปที่ทำงานเป็นเวลานาน

cudaEventDestroy(start);
cudaEventDestroy(stop);

ตรวจสอบความเข้าใจอย่างรวดเร็ว

ฟังก์ชันใดใช้ดูเวลาระหว่างอีเวนต์สองรายการ

ทบทวน

อีเวนต์ ช่วยให้คุณจับเวลางานบน GPU ได้อย่างแม่นยำ และจัดให้งานในสตรีมหนึ่งทำงานหลังอีกสตรีมหนึ่งได้ อีเวนต์คือเครื่องมือสำหรับวัดและประสานการทำงานซ้อนกัน 🎯

เริ่มต้นได้ฟรี

เรียนรู้ C++ ด้วย AI tutor — ฟรี

เขียนและเรียกใช้โค้ดจริงในเบราว์เซอร์ของคุณ รับความช่วยเหลือทันทีจาก AI tutor 24/7 และเรียนรู้ต่อจากที่คุณหยุดบนเว็บหรือในแอป

คอร์ส
30
บทเรียน
120

คำถามที่พบบ่อย

บทเรียน “อีเวนต์สำหรับจับเวลาและซิงค์” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “อีเวนต์สำหรับจับเวลาและซิงค์” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส CUDA Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส CUDA Academy มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “อีเวนต์สำหรับจับเวลาและซิงค์”

ใช้ cudaEvent วัดและจัดลำดับงาน คุณปฏิบัติ CUDA Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน CUDA Academy หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน CUDA Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน

บทเรียน “อีเวนต์สำหรับจับเวลาและซิงค์” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน CUDA Academy นี้ได้ไหม

ได้ บทเรียน CUDA Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

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

  1. กับดักของสตรีมเริ่มต้น
  2. สร้างและใช้สตรีม
  3. อีเวนต์สำหรับจับเวลาและซิงค์
  4. ทำการคัดลอกและคำนวณซ้อนกัน
← กลับไปที่ CUDA Academy