Umí vaše grafická karta asynchronní shadery?
Včera jsme si podstatu asynchronních shaderů představili, dnes se podíváme konkrétněji na podporu u jednotlivých řad grafických karet. Úvodem jedno vysvětlení. V diskusích, ale i v některých článcích lze narazit na míchání několika čísel: třeba v případě Radeonu R9 290X se jednou mluví o maximálně 3 frontách, jednou o osmi, jednou o šedesáti čtyřech. Každý údaj se ale týká trochu jiné situace. Číslo tři souvisí s ukázkou, kterou AMD prezentovala ve slajdu, kde je zároveň pracováno s frontou pro datové přenosy (1), frontou pro grafiku (+1) a frontou pro výpočty (+1). Tím je ilustrováno, že architektura GCN je schopná pracovat se třemi typy front zároveň.
Číslo osm udává v případě Radeonu R9 290X počet ACE jednotek, tedy hardwarových bloků, které s výpočetními frontami pracují. Protože každá ACE jednotka sama o sobě umí pracovat s osmi frontami, je celkový počet, které podporuje GPU jako celek, rovný 64.
DirectX 12 v kombinaci s kompatibilními grafickými čipy umožňuje používat zároveň 1 grafickou frontu a 1 nebo více výpočetních front. Čím více výpočetních front je podporovaných, tím může být efektivita využití čipu vyšší - tato závislost ale v praxi nebude lineární; s počtem front zároveň bude ubývat nevyužitého potenciálu, takže i vliv bude menší a menší.
Krom množství výpočetních front, se kterými GPU zvládá pracovat, je důležitý fakt, zda umí pracovat s grafickou frontou a výpočetními frontami zároveň. To je podstatou asynchronních shaderů ve hrách. Například „velký Kepler“ a první generace Maxwellu umějí pracovat až se 32 frontami, ale pouze ve výpočetním režimu. Ve hrách je využita jen jedna fronta celkem a je třeba přepínat, zda bude využita pro grafiku nebo pro výpočty.
To vše je vyjádřeno v následující tabulce. Je převzatá z Anandtechu, ale výrazně rozšířená a přepracovaná. Originální verze totiž uvádí pouze kolik mají jednotlivé čipy hardwarových jednotek na práci s frontami, ale nikoli s kolika frontami tyto jednotky umějí ve skutečnosti pracovat (což je v naší tabulce vyjádřeno ve druhém a částečně třetím sloupci). Dále jsem doplnil více modelů grafických karet a běžnější modely APU:
jednotky front (queue engines) | front celkem (total queues) | grafick. + výpoč. front | asynchr. shadery | |
AMD GCN 3rd gen R9 285 / Carrizo | 8 | 64 | 1+64 | |
AMD GCN 2nd gen+ R9 290 / 295 / Kaveri | 8 | 64 | 1+64 | |
AMD low-power APU Kabini, Temash, Beema, Mullins | 4 | 32 | 1+32 | |
AMD GCN 2nd gen HD 7790 / R7 260 | 2 | 8 | 1+8 | |
AMD GCN 1st gen HD 7730 / 7750 / 7770 / 78x0 / 79x0 R9 265 / 270 / 280 | 2 | 8 | 1+8 | |
Nvidia Maxwell 2nd gen GTX 960 / 970 / 980 / Titan-X | 32 | 32 | 1+31 | |
Nvidia Maxwell 1st gen GTX 750 | 32 | 32 | 1 | |
Nvidia Kepler+ (GK11x) GTX 780 / Titan / Titan Black | 32 | 32 | 1 | |
Nvidia Kepler (GK10x) GTX 640 / 650 / 660 / 670 / 680 / 690 GTX 740 / 760 / 770 | 1 | 1 | 1 |
Z hlediska hráče je podstatný třetí sloupec. Pokud karta podporuje pouze 1 frontu zároveň, znamená to, že nepodporuje asynchronní shadery (tj. Kepler a první generace Maxwellu). Naopak pokud podporuje grafickou a výpočetní fronty zároveň (v tabulce ve třetím sloupci tučně jako 1+…), pak asynchronní shadery zvládá.
Kde mohou asynchronní shadery pozitivně ovlivnit výkon: Obecně ve hrách, které používají výpočetní potenciál GPU. Například pro obrazový post-processing včetně některých forem anti-aliasingu, pro fyzikální simulace nebo umělou inteligenci a podobně. Je ale třeba, aby to podporovala samotná hra - pouhé nainstalování DirectX 12 (či Mantle, Vulkan ap.) podporu asynchronních shaderů do hry nedoplní. Jako příklad využití asynchronních shaderů zmínila AMD Playstation 4 a hry Battlefield 4, InFAMOUS Second Son, The Tomorrow Children a z PC platformy Thief pod Mantle.