Shader Cache: definice a jak ovlivňuje herní výkon

Mnohokrát jste viděli mezi dočasnými soubory k odstranění Windows nebo pro získání prostoru tzv. DirectX shader cache nebo Shader Cache. Pokud jste někdy přemýšleli, co to je a proč výkon her po smazání prudce klesá, stačí si přečíst tento článek.

GPU jsou procesory stejně jako CPU, ale liší se tím, že jejich paralelismus je orientován na vlákna. Proto se říká, že grafický procesor je typu TLP, zatímco centrální je typu ILP. K tomu musíme dodat, že zatímco prováděcí vlákna v grafu nejsou orientována na procesy, ale na grafická primitiva nebo data.

Mezipaměť Shader

Jinými slovy, každý trojúhelník, pixel nebo fragment má svůj vlastní shader program pro každou fázi 3D potrubí. Který je napsán v jazyce vysoké úrovně, například HLSL, pokud mluvíme o DirectX nebo GLSL, pokud mluvíme o OpenGL nebo Vulkan. I když existují i ​​takové, které jsou exkluzivní pro určité systémy, jako je PSGL od SONY PlayStation konzole. Tyto programy je třeba zkompilovat, a tedy předat ze zdrojového kódu do binárního kódu.

Co je to Shader Cache?

Shader Cache CoD

Problém nastává, když na rozdíl od toho, co se děje s CPU, kde jsou všechny x86, v případě GPU není sada registrů a instrukcí běžná, a to nejen mezi značkami, ale ani mezi architekturami stejné značky. To znamená, že kód shaderů musí být zkompilován, když hrajeme, což způsobuje zadrhávání a problémy s výkonem. Vygenerovaný binární soubor je tedy uložen do souboru, který se po opětovném načtení hry znovu načte do video paměti grafické karty, kterou známe jako shader cache nebo shader cache.

Pokud tedy aktualizujeme naši grafickou kartu, budou se muset pro každou naši hru vygenerovat znovu, pokud ji smažeme z pevného disku nebo SSD také. To je navíc jeden z důvodů, proč není dobré posuzovat grafickou kartu, když hrajeme hru poprvé. Zvláště pokud chceme měřit jejich pravidelnou výkonnost.

VRAM také zabírá místo

Ovládací panel Cache Shader NVIDIA

Projekt GPU vaší grafické karty přistupuje pouze k systému RAM prostřednictvím rozhraní PCI Express a pomocí jeho jednotky DMA, takže mezipaměť shaderu bude načtena spolu s vizuálními informacemi nezbytnými pro složení scény z úložné jednotky do paměti RAM az paměti RAM do video paměti. I když se s DirectStorage očekává, že grafický hardware bude moci přistupovat k SSD přímo, čímž se sníží latence přístupu a problém závislosti na procesor.

Mnoho her je dobře vyvinutých a mezipaměť shaderu zabírá málo místa, ale jiné ne tolik a nakonec to zabere velké množství grafické paměti. To znamená, že pokud má ovladač přidružený limit nebo hru samotnou, najednou zjistíme, že nové kompilace nahrazují ty staré a vrátí se počáteční problémy s výkonem.

V každém případě musíme mít na paměti, že pokud hra, kterou hrajeme, vyžaduje místo ve video RAM, dá přednost vykreslování aktuálního snímku. Bude se tedy snažit získat dočasně vyrovnávací paměť shaderu uloženou v systémové paměti. Pamatujte také, že výpisy do úložné jednotky jsou vytvářeny nepřetržitě, protože jakmile bude shader grafického primitiva vygenerován, nebude nutné to dělat znovu.

Ray tracing a shader cache

V ray tracingu je nejčastěji kladená otázka GPU typu Boolean. Protíná tento paprsek toto primitivum grafu? Odpověď není vždy ano, a proto existuje podmínka, která nastane nebo nebude v závislosti na okolnostech. Proto při prvním spuštění tohoto shaderu bude nutné zkompilovat a vygenerovat cache shader pro všechny možné výsledky.

Shader Cache na konzolách

Konzoly XSX, XSS, PS5

Herní konzole bude mít vždy stejné komponenty, od prvního modelu, který opustí továrnu, až po poslední. Přestože uplynulo několik let, jeho specifikace se nezmění. Dnes například najdete starší modely než nejstarší grafické karty. Jednou z možností, jak využít jeho hardwarovou neměnnost, je využít takzvané shadery již zakompilované v instalaci hry. Díky tomu není nutné generovat shader cache pro každou hru, ale je to také dvousečná zbraň.

Pokud například chcete vytvořit výkonnější a zpětně kompatibilní konzoli, máte následující možnosti:

  • Exportujte ISA do GPU nového systému, aby fungoval jako nadmnožina starého. To je to, co AMD udělalo v PlayStation 5 a Xbox Series s architekturou RDNA 2, aby hladce spouštělo hry předchozí generace určené pro GCN.
  • Integrujte všechny grafické obvody předchozího systému do nového systému. To je něco, co Nintendo udělalo na svých konzolích až po 3DS a SONY se svou druhou PlayStation a některými modely třetí.

Na úrovni emulátoru se v mnoha případech dělá to, že vezmete již zkompilované shadery a provedete opačný proces, čímž se vygeneruje přechodný kód, který dokáže vygenerovat mezipaměť Shader Cache vygenerovanou pro práci s vaší grafickou kartou. Není to však žádná exaktní věda a při spouštění her se můžete setkat s určitými grafickými závadami.

Optimalizace pro výrobce GPU

Organizace Lovelace Hopper

Oba NVIDIA a AMD obvykle zahrnují optimalizace v nejnovějších ovladačích pro nejnáročnějšíhrana hry. Ty zahrnují nejen optimální nastavení pro vyšší výkon, ale také již optimalizovanou shader cache pro každou hru a lepší specifikace než má základní hra. A jde o to, že oba výrobci mají zájem na tom, aby jejich nejpokročilejší grafická karta měla maximální možný výkon v nejvýkonnější hře ze všech, co dnes existuje.

Takže nechávají peníze různým vývojovým studiím, která optimalizují shader programy pro určité grafické architektury a vygenerují shader cache, která funguje lépe než ta, která je dodávána se základní hrou. Děje se tak s cílem podpořit nákup nových modelů a vytvořit zastaralost programu, což je nezbytné pro to, aby existoval tok spotřeby, který udržuje průmysl. To je důvod, proč mnoho her s téměř žádnými vizuálními změnami oproti předchozím dílům končí s horším výkonem.