La divergencia de sucursales aún incurre en una penalización de rendimiento en las arquitecturas modernas de GPU.
Todos los hilos de una urdimbre (grupo de 32 hilos) ejecutan instrucciones en orden de bloqueo o SIMT, independientemente de la presencia de condicionales.
Entonces, en una cláusula if-else, tanto la parte if como la parte else se ejecutan por cada subproceso en una deformación divergente, con los subprocesos que no siguen la rama enmascarada (realizan operaciones nulas). Por lo tanto, si el condicional no sigue los límites warp (es decir, algunos subprocesos en el warp ejecutan la parte if y otros la parte else), el hardware se ve obligado a ejecutar el warp dos veces (recuerde: los warps solo pueden ejecutarse en lock- paso).
- ¿Cuáles son algunas aplicaciones sorprendentes de Machine Learning en el mundo real?
- ¿Las cadenas de caracteres chinas y japonesas son más difíciles de comprimir que las cadenas latinas?
- ¿Qué es el algoritmo LWL (aprendizaje ponderado localmente) sobre el aprendizaje automático? ¿Me puede dar alguna información al respecto?
- ¿Cuáles han sido los trabajos más interesantes en informática para 2011?
- Tengo un plan de 400 días para aprender sobre el aprendizaje automático. Espero construir mi propio bot de juegos que pueda jugar al menos 2 juegos. ¿Qué tan plausible es esto?
Los fabricantes de GPU están tratando de idear técnicas basadas en hardware para reducir esta penalización, pero hasta ahora, el enfoque habitual es modificar el algoritmo en sí mismo para minimizar las divergencias.
PD: Solo he trabajado con GPU NVIDIA, así que no estoy seguro de qué tan bien esta respuesta se generaliza a las GPU de otros fabricantes. Pero supongo que los problemas enfrentados son similares.