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

ใช้ GEMM ของ cuBLAS ให้ถูกต้อง

ตัวจัดการ ลำดับคอลัมน์ และมิติข้อมูลนำ

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

ยืนบนบ่าของ NVIDIA

การเขียนการคูณเมทริกซ์ด้วยตนเองให้รวดเร็วนั้นทำได้ยาก cuBLAS มาพร้อม GEMM ที่ผ่านการทดสอบมาอย่างยาวนาน และรีดประสิทธิภาพ GPU ของคุณได้เกือบถึงขีดสูงสุดอยู่แล้ว 🚀

GEMM หมายถึงอะไร

GEMM ย่อมาจากการคูณเมทริกซ์ทั่วไป โดยคำนวณ C = alpha * A * B + beta * C ซึ่งเป็นงานหลักที่อยู่เบื้องหลังกราฟิกและการเรียนรู้เชิงลึก

C = alpha * (A * B) + beta * C

ทุกการเรียกใช้ต้องมีตัวจัดการ

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

cublasHandle_t h;
cublasCreate(&h);
// ... use h ...
cublasDestroy(h);

ความประหลาดใจเรื่องลำดับคอลัมน์

cuBLAS ต้องการเมทริกซ์แบบ เรียงตามคอลัมน์ ซึ่งเป็นรูปแบบการจัดวางของ Fortran แต่โดยปกติอาร์เรย์ C++ ของคุณจะเรียงตามแถว ความไม่ตรงกันนี้จึงทำให้เกือบทุกคนสับสน

มิติหลัก

มิติหลักบอก cuBLAS ถึงระยะห่างระหว่างคอลัมน์ในหน่วยความจำ สำหรับเมทริกซ์แบบ M คูณ N ที่เรียงตามคอลัมน์และจัดเก็บต่อเนื่อง มิตินี้ก็คือ M

int lda = M; // rows, column-major stride

เทคนิคการทรานสโพส

วิธีแก้ที่สะดวกคือ การคูณ A กับ B ที่เรียงตามแถว เท่ากับทรานสโพสของการคูณ B กับ A ที่เรียงตามคอลัมน์ หลายคนจึงเลือก สลับตัวถูกดำเนินการ แทนการทรานสโพสข้อมูล

สเกลาร์อยู่ใน alpha และ beta

คุณส่ง alpha และ beta ในรูปตัวชี้ ใช้ alpha = 1 และ beta = 0 หากต้องการคำนวณ C = A * B โดยไม่มีการบวกค่าอื่น

const float alpha = 1.0f, beta = 0.0f;

การเรียกใช้ cublasSgemm

cublasSgemm คือ GEMM สำหรับชนิดข้อมูล float ความแม่นยำเดี่ยว รายการอาร์กิวเมนต์ที่ยาวของมันมีเพียงมิติ ตัวเลือกการทรานสโพส สเกลาร์ และตัวชี้ไปยังหน่วยความจำของอุปกรณ์ทั้งสามตัว

cublasSgemm(h, CUBLAS_OP_N, CUBLAS_OP_N,
  M, N, K, &alpha, dA, M, dB, K, &beta, dC, M);

ตัวชี้ต้องอยู่บนอุปกรณ์

dA, dB และ dC ชี้ไปยัง หน่วยความจำของอุปกรณ์ หากส่งตัวชี้ของโฮสต์ไปโดยไม่ตั้งใจ cuBLAS จะส่งคืนข้อผิดพลาดแทนผลลัพธ์

เลือกส่วนต่อท้ายตามความแม่นยำ

ตัวอักษรจะระบุชนิดข้อมูล: S สำหรับ float, D สำหรับ double และ C กับ Z สำหรับจำนวนเชิงซ้อน เลือก Dgemm เมื่อคุณต้องการความแม่นยำแบบ double

cublasDgemm(...); // double precision GEMM

ตรวจสอบสถานะที่ส่งคืน

การเรียกใช้ cuBLAS ทุกครั้งจะส่งคืนค่า cublasStatus_t ให้เปรียบเทียบค่านี้กับ CUBLAS_STATUS_SUCCESS เพื่อไม่ให้ตัวจัดการหรือมิติที่ไม่ถูกต้องผ่านไปโดยไม่มีใครสังเกต

if (status != CUBLAS_STATUS_SUCCESS) { /* handle */ }

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

ลองนึกถึงรูปแบบการจัดวางข้อมูลที่ cuBLAS คาดไว้

สรุปทบทวน

คุณสร้าง ตัวจัดการ เคารพรูปแบบการเรียงตามคอลัมน์และมิติหลัก กำหนด alpha กับ beta และเรียกใช้ Sgemm ด้วยตัวชี้ไปยังหน่วยความจำของอุปกรณ์ 🎯

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

บทเรียน “ใช้ GEMM ของ cuBLAS ให้ถูกต้อง” ฟรีหรือไม่

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

คุณจะเรียนรู้อะไรในบทเรียน “ใช้ GEMM ของ cuBLAS ให้ถูกต้อง”

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

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

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

บทเรียน “ใช้ GEMM ของ cuBLAS ให้ถูกต้อง” ใช้เวลานานแค่ไหน

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

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

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

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

  1. ใช้ GEMM ของ cuBLAS ให้ถูกต้อง
  2. เวกเตอร์และการแปลงของ Thrust
  3. Reduce, Scan และ Sort ของ Thrust
  4. cuDNN สำหรับการเรียนรู้เชิงลึก
← กลับไปที่ CUDA Academy