Cómo se asignan los sombreadores al hardware GPU real

Cómo se asignan los sombreadores al hardware GPU real

En un intento por comprender mejor las GPU y su programación, me gustaría tener una mejor imagen mental de los sombreadores y cómo se implementan en la GPU. ¿Existe una relación 1 a 1 entre un programa de sombreado y un núcleo de GPU? Entonces, ¿un programa de sombreado de vértices se ejecuta en un núcleo mientras que, por ejemplo, el sombreador de fragmentos se ejecuta en otro núcleo? Entonces, ¿se pasan los datos del núcleo del sombreador de vértices al núcleo del sombreador de fragmentos? ¿O cada núcleo individual de una GPU es responsable de todos los sombreadores y de todo el proceso de gráficos? Lo que significa que un núcleo de GPU contiene el sombreador de vértices, el sombreador de teselación, el sombreador de geometría, etc. y cada núcleo generará un píxel final. Cualquier información que ayude a solidificar mi imagen mental sería útil.

Respuesta1

La relación exacta depende de la tarjeta y del conductor. Los programas de sombreado se convierten de formas genéricas (OpenGL o DirectX, por ejemplo) a algo que la tarjeta puede ejecutar directamente, algo así como una compilación justo a tiempo para lenguajes como Java que usan código de bytes.

Por tanto, la relación depende de la naturaleza del programa y de la tarjeta. Es posible que la tarjeta necesite asignar múltiples núcleos si el programa es grande y complejo, pero lo más probable es que un solo núcleo ejecute muchas instancias del sombreador en múltiples procesadores de flujo.

Las tarjetas modernas asignan el trabajo de forma dinámica, por lo que rara vez existe una relación 1:1. Cada núcleo tiene múltiples procesadores de flujo, por lo que puede manejar múltiples sombreadores simultáneamente, si no son demasiado complejos.

información relacionada