Na tentativa de entender melhor as GPUs e a programação da GPU, gostaria de obter uma imagem mental melhor dos shaders e como eles são implementados na GPU. Existe uma relação de 1 para 1 entre um programa de shader e um núcleo de GPU? Então, um programa de sombreador de vértice é executado em um núcleo, enquanto o sombreador de fragmento é executado em outro núcleo? Em seguida, os dados são passados do núcleo do sombreador de vértice para o núcleo do sombreador de fragmento? Ou cada núcleo individual em uma GPU é responsável por todos os shaders e todo o pipeline gráfico? Significa que um núcleo de GPU contém o sombreador de vértice, sombreador de mosaico, sombreador de geometria, etc. e cada núcleo produzirá um pixel final. Qualquer informação que ajude a solidificar minha imagem mental seria útil.
Responder1
A relação exata depende do cartão e do condutor. Os programas shader são convertidos de formas genéricas (OpenGL ou DirectX, por exemplo) em algo que a placa pode executar diretamente, como uma compilação just-in-time para linguagens como Java que usam bytecode.
Assim a relação depende da natureza do programa e do cartão. A placa pode precisar atribuir vários núcleos se o programa for grande e complexo, mas é mais provável que um único núcleo execute muitas instâncias do shader em vários processadores de fluxo.
Os cartões modernos atribuem trabalho de forma dinâmica, portanto raramente há um relacionamento 1:1. Cada núcleo possui vários processadores de fluxo, portanto, pode lidar com vários shaders simultaneamente, se eles não forem muito complexos.