GEMM com cuBLAS do jeito certo
Identificadores, ordem principal por coluna e dimensões líderes.
GEMM com cuBLAS do jeito certo é uma aula grátis de CUDA Academy no CoddyKit. Esta é a aula 1 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de CUDA Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de CUDA Academy inclui 4 aulas no total.
Aproveite o trabalho da NVIDIA
Escrever manualmente uma multiplicação de matrizes rápida é difícil. A cuBLAS fornece uma GEMM testada em produção que já utiliza sua GPU quase até o desempenho máximo. 🚀
O significado de GEMM
GEMM significa multiplicação geral de matrizes. Ela calcula C = alpha * A * B + beta * C, a operação fundamental por trás de gráficos e aprendizado profundo.
C = alpha * (A * B) + beta * CToda chamada precisa de um identificador
A cuBLAS mantém seu estado em um identificador. Crie um na inicialização, reutilize-o em todas as chamadas e destrua-o no final.
cublasHandle_t h;
cublasCreate(&h);
// ... use h ...
cublasDestroy(h);A surpresa da ordem por coluna
A cuBLAS espera matrizes na ordem por coluna, o formato do Fortran. Seus vetores C++ geralmente estão na ordem por linha, e essa diferença confunde quase todo mundo.
Dimensão principal
A dimensão principal informa à cuBLAS o passo entre as colunas na memória. Para uma matriz M por N compacta e na ordem por coluna, ela é simplesmente M.
int lda = M; // rows, column-major strideO truque da transposição
Uma solução elegante: A vezes B na ordem por linha é igual à transposta de B vezes A na ordem por coluna. Muitas pessoas simplesmente trocam os operandos em vez de transpor os dados.
Os escalares ficam em alpha e beta
Você passa alpha e beta como ponteiros. Use alpha = 1 e beta = 0 para obter um C = A * B simples, sem nada acrescentado.
const float alpha = 1.0f, beta = 0.0f;Chamando cublasSgemm
cublasSgemm é a GEMM de precisão simples para float. Sua longa lista de argumentos contém apenas dimensões, sinalizadores de transposição, escalares e os três ponteiros de dispositivo.
cublasSgemm(h, CUBLAS_OP_N, CUBLAS_OP_N,
M, N, K, &alpha, dA, M, dB, K, &beta, dC, M);Os ponteiros precisam estar no dispositivo
dA, dB e dC apontam para a memória do dispositivo. Passe ponteiros do host por engano e a cuBLAS retornará um erro em vez de um resultado.
Escolha o sufixo de precisão
A letra codifica o tipo: S para float, D para double, C e Z para complexos. Escolha Dgemm quando precisar de precisão dupla.
cublasDgemm(...); // double precision GEMMVerifique o status retornado
Toda chamada da cuBLAS retorna um cublasStatus_t. Compare-o com CUBLAS_STATUS_SUCCESS para que um identificador ou uma dimensão inválida nunca passe despercebido.
if (status != CUBLAS_STATUS_SUCCESS) { /* handle */ }Verificação rápida
Pense no formato de dados que a cuBLAS pressupõe.
Recapitulação
Você criou um identificador, respeitou o formato por coluna e as dimensões principais, definiu alpha e beta e chamou Sgemm com ponteiros de dispositivo. 🎯
Aprenda C++ com um tutor de IA — grátis
Escreva e execute código real no seu navegador, obtenha ajuda instantânea de um tutor de IA 24/7 e continue de onde parou na web ou no app.
- Cursos
- 30
- Aulas
- 120
Perguntas Frequentes
A aula “GEMM com cuBLAS do jeito certo” é grátis?
Sim — o texto completo de “GEMM com cuBLAS do jeito certo” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de CUDA Academy, atualize para CoddyKit PRO. O curso de CUDA Academy inclui 4 aulas no total.
O que vou aprender em “GEMM com cuBLAS do jeito certo”?
Identificadores, ordem principal por coluna e dimensões líderes. Você pratica CUDA Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.
Preciso ter experiência prévia para começar CUDA Academy?
Nenhuma experiência prévia é necessária. CUDA Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 1 de 4.
Quanto tempo leva a aula “GEMM com cuBLAS do jeito certo”?
A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.
Posso escrever e executar código nesta aula de CUDA Academy?
Sim. Cada aula de CUDA Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.
Todas as aulas deste curso
- GEMM com cuBLAS do jeito certo
- Vetores e transformações com Thrust
- Reduce, Scan e Sort com Thrust
- cuDNN para aprendizado profundo