Nvidia Maxwell má zásadní problém s DX12 asynchronními shadery
O asynchronních shaderech se vedou diskuse od letošního jara, kdy se tento termín poprvé objevil ve veřejné prezentaci AMD. Přínos této technologie tkví v tom, že DirectX 11, OpenGL a starší API dokázala pracovat maximálně s jednou frontou zároveň, takže se buďto prováděla grafická úloha, nebo výpočty (nebo případně datové přesuny). Další úloha byla realizována teprve až když předchozí skončila a byť čipy podporovaly mechanizmy, kterými bylo možné nějaké zásahy co do změn priority provádět, neobešlo se to obvykle bez výrazného (negativního) vlivu na výkon.
Pokud grafické jádro i API podporují asynchronní shadery, je možné kupříkladu využívat „bublin“ při zpracování grafického kódu a během nich zpracovávat například grafický post-processing scény. Post-processing pak nemusí mít jakýkoli dopad na výkon - jen využívá okamžiky, kdy výpočetní jednotky čekají (např. na dokončení práce texturovacích jednotek, ROP, datový přesun ap.).
Papírovou podporu asynchronních shaderů jsme si nastínili v tabulce v předchozím článku. Od grafických jader je vyžadována podpora jednoho grafického vlákna a minimálně jednoho výpočetního vlákna zároveň. Výpočetních vláken může být podporováno více - samozřejmě čím více, tím lépe, ale rovněž platí, že závislost reálného výkonu na počtu podporovaných vláken není lineární; s každým dalším navýšením bude už výkonnostní bonus menší.
Z her před érou DirectX 12 využívaly asynchronní shadery například některé tituly pro Playstation 4 (Battlefield 4, InFAMOUS Second Son, The Tomorrow Children) nebo na PC platformě Thief pro Mantle. Z DirectX 12 titulů se podpora jako první objevila u benchmarku chystané hry Ashes of the Singularity (více ve článku Vyšel první DirectX12 benchmark. Lépe dopadají Radeony, Nvidie test zpochybňuje). Následovaly rozsáhlé diskuse, do kterých se zapojili i vývojáři samotné hry z Oxide Games se zajímavou informací: Původně se snažili ke všem grafickým kartám přistupovat stejně, tzn. pokud jejich ovladač hlásí, že asynchronní shadery podporují, pak je hra využívala. Jenže u grafických karet Nvidie z druhé generace Maxwellu došlo namísto ke zvýšení výkonu k obrovskému propadu. Proto se vývojáři rozhodli provést detekci hardwaru a pokud hra rozpozná, že běží na GeForce, pak asynchronní shadery nepoužívá. Zástupce Oxide Games vyjádřil názor, že grafická architektura Maxwell hardwarově asynchronní shadery nepodporuje a k dispozici je snad jakási ne-nativní podpora. Jinými slovy karta hlásí, že technologii DirectX 12 zvládá, ale pokud je vyžadována, nějakým způsobem ji emuluje, což vede k propadům výkonu.
Později následovalo další vyjádření Oxide, podle něhož začala spolupráce s Nvidií na způsobu, jakým by bylo možné zlepšit podporu pro asynchronní shadery. Nvidia vývojářům Oxide sdělila, že na podpoře pro asynchronní shadery teprve pracuje - byť už v květnu vydala WHQL certifikovaný DirectX 12 ovladač, který hlásí, že tato technologie podporována je. Pozn.: pokud by toto nehlásil, nebyl by hardware detekován a zobrazován jako DirectX 12 feautre_level 12 (a výš) kompatibilní.
Situace vyvolala zájem dalších vývojářů a grafiků, kteří přišli se stejným zjištěním jako pracovníci Oxide Games: pokud dojde k použití asynchronních shaderů, dojde k extrémnímu výkonnostnímu propadu. Příčina problému není zcela jasná. Podle některých se ale zdá, jakoby v případě více než jedné výpočetní fronty kombinované s grafickou frontou nepracoval hardware s výpočetními frontami paralelně, jak je žádoucí, ale interně je zpracovával sériově (jako by byly zpracovány bez asynchronních shaderů).
Co se v prvních týdnech od vydání benchmarku hry Ashes of the Singularity mohlo jevit jako bug nebo nedodělek ovladačů, nyní nabírá trochu jiný rozměr. Při rozhovoru s vývojáři hry Aquanox Deep Descent vyšlo najevo, že tato hra nebude podporovat asynchronní shadery, protože by penalizovaly uživatele grafických karet od Nvidie. Jinými slovy, asynchronní shadery na GeForce GTX 900 působí propady výkonu, a tak tato technologie nebude k dispozici ani uživatelům Radeonů, kde funguje a působí navýšení výkonu. Zajímavé na tomto vyjádření je, že jej vývojáři předkládají jako fakt, nikoli jako dočasný problém, který bude Nvidií vyřešený v ovladačích.
Ať už má Nvidia problém s asynchronními shadery na úrovni hardwaru nebo softwaru, je velmi smutné, že toto někteří herní vývojáři vidí jako důvod k ignoraci jedné z klíčových technologií DirectX 12, která se měla významně podílet na výkonnostním bonusu nových API oproti těm stávajícím.