Dividir en teselas el producto interno
Cargue subtélicas de A y B en cada fase.
Dividir en teselas el producto interno es una lección gratuita de CUDA Academy en CoddyKit. Esta es la lección 2 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.
La idea del tiling
El tiling divide las matrices en pequeños tiles cuadrados que caben en la memoria rápida del chip. Los hilos cooperan para cargar un tile una vez y reutilizarlo muchas veces.
Por qué usar memoria compartida
Un tile reside en la memoria __shared__, visible para todos los hilos del bloque. Leerla es mucho más rápido que acceder una y otra vez a la memoria global. ⚡
__shared__ float As[TILE][TILE];
__shared__ float Bs[TILE][TILE];Un bloque, un tile de salida
Cada block es responsable de una sección de la salida C de tamaño TILE por TILE. Sus hilos colaboran para calcular toda esa sección.
El tamaño del tile coincide con el del bloque
Elija TILE igual al ancho del bloque, normalmente 16 o 32. De este modo, cada hilo carga exactamente un elemento de cada tile.
#define TILE 16
dim3 threads(TILE, TILE);Asignar el hilo a una posición del tile
Dentro del tile, la posición de un hilo es simplemente su threadIdx. Su fila y columna globales siguen procediendo de los índices del bloque y del hilo.
int ty = threadIdx.y, tx = threadIdx.x;
int row = blockIdx.y*TILE + ty;
int col = blockIdx.x*TILE + tx;Cargar un tile de A
Cada hilo copia un elemento del tile actual de A a la memoria compartida. Juntos, los hilos del bloque preparan un bloque completo de A de tamaño TILE por TILE.
As[ty][tx] = A[row*N + (phase*TILE + tx)];Cargar un tile de B
Al mismo tiempo, cada hilo carga un elemento del tile de B. Ahora ambos tiles están en el chip, listos para realizar lecturas repetidas y rápidas.
Bs[ty][tx] = B[(phase*TILE + ty)*N + col];Sincronizar antes de calcular
Llame a __syncthreads() para que todos los hilos terminen de cargar antes de que cualquiera lea el tile. Omitir este paso produce resultados basura.
__syncthreads();Calcular sobre el tile
Ahora cada hilo ejecuta un bucle corto sobre el tile y lee únicamente de la memoria compartida. Estas lecturas son mucho más baratas que las globales.
for (int k = 0; k < TILE; ++k)
sum += As[ty][k] * Bs[k][tx];La ventaja de la reutilización
Cada valor cargado se utiliza por TILE hilos en lugar de por uno solo. Esta reutilización de datos es precisamente la razón por la que el matmul con tiling es tan rápido.
Un solo tile no basta
Un solo tile solo cubre parte del producto escalar. Debe repetir los pasos de carga, sincronización y cálculo en varias fases, que se explican en la siguiente lección.
Comprobación rápida
Recuerde el orden de los pasos al trabajar con un tile compartido.
Resumen
Preparó tiles de A y B en la memoria compartida, sincronizó los hilos y después calculó con lecturas baratas desde el chip. La reutilización es la clave. A continuación vienen las fases. 🧱
Aprende C++ con un tutor de IA — gratis
Escribe y ejecuta código real en tu navegador, obtén ayuda instantánea de un tutor de IA disponible 24/7 y continúa donde lo dejaste en la web o en la aplicación.
- Cursos
- 30
- Lecciones
- 120
Preguntas frecuentes
¿La lección «Dividir en teselas el producto interno» es gratis?
Sí — el texto completo de «Dividir en teselas el producto interno» 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 «Dividir en teselas el producto interno»?
Cargue subtélicas de A y B en cada fase. 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 2 de 4.
¿Cuánto tiempo toma la lección «Dividir en teselas el producto interno»?
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
- El kernel matmul ingenuo
- Dividir en teselas el producto interno
- Recorrer las fases de las teselas
- Medir la aceleración