• Mitspieler gesucht? Du willst dich locker mit der Community austauschen? Schau gerne auf unserem ComputerBase Discord vorbei!

Shader kompilieren - Verständnisfrage

Nemesis200SX

Lieutenant
Registriert
Aug. 2012
Beiträge
744
Ich hoffe ich bin hier mit meiner Anfrage im richtigen Bereich, wusste nicht so recht wohin damit.

Das Thema Shader kompilieren ist ja in letzter Zeit ziemlich in den Fokus gerückt. Macht das ein Game vorab kann das mitunter eine ordentliche Zeit in Anspruch nehmen bevor man das Spiel starten kann. Macht das ein Game nicht, dann hat man pausenlos Ruckler im Spiel.

Dazu hätte ich nun zwei Fragen:

1) Warum war das bei früheren Games kein Thema sondern tritt erst seit Kurzem auf? Liegts an der besseren Grafik? Der höheren Auflösung? Oder was ist der Grund?

2) Warum ist das scheinbar nur am PC ein Thema? Auf Konsolen hätte ich davon noch nichts mitbekommen. Ist das der besseren Optimierung auf Konsolen geschuldet?

Würde hier gerne die Hintergründe verstehen.

Vielen Dank vorab
 
Nemesis200SX schrieb:
2) Warum ist das scheinbar nur am PC ein Thema? Auf Konsolen hätte ich davon noch nichts mitbekommen. Ist das der besseren Optimierung auf Konsolen geschuldet?

Shader sind hardware-spezifisch. Wenn ich als Entwickler exakt die Hardware kenne, auf der das Spiel ausgeführt wird, kann ich die vorher kompilieren und dem Spiel einfach beilegen. Das ist bei Konsolen der Fall. Bei PC's mit 10.000+ verschiedenen möglichen Hardware-Kombinationen nicht.
 
Als analogie vielleicht: Es gibt ja verschiedenste x86 erweiterungen wie AVX, AES-NI, SSE und Co. Die muessen auch mit entsprechenden Flags compiled sein um die beste Performance zu bieten.
 
CoMo schrieb:
Bei PC's mit 10.000+ verschiedenen möglichen Hardware-Kombinationen nicht.
soviele kombinationen sind es nun auch nicht, da nur die gpu-generation passen muss. ob nun eine 6400 oder 6950xt - die kompilierten shader sind aufgrund derselben architektur gleich. und zumindest unter linux lädt mir steam auch vorkompilierte shader runter.
 
Und neu ist das auch auf keinem Fall. Starte mal Battlefield 1942 aus dem Jahr 2002.
 
0x8100 schrieb:
steam auch vorkompilierte shader runter.
Aber auch nur wenn das Spiel mit Vulkan gespielt werden kann. Nativ oder als Übersetzer in proton. Das ist aber von Steam selbst und passiert öfters und nicht nur 1mal bei den Spielen. Zusätzlich zu den shadercaches die z.b. ein Spiel einmalig erstellt.
 
0x8100 schrieb:
soviele kombinationen sind es nun auch nicht, da nur die gpu-generation passen muss. ob nun eine 6400 oder 6950xt - die kompilierten shader sind aufgrund derselben architektur gleich. und zumindest unter linux lädt mir steam auch vorkompilierte shader runter.
Aus meiner Erfahrung in der HPC Entwicklung: So pauschal kann man das nicht sagen, denn zur bestmöglichen Performance gehört auch die Optimierung sämtlicher Batchsizes, Speicheraufteilungen der jeweiligen Hardware, um dann im Idealfall eine komplexe Aufgabe mit ihren seriellen/parallelen Anteilen (Amdahls Law) perfekt auf das Setup abzustimmen. Und das kann sich durch die unterschiedlichen Anzahlen von Compute Units, Speicher, und vorallem Cache-Größen auch innerhalb einer Generation massiv unterscheiden und Einfluss auf die optimale Parallelisierung haben. Das dann auch "hardcoded" durch den Compiler drin zu haben ist auch nochmal ein Vorteil.

Was als Nachteil von fest vorkompilierten Shadern noch hinzukommt, dass es dann auf Seiten der Treiber-Entwicklung viel weniger Möglichkeiten gibt, die Shader auf Seiten der Implementierung noch weiter zu optimieren, weil dann das "Don't brake the userspace" gelten würde.

Was Vulkan hier noch AFAIK macht, ist ein zweistufiger Prozess. Der Entwickler kompiliert die Shader bereits zu hardware-unabhängigen binary-blobs und bei Benutzung werden die dann erst für die spezifische Hardware kompiliert.

Bei Steam hat man natürlich den Vorteil, dass in dem riesigen Pool an Spielern bestimmt jemand mit dem gleichen Setup dabei ist, der Shader-Precaching nicht deaktiviert hat (womit man auch zustimmt, das die eigenen hochgeladen werden). Warum das Prinzip nicht auch unter Windows viel stärker genutzt wird, erschließt sich mir allerdings auch nicht.
 
MR2007 schrieb:
Aus meiner Erfahrung in der HPC Entwicklung: So pauschal kann man das nicht sagen, denn zur bestmöglichen Performance gehört auch die Optimierung sämtlicher Batchsizes, Speicheraufteilungen der jeweiligen Hardware, um dann im Idealfall eine komplexe Aufgabe mit ihren seriellen/parallelen Anteilen (Amdahls Law) perfekt auf das Setup abzustimmen.
das ist bestimmt richtig, allerdings scheint aco wesentlich mehr auf die generation zu schauen (gfx_level, GFX6 - 11) als auf die chip-familie innerhalb der generation:

Code:
~/Temp/compiler$ grep GFX8 * | wc -l
144

~/Temp/compiler$ grep polaris * | wc -l
4

aber da steck ich nicht weiter drin, war nur mal kurz rübergeschaut.
 
  • Gefällt mir
Reaktionen: Piktogramm
Zurück
Oben