Lección 11: Divergencia de warp
Un warp es un grupo de 32 hilos que ejecutan la misma instrucción juntos (lockstep) bajo el modelo SIMT. Mientras todos los hilos de un warp sigan el mismo camino de código, el hardware los ejecuta juntos en un solo paso. Pero, ¿qué pasa cuando un if/else envía a algunos hilos por la rama if y a otr
Imagina un coro de 32 cantantes que deben cantar la misma nota en todo momento. Si la mitad tiene que cantar 'la' y la otra mitad 'do', el director primero deja que canten todos los que dicen 'la' (el resto se queda en silencio) y luego todos los que dicen 'do'. Eso toma el doble de tiempo. Pero si un coro entero canta 'la' y un segundo coro entero canta 'do', ambos cantan a la vez sin ningún desperdicio.
- divergencia de warp (warp divergence)
- Cuando los hilos de un mismo warp toman ramas distintas de un if/else, así que el hardware ejecuta los caminos en serie — el tiempo es la suma de los caminos.
- lockstep
- Los 32 hilos de un warp ejecutan la misma instrucción en el mismo paso. Esta es la base de SIMT.
- enmascaramiento (predication)
- Cuando solo algunos hilos de una rama están activos, el resto queda enmascarado: ejecutan la misma instrucción pero no escriben ningún resultado.
- rama uniforme (uniform branch)
- Una condición que todos los hilos de un warp evalúan de la misma manera (por ejemplo, por warpId), así que no hay divergencia ni penalización.