So werden Shader der tatsächlichen GPU-Hardware zugeordnet

So werden Shader der tatsächlichen GPU-Hardware zugeordnet

Um GPUs und GPU-Programmierung besser zu verstehen, möchte ich mir ein besseres Bild von Shadern und ihrer Implementierung auf der GPU machen. Besteht eine 1:1-Beziehung zwischen einem Shader-Programm und einem GPU-Kern? Läuft also ein Vertex-Shader-Programm auf einem Kern, während beispielsweise der Fragment-Shader auf einem anderen Kern läuft? Werden dann Daten vom Vertex-Shader-Kern an den Fragment-Shader-Kern weitergegeben? Oder ist jeder einzelne Kern einer GPU für alle Shader und die gesamte Grafikpipeline verantwortlich? Das bedeutet, dass ein GPU-Kern den Vertex-Shader, Tessellation-Shader, Geometrie-Shader usw. enthält und jeder Kern einen endgültigen Pixel ausgibt. Alle Informationen, die mir helfen, mein Bild zu festigen, sind hilfreich.

Antwort1

Die genaue Beziehung hängt von der Karte und dem Treiber ab. Shader-Programme werden aus generischen Formen (beispielsweise OpenGL oder DirectX) in etwas konvertiert, das die Karte direkt ausführen kann, ähnlich wie Just-in-Time-Kompilierung für Sprachen wie Java, die Bytecode verwenden.

Die Beziehung hängt also von der Art des Programms und der Karte ab. Wenn das Programm groß und komplex ist, muss die Karte möglicherweise mehrere Kerne zuweisen, aber wahrscheinlicher ist, dass ein einzelner Kern viele Instanzen des Shaders auf mehreren Streamprozessoren ausführt.

Moderne Karten verteilen die Arbeit dynamisch, sodass selten ein 1:1-Verhältnis besteht. Jeder Kern verfügt über mehrere Streamprozessoren und kann daher mehrere Shader gleichzeitig verarbeiten, sofern sie nicht zu komplex sind.

verwandte Informationen