Wie Shaders der aktuellen GPU-Hardware zugeordnet werden

449
Boagz

In einem Versuch, die GPU- und GPU-Programmierung besser zu verstehen, möchte ich mir ein besseres Bild von den Shadern und ihrer Implementierung auf der GPU machen. Gibt es eine 1: 1-Beziehung zwischen einem Shader-Programm und einem GPU-Kern? Läuft also ein Vertex-Shader-Programm auf einem Core, während der Fragment-Shader auf einem anderen Core läuft? Werden dann Daten vom Vertex-Shader-Kern an den Fragment-Shader-Kern übergeben? 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, den Tesselations-Shader, den Geometrie-Shader usw. enthält. Jeder Core gibt ein abschließendes Pixel aus. Jede Information, die mir hilft, mein geistiges Bild zu festigen, wäre nützlich.

1

1 Antwort auf die Frage

0

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

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

Moderne Karten weisen Arbeit dynamisch zu, so dass es selten eine 1: 1-Beziehung gibt. Jeder Core verfügt über mehrere Stream-Prozessoren, sodass er mehrere Shader gleichzeitig verarbeiten kann, wenn sie nicht zu komplex sind.