Правильное использование GEMM в cuBLAS
Дескрипторы, порядок столбцов и ведущие размерности
«Правильное использование GEMM в cuBLAS» — бесплатный урок CUDA Academy на CoddyKit. Это урок 1 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения CUDA Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс CUDA Academy содержит 4 уроков всего.
Части этого урока еще не переведены и отображаются на английском.
Stand on NVIDIA's Shoulders
Writing a fast matmul by hand is hard. cuBLAS ships a battle-tested GEMM that already squeezes your GPU near peak performance. 🚀
What GEMM Means
GEMM stands for general matrix-matrix multiply. It computes C = alpha * A * B + beta * C, the workhorse behind graphics and deep learning.
C = alpha * (A * B) + beta * CEvery Call Needs a Handle
cuBLAS keeps its state in a handle. You create one at startup, reuse it for every call, and destroy it at the end.
cublasHandle_t h;
cublasCreate(&h);
// ... use h ...
cublasDestroy(h);The Column-Major Surprise
cuBLAS expects column-major matrices, the Fortran layout. Your C++ arrays are usually row-major, so this mismatch trips up almost everyone.
Leading Dimension
The leading dimension tells cuBLAS the stride between columns in memory. For a tightly packed M-by-N column-major matrix, it is simply M.
int lda = M; // rows, column-major strideThe Transpose Trick
A neat fix: row-major A times B equals the transpose of column-major B times A. Many people just swap the operands instead of transposing data.
Scalars Live in alpha and beta
You pass alpha and beta as pointers. Use alpha = 1 and beta = 0 for a plain C = A * B with nothing added in.
const float alpha = 1.0f, beta = 0.0f;Calling cublasSgemm
cublasSgemm is the single-precision float GEMM. Its long argument list is just dimensions, transpose flags, scalars, and the three device pointers.
cublasSgemm(h, CUBLAS_OP_N, CUBLAS_OP_N,
M, N, K, &alpha, dA, M, dB, K, &beta, dC, M);Pointers Must Be on the Device
dA, dB, and dC point to device memory. Pass host pointers by mistake and cuBLAS returns an error instead of a result.
Pick the Precision Suffix
The letter encodes the type: S for float, D for double, C and Z for complex. Choose Dgemm when you need double precision.
cublasDgemm(...); // double precision GEMMCheck the Return Status
Every cuBLAS call returns a cublasStatus_t. Compare it to CUBLAS_STATUS_SUCCESS so a bad handle or dimension never passes unnoticed.
if (status != CUBLAS_STATUS_SUCCESS) { /* handle */ }Quick Check
Think about the data layout cuBLAS assumes.
Recap
You created a handle, respected column-major layout and leading dimensions, set alpha and beta, and called Sgemm with device pointers. 🎯
Часто задаваемые вопросы
Урок «Правильное использование GEMM в cuBLAS» бесплатный?
Да — полный текст урока «Правильное использование GEMM в cuBLAS» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс CUDA Academy, подпишись на CoddyKit PRO. Курс CUDA Academy содержит 4 уроков всего.
Чему я научусь в уроке «Правильное использование GEMM в cuBLAS»?
Дескрипторы, порядок столбцов и ведущие размерности Ты практикуешь CUDA Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать CUDA Academy?
Предыдущий опыт не требуется. CUDA Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 1 из 4.
Сколько времени занимает урок «Правильное использование GEMM в cuBLAS»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке CUDA Academy?
Да. Каждый урок CUDA Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Правильное использование GEMM в cuBLAS
- Векторы и преобразования Thrust
- Сокращение, сканирование и сортировка в Thrust
- cuDNN для глубокого обучения