cuBLAS GEMM bien hecho
Handles, orden principal por columnas y dimensiones principales
cuBLAS GEMM bien hecho es una lección gratuita de CUDA Academy en CoddyKit. Esta es la lección 1 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de CUDA Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de CUDA Academy incluye 4 lecciones en total.
Apóyese en los hombros de NVIDIA
Escribir a mano una multiplicación de matrices rápida es difícil. cuBLAS incluye un GEMM probado exhaustivamente que ya exprime su GPU casi hasta el máximo rendimiento. 🚀
Qué significa GEMM
GEMM significa multiplicación general de matrices. Calcula C = alpha * A * B + beta * C, el motor de los gráficos y el aprendizaje profundo.
C = alpha * (A * B) + beta * CToda llamada necesita un handle
cuBLAS mantiene su estado en un handle. Cree uno al iniciar, reutilícelo en cada llamada y destrúyalo al terminar.
cublasHandle_t h;
cublasCreate(&h);
// ... use h ...
cublasDestroy(h);La sorpresa del orden por columnas
cuBLAS espera matrices en column-major, el formato de Fortran. Sus arreglos de C++ suelen estar en orden por filas, por lo que esta discrepancia causa problemas a casi todo el mundo.
Dimensión líder
La leading dimension indica a cuBLAS el salto entre columnas en memoria. En una matriz M por N en orden por columnas y almacenada de forma contigua, es simplemente M.
int lda = M; // rows, column-major strideEl truco de la transposición
Una solución ingeniosa: A por B en orden por filas equivale a la transpuesta de B por A en orden por columnas. Muchas personas simplemente intercambian los operandos en lugar de transponer los datos.
Los escalares viven en alpha y beta
Debe pasar alpha y beta como punteros. Use alpha = 1 y beta = 0 para obtener un C = A * B sin añadir nada más.
const float alpha = 1.0f, beta = 0.0f;Llamar a cublasSgemm
cublasSgemm es el GEMM de punto flotante de precisión simple. Su extensa lista de argumentos solo contiene dimensiones, indicadores de transposición, escalares y los tres punteros a memoria del dispositivo.
cublasSgemm(h, CUBLAS_OP_N, CUBLAS_OP_N,
M, N, K, &alpha, dA, M, dB, K, &beta, dC, M);Los punteros deben estar en el dispositivo
dA, dB y dC apuntan a device memory. Si pasa por error punteros del host, cuBLAS devuelve un error en lugar de un resultado.
Elija el sufijo de precisión
La letra codifica el tipo: S para float, D para double, y C y Z para tipos complejos. Elija Dgemm cuando necesite doble precisión.
cublasDgemm(...); // double precision GEMMCompruebe el estado devuelto
Cada llamada a cuBLAS devuelve un cublasStatus_t. Compárelo con CUBLAS_STATUS_SUCCESS para que un handle o una dimensión incorrectos no pasen inadvertidos.
if (status != CUBLAS_STATUS_SUCCESS) { /* handle */ }Comprobación rápida
Piense en el formato de datos que presupone cuBLAS.
Repaso
Creó un handle, respetó el formato por columnas y las dimensiones líderes, estableció alpha y beta, y llamó a Sgemm con punteros al dispositivo. 🎯
Preguntas frecuentes
¿La lección «cuBLAS GEMM bien hecho» es gratis?
Sí — el texto completo de «cuBLAS GEMM bien hecho» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de CUDA Academy, actualiza a CoddyKit PRO. El curso de CUDA Academy incluye 4 lecciones en total.
¿Qué aprenderé en «cuBLAS GEMM bien hecho»?
Handles, orden principal por columnas y dimensiones principales Practicas CUDA Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.
¿Necesito experiencia previa para empezar CUDA Academy?
No se requiere experiencia previa. CUDA Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 1 de 4.
¿Cuánto tiempo toma la lección «cuBLAS GEMM bien hecho»?
La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.
¿Puedo escribir y ejecutar código en esta lección de CUDA Academy?
Sí. Cada lección de CUDA Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.
Todas las lecciones de este curso
- cuBLAS GEMM bien hecho
- Vectores y transformaciones de Thrust
- Reduce, Scan y Sort de Thrust
- cuDNN para deep learning