CUDA Academy · Aula

GEMM com cuBLAS do jeito certo

Identificadores, ordem principal por coluna e dimensões líderes.

Aula 1 de 413 etapas

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 * C

Toda 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 stride

O 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 GEMM

Verifique 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. 🎯

Grátis para começar

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

  1. GEMM com cuBLAS do jeito certo
  2. Vetores e transformações com Thrust
  3. Reduce, Scan e Sort com Thrust
  4. cuDNN para aprendizado profundo
← Voltar para CUDA Academy