CUDA Academy · บทเรียน

API ส่วนย่อยของ WMMA

โหลด mma_sync และจัดเก็บส่วนย่อย

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

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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

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

  1. Tensor Core คำนวณอะไร
  2. ความแม่นยำผสม: FP16, BF16, TF32
  3. API ส่วนย่อยของ WMMA
  4. ข้อแลกเปลี่ยนด้านเสถียรภาพเชิงตัวเลข
← กลับไปที่ CUDA Academy