Aktuality  |  Články  |  Recenze
Doporučení  |  Diskuze
Grafické karty a hry  |  Procesory
Storage a RAM
Monitory  |  Ostatní
Akumulátory, EV
Robotika, AI
Průzkum vesmíru
Digimanie  |  TV Freak  |  Svět mobilně

DirectX 12 Multi-engine: asynchronní shadery v praxi

20.11.2015, Pavel Šantrůček, recenze
DirectX 12 Multi-engine: asynchronní shadery v praxi
Co jsou to asynchronní shadery a k čemu vlastně slouží? Jak zapadají do kontextu DirectX 12? Které grafické karty je podporují, které zase ne a proč? V dnešním článku odpovíme právě na takovéto otázky.

MDolenc test: AMD


Na diskuzním fóru Beyond3d vytvořil uživatel pod přezdívkou MDolenc poměrně zajímavý test, který zjišťuje chování grafických karet při odesílání mixovaných grafických a výpočetních úloh. Tento test spočívá v tom, že odesílá grafické příkazy (Draw calls) pomocí fronty grafické (3D queue) a zároveň paralelně také i výpočetní příkazy (Dispatch calls) pomocí fronty výpočetní (Compute queue). Počet těchto úloh je postupně navyšován až do počtu 512 a je měřen čas jejich zpracování. Dalo by se tedy říci, že tento test simuluje chování grafických karet při použití DirectX 12 a Multi-engine.

Test probíhá ve třech průchodech. V prvním průchodu jsou testovány pouze úlohy výpočetní, kde pro jejich odesílání na GPU je použita pouze jediná fronta (Compute queue) a zaznamenány časy exekucí. Ve druhém průchodu jsou pak na GPU zasílány souběžně úlohy grafické i výpočetní pomocí dvou front (3D queue a Compute queue) a opětovně měřeny časy. Třetím průchodem jsou pak všechny příkazy, jak grafické, tak také výpočetní, zasílány na GPU pomocí fronty jediné (3D queue) a samozřejmě opět měřeny časy. Tento třetí průchod ale v dnešních měřeních používat nebudeme a soustředíme se pouze na první dva průchody.

Pokud jsou naměřené časy snímků u obou průchodů totožné, znamená to, že výpočetní úlohy byly prováděny souběžně s úlohami grafickými a grafická karta pracuje v režimu SMT (simultánní multi-threading). V opačném případě, kdy se časy úloh v obou průchodech liší, výpočetní úlohy nebyly prováděny souběžně s úlohami grafickými, ale pouze sekvenčně, jedna po druhé a časy úloh se pak sčítají.



Mdolenc test AMD


Z grafu je patrné, že výpočetní úlohy (modrá) jsou dokončovány prakticky ve stejnou dobu jako úlohy grafické (červená). Latence výpočetních úloh jsou skryty v úlohách grafických a vše tedy funguje tak, jak by mělo.

Pomocí GPUView se pojďme podívat, jak věci fungují a probíhají uvnitř DirectX 12.

Průchod 1 – exekuce pouze výpočetních úloh

MDolenc test AMD 1.pass
- pro zvětšení klikněte na obrázek -

V tomto průchodu jsou zpracovávány pouze výpočetní úlohy, a jak se dalo očekávat, výpočetní Device Context aplikace AsyncCompute.exe (žlutá) odesílá příkazy do výpočetní fronty (COMPUTE_0), o kterou se následně stará příslušná jednotka ACE.

Průchod 2 – souběžné exekuce grafických i výpočetních úloh

MDolenc test AMD 1.pass
- pro zvětšení klikněte na obrázek -

V tomto průchodu jsou zpracovávány jak úlohy výpočetní, tak také grafické. Nyní aplikace AsyncCompute.exe vytváří kontexty hned dva. Device Context (světle fialová) odesílá výpočetní příkazy opět do fronty výpočetní (COMPUTE_0) a souběžně také Device Context (tmavě fialová) odesílá grafické příkazy do fronty grafické (3D). Jsou tedy využity zároveň dvě hardwareové fronty, kde o frontu grafickou se na GPU stará engine GCP a o výpočetní frontu pak zase engine ACE.
Doporučujeme náš velký přehled desktopových grafických čipů.