ใช้ 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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- ใช้ GEMM ของ cuBLAS ให้ถูกต้อง
- เวกเตอร์และการแปลงของ Thrust
- Reduce, Scan และ Sort ของ Thrust
- cuDNN สำหรับการเรียนรู้เชิงลึก