¿Qué tan rápido son las sucursales en una GPU de última generación?

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).

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.

Los procesadores modernos son máquinas paralelas, en el mundo de la CPU, el término Superscalar se usó para denotar muchas de las características más nuevas. Las instrucciones están canalizadas, las ramas pueden causar paradas en la tubería, el costo exacto de la parada depende del programa y sus parámetros y también del procesador y microcódigo exactos.

Las CPU utilizan una lógica de predicción de ramificación compleja para aliviar el problema, pero esto es menos frecuente en el diseño de GPU, que adopta un enfoque diferente y dedica más silicio para tener muchas más unidades de procesamiento más simples.

Las arquitecturas SIMD en las GPU también causan otros problemas como Branch Divergence. Las instrucciones individuales se ejecutan en bloque entre unidades, la divergencia puede significar que ramas separadas se ejecuten en serie, por lo tanto, se pierde el paralelismo.

Las arquitecturas más nuevas admiten la predicción en hardware que permite que las instrucciones sean tratadas como NOOP en ciertas unidades. El enfoque minimiza los efectos de la divergencia mientras se adhiere al diseño SIMD.

Mira aquí :-
Capítulo 34. Modismos de control de flujo de GPU
http://www.nvidia.co.uk/content/