API ส่วนย่อยของ WMMA
โหลด mma_sync และจัดเก็บส่วนย่อย
API ส่วนย่อยของ WMMA เป็นบทเรียน CUDA Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน CUDA Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส CUDA Academy มีบทเรียนทั้งหมด 4 บทเรียน
API ของ WMMA
หากต้องการเขียนโปรแกรมให้แกน Tensor โดยตรง ให้ใช้ WMMA ซึ่งเป็น API สำหรับการคูณและสะสมผลของเมทริกซ์ระดับวาร์ปในเนมสเปซ nvcuda::wmma 🧩
วาร์ปทั้งหมดทำงานร่วมกัน
WMMA ทำงานในระดับวาร์ป โดยเธรดทั้ง 32 เธรดในวาร์ปจะทำงานร่วมกันบนไทล์เดียว คุณจึงคิดเป็นไทล์ ไม่ใช่เธรดเดี่ยว
พบกับแฟรกเมนต์
แฟรกเมนต์คือชนิดข้อมูลของ WMMA ที่เก็บส่วนหนึ่งของไทล์เมทริกซ์ซึ่งเป็นของวาร์ปหนึ่งวาร์ป แต่ละเธรดจะถือครององค์ประกอบบางส่วนอย่างเงียบ ๆ
บทบาทของแฟรกเมนต์สามแบบ
คุณประกาศแฟรกเมนต์ที่กำกับเป็น matrix_a, matrix_b หรือตัวสะสม ป้ายกำกับจะบอก WMMA ว่าไทล์นั้นถูกป้อนเข้าสู่การคูณและสะสมผลอย่างไร
รูปร่างไทล์ถูกกำหนดไว้ตายตัว
แฟรกเมนต์ใช้ขนาดไทล์ที่กำหนดไว้ เช่น 16 คูณ 16 คูณ 16 คุณเลือกรูปร่างที่รองรับได้ เพราะฮาร์ดแวร์รับเฉพาะชุดค่าผสมเหล่านั้น
ขั้นที่ 1: โหลด
ขั้นแรกให้เรียก load_matrix_sync เพื่อดึงไทล์จากหน่วยความจำเข้าสู่แฟรกเมนต์ การโหลดนี้จะแบ่งข้อมูลไปทั่วทั้งวาร์ปให้คุณ
wmma::load_matrix_sync(a_frag, ptr, ldm);ขั้นที่ 2: ล้างตัวสะสม
ก่อนบวกค่า ให้กำหนดไทล์ผลลัพธ์เป็นศูนย์ด้วย fill_fragment การมีตัวสะสมที่สะอาดหมายความว่าผลรวมจะเริ่มจากค่าที่ทราบแน่นอน
wmma::fill_fragment(c_frag, 0.0f);ขั้นที่ 3: คูณและสะสมผล
การเรียกหลักคือ mma_sync ซึ่งทำ D = A คูณ B บวก C บนแฟรกเมนต์ที่โหลดไว้ โดยใช้แกน Tensorโดยตรง
wmma::mma_sync(c_frag, a_frag, b_frag, c_frag);ขั้นที่ 4: จัดเก็บ
สุดท้าย store_matrix_sync จะเขียนแฟรกเมนต์ตัวสะสมกลับไปยังหน่วยความจำ การจัดเก็บนี้จะรวบรวมส่วนของแต่ละเธรดกลับเป็นไทล์เดียว
wmma::store_matrix_sync(out, c_frag, ldm, layout);Sync หมายถึงทำงานพร้อมกันทั้งวาร์ป
ส่วนต่อท้าย _sync เป็นเครื่องเตือนใจว่า การเรียก WMMA ทุกครั้งเป็นแบบทำงานพร้อมกันทั้งวาร์ปทั้ง 32 เลนต้องมาถึงพร้อมกัน มิฉะนั้นพฤติกรรมจะไม่เป็นที่กำหนด
เลย์เอาต์และมิติหลัก
การโหลดและจัดเก็บต้องใช้มิติหลัก ซึ่งคือระยะห่างระหว่างแถว รวมถึงเลย์เอาต์แบบเรียงตามแถวหรือคอลัมน์ เพื่ออ่านหน่วยความจำได้ถูกต้อง
ตรวจสอบอย่างรวดเร็ว
การเรียก WMMA ใดที่ทำการคูณและสะสมผลของเมทริกซ์บนแกน Tensor จริง
สรุป
คุณได้ทำความเข้าใจกระบวนการของ WMMA แล้ว ได้แก่ ประกาศแฟรกเมนต์ โหลดไทล์ ล้างตัวสะสม เรียก mma_sync แล้วจัดเก็บ ทุกขั้นตอนทำงานพร้อมกันทั้งวาร์ป 🙌
เรียนรู้ C++ ด้วย AI tutor — ฟรี
เขียนและเรียกใช้โค้ดจริงในเบราว์เซอร์ของคุณ รับความช่วยเหลือทันทีจาก AI tutor 24/7 และเรียนรู้ต่อจากที่คุณหยุดบนเว็บหรือในแอป
- คอร์ส
- 30
- บทเรียน
- 120
คำถามที่พบบ่อย
บทเรียน “API ส่วนย่อยของ WMMA” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “API ส่วนย่อยของ WMMA” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส CUDA Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส CUDA Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “API ส่วนย่อยของ WMMA”
โหลด mma_sync และจัดเก็บส่วนย่อย คุณปฏิบัติ CUDA Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน CUDA Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน CUDA Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน
บทเรียน “API ส่วนย่อยของ WMMA” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน CUDA Academy นี้ได้ไหม
ได้ บทเรียน CUDA Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- Tensor Core คำนวณอะไร
- ความแม่นยำผสม: FP16, BF16, TF32
- API ส่วนย่อยของ WMMA
- ข้อแลกเปลี่ยนด้านเสถียรภาพเชิงตัวเลข