Website-Suche

Meine Spiele ruckelten, bis ich eine Shader-Cache-Einstellung änderte, über die niemand spricht


Das Erstellen des Shader-Cachees eines Spiels beim ersten Start ist der schwierigste Teil, den man aushalten muss. Ich erinnere mich, dass ich The Last of Us Part 1 Remake auf dem PC bekommen habe, als es zum ersten Mal herauskam, und eine Stunde gewartet habe, bevor ich ins eigentliche Spiel eingestiegen bin, nur weil die Shader-Kompilierung so lange gedauert hat.

Die Shader-Kompilierung hilft einer GPU, Shader in ausführbaren nativen Code zu übersetzen, und sie erfolgt nur einmal. Dieser Cache kann jedoch manchmal versehentlich gelöscht werden, was zu Ruckeln führt, da die CPU ihn neu kompilieren muss, was die CPU belastet.

Glücklicherweise können Sie dies mit einer einzigen Anpassung im Nvidia-Kontrollfeld beheben, und Ihre Spiele müssen die Shader nach dem ersten Versuch nicht erneut kompilieren.

Ich habe Windows daran gehindert, alte Treiber zu behalten, und meine PC-Startzeit hat sich halbiert

Dabei habe ich auch etwas Speicherplatz zurückgewonnen.

Warum dein Shader-Cache immer wieder gelöscht wird

Nvidias Standardgrößenlimit verdrängt die Shader älterer Spiele

Die Shader-Kompilierung ist typischerweise ein einmaliger Prozess, und Ihre GPU speichert die kompilierten Daten im Treiberordner auf dem C:-Laufwerk. Diese Daten können jedoch manchmal über mehrere Spiele hinweg überwältigend werden, wodurch der Treiber der GPU den Cache für andere Spiele freigibt, um Platz für neuere zu schaffen.

Dies passiert normalerweise, weil der Treiber der GPU eine feste, manchmal unzureichende Cache-Größenbegrenzung festlegt, die den Cache leeren und das Spiel dazu bringen kann, Shader neu zu kompilieren, was zu Rucklern führt. Wenn Sie ein Spiel neu starten, dessen Shader gelöscht wurden, wird Ihre CPU mit der Kompilierung belastet, was Ruckler verursacht, die erst verschwinden, wenn die Shader vollständig kompiliert sind.

Dann kann das Wechseln zu einem anderen Spiel die Shader des vorherigen Spiels löschen, wenn der Cache voll ist, und so weiter.

Wie man das Shader-Cache-Limit erhöht

Ein Umschalter im Nvidia-Kontrollfeld

Sowohl AMD als auch Nvidia ermöglichen es Ihnen, eine bestimmte Größenbeschränkung für den Cache des Spiels festzulegen, und wenn Sie eine große Bibliothek wie meine haben, werden Sie wahrscheinlich häufige Shader-Neukompilierungen erleben. Um dies zu vermeiden, legen Sie eine benutzerdefinierte Größenbeschränkung für Ihren Shader-Cache fest.

Um dies zu tun, folgen Sie diesen Schritten:

  1. Öffne Nvidia Systemsteuerung.
  2. Gehe zu 3D-Einstellungen verwalten und dann zu den globalen Einstellungen.
  3. Finden Sie "Shader-Cache-Größe" und setzen Sie sie auf einen vernünftigen Wert, damit Ihre Spiele Shader nicht immer wieder neu kompilieren müssen, ohne den Gesamtspeicher zu beeinträchtigen. Ich würde empfehlen, sie auf ein höheres Limit, wie 5 GB, zu setzen, wenn Ihre Spielbibliothek riesig ist.

Leider erlaubt AMD nicht, die Shader-Cache-Grenzen festzulegen; der Treiber verwaltet dies automatisch, sodass nichts geändert werden muss.

Was die Benchmarks zeigten

Stotter-Spitzen schrumpften massiv






Jetzt wirkt sich der Shader-Cache nicht so stark auf die durchschnittlichen FPS aus wie andere Werte. Das liegt daran, dass das Spiel für einige Sekunden flüssig läuft und die Ruckler nur kurze Spitzen sind, die sporadisch auftreten, während die CPU den Rest kompiliert.

Deshalb sollte sich das Testen nicht auf die durchschnittliche FPS konzentrieren, sondern auf die Frame-Zeit und die 1%-Tiefs, die die Ruckler offenbaren.

Meine Testmethodik umfasste das Ausführen von 3 verschiedenen AAA-Titeln (aus meiner Bibliothek von insgesamt 15 Spielen) vor und nach dem Einrichten des benutzerdefinierten Shader-Caches auf einem PC mit einer RTX 4060, 16 GB DDR5-RAM und einem Ryzen 7 7800X3D, um zu sehen, wie groß der Einfluss auf die Spielleistung wäre, und hier sind die Ergebnisse, die ich gefunden habe.

Spiel

1% Tiefstwerte zuvor

1% Tiefstwerte Nach

Bildzeiten vorher

Bildzeiten danach

Stotter Spitze Vor

Stotter Spitze Danach

007 Erstes Licht

42FPS

44 BPS (+4,8%)

16,7 ms

15,1 ms

65 ms

42 ms

The Last of Us Part 2 Remastered

38FPS

39 BPS (+2,6%)

20 ms

17,8 ms

75 ms

58 ms

Cyberpunk 2077

61FPS

62 BPS (+1,6%)

12,5 ms

11,4 ms

38 ms

30 ms

Die Ergebnisse sind nicht universell und können je nach Setup unterschiedlich sein, selbst bei den gleichen Spezifikationen; auch die Spielzeit variiert, da wiederholte Durchläufe das Spiel flüssiger laufen lassen, sobald Shader korrekt kompiliert und zwischengespeichert wurden. Dies liegt daran, dass einige Spiele Shader vor dem Spielen kompilieren, während andere dies im Hintergrund tun, z. B. Cyberpunk 2077.

Abgesehen davon sind Stottern und niedrigere Frame-Zeiten nicht unbedingt ein Problem der Shader-Kompilierung und können durch Faktoren wie Asset-Streaming, CPU- oder GPU-Engpässe, veraltete Treiber usw. verursacht werden. Achte also darauf, die Ressourcennutzung zu beobachten, bevor du zu dem Schluss kommst, dass das Problem die Shader-Kompilierung ist.

Große DX12-Bibliotheken füllen den Standard-Cache am schnellsten

Die meisten Personen mit einigen installierten Spielen werden wahrscheinlich keine Probleme bei der Shader-Kompilierung haben, da das Standardlimit normalerweise hoch genug ist, um die Shader dieser Spiele zu speichern. Benutzer mit mehreren Spielen könnten jedoch auf dieses Problem stoßen, was noch deutlicher wird, wenn man ein Spiel nach langer Zeit spielt, da Ihr GPU-Treiber möglicherweise Shader entfernt und durch diejenigen eines anderen Spiels ersetzt.

DX12-Spiele kompilieren Tausende von Shadern, sodass sie den Cache schneller füllen als ältere Titel wie Forza Horizon 5 und Assassin's Creed Black Flag Resynced. Wenn also deine Bibliothek voller neuerer AAA-Release ist, erhöhe zur Sicherheit das Shadermlimit.