Hitman a asynchronní shadery
Tak, jako v předchozím článku o počítačové hře Rise of the Tomb Raider, i dne budeme pomocí nástroje GPUView zkoumat využití asynchronních shaderů. Opět se budeme pídit po přítomnosti výpočetní fronty (Compute Queue) a zkoumat, jak je tato fronta využita enginem hry.
Veškerá dnešní měření byla prováděna v herním benchmarku, který je přímou součástí počítačové hry. Využil jsem prakticky nejnáročnějšího nastavení tak, aby se nám tam grafické karty příliš neflákaly. Samozřejmě, při výkonnostních testech bylo toto nastavení stejné jak pro DirectX 11, tak také pro DirectX 12.
Začněme tedy s GPUView na domácím hřišti a podívejme se, jak je na tom Radeon R9 390:
Tak, jak se dalo očekávat a předvídat, Radeonům DirectX 12 Multi-engine nečiní žádné problémy. Hra vytváří dva rozdílné kontexty (Device Context) a každý z těchto dvou kontextů pak plní rozdílnou frontu příkazů pro GPU. Jeden kontext vytváří grafické příkazy, které jsou na GPU zasílány prostřednictvím Hardware Queue 3D a druhý pak příkazy výpočetní (Compute), které zasílá zase pomocí fronty výpočetní (Hardware Queue Compute_0). V případě Radeonů tedy můžeme konstatovat, že počítačová hra Hitman 2016 asynchronní shadery podporuje. Druhou věcí je pak množství těchto výpočetních příkazů. Dle GPUView tyto příkazy vytěžují Compute Queue tak na 20-25 %.
Jak je na tom grafická karta GTX 980 společnosti Nvidia?
V případě grafických karet společnosti Nvidia jsou sice, podobně jako u Radeonů, vytvářeny také dva kontexty zařízení (Compute i Graphics), nicméně všechny příkazy jsou do GPU odesílány pomocí jediné fronty (Hardware Queue 3D) a výpočetní fronta (Hardware Queue Compute) zůstává prázdná. Můžeme tedy konstatovat, že v případě grafických karet Nvidia nejsou výpočetní shadery zpracovávány asynchronně, ale pouze sériově.
Pokud tedy máme ve využití asynchronních shaderů v této hře jasno, můžeme se směle pustit do nějakých těch testů. Zkoumat budeme samozřejmé rozdílné výkony mezi oběma grafickými kartami AMD a Nvidia, a také rozdílné výkony při využití různých 3D API, tedy DirectX 11 versus DirectX 12.