Lección 29: Ancho de banda e intensidad aritmética
Todo kernel hace dos tipos de trabajo: cómputo (operaciones de punto flotante, FLOPs) y movimiento de datos (bytes hacia y desde la memoria). Dos métricas simples nos permiten entender qué importa. La primera es el ancho de banda: cuántos bytes mueve la memoria por segundo. Lo calculamos como bytes
Imagina un camión que entrega ladrillos a un albañil: el ancho de banda es cuántos ladrillos entrega el camión por minuto, y la intensidad es cuánto trabajo dedica el albañil a cada ladrillo. Cuando la intensidad es baja, el albañil siempre espera al camión — la memoria es el cuello de botella. Cuando la intensidad es alta, el camión espera al albañil — el cómputo es el cuello de botella.
- ancho de banda (GB/s)
- Los bytes que la memoria mueve por segundo. Se calcula como bytes entre tiempo, convertido a GB/s dividiendo entre 1e9.
- intensidad aritmética (FLOP/byte)
- Los FLOPs realizados divididos entre los bytes movidos desde memoria. Baja = limitado por memoria; alta = limitado por cómputo.
- limitado por memoria (memory-bound)
- Un kernel de baja intensidad cuyo tiempo de ejecución está gobernado por el ancho de banda. Para acelerarlo reduces bytes, no agregas FLOPs.
- limitado por cómputo (compute-bound)
- Un kernel de alta intensidad cuyo tiempo de ejecución está gobernado por las unidades matemáticas, así que la memoria no es el cuello de botella.