Lección 36: Proyecto final — Optimización de kernel de punta a punta
Esta es la lección final del curso. No aprenderemos un mecanismo nuevo — vamos a conectar todo lo que ya aprendimos en un solo proceso: cómo tomar un kernel ingenuo y lento y hacerlo rápido. La lista de verificación no es magia, es una secuencia de comprobaciones que ya vimos por separado. Primero,
Mejorar un kernel es como renovar una casa: no puedes simplemente pintar y esperar que funcione. Revisas qué está realmente roto — la plomería, la instalación eléctrica o el techo — y arreglas eso. Y hay un manómetro que no puedes ignorar: la medición (Nsight). Sin medir, arreglas la pared equivocada.
- lista de verificación de optimización
- Una secuencia de comprobaciones para mejorar un kernel: coalescing, shared memory, reducir divergence, ajustar occupancy, y medir en Nsight.
- cuello de botella (bottleneck)
- El límite real que hace más lento al kernel. Arreglar otra cosa no ayudará hasta que se aborde específicamente.
- medir primero
- Usar Nsight para identificar el cuello de botella antes de cambiar el código, en lugar de adivinar qué optimización hace falta.
- reducción de lecturas globales
- Trasladar datos reutilizados a shared memory reduce las lecturas desde la memoria global lenta, por ejemplo de K a K/TILE con tiling.