Recenze Grafiky a hry

DirectX 12 Multi-engine: asynchronní shadery v praxi | Kapitola 7

Pavel Šantrůček

Pavel Šantrůček

17

Seznam kapitol

1. DirectX 12 Multi-engine: asynchronní shadery v praxi 2. Co jsou to Compute shadery 3. DirectX 11 4. DirectX 12: Multi-engine 5. Simultánní Multi-threading 6. Multi-engine - implementace AMD a Nvidia
7. MDolenc test: AMD 8. MDolenc test: Nvidia 9. MDolenc test: Nvidia (CUDA) 10. Ashes of the Singularity (v 0.49) 11. Ashes of the Singularity (v 0.60) 12. Závěr

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.

Reklama

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í.

DirectX 12 Multi-engine: asynchronní shadery v praxi

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

DirectX 12 Multi-engine: asynchronní shadery v praxi

- 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

DirectX 12 Multi-engine: asynchronní shadery v praxi

- 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

.


Předchozí
Další
Reklama
Reklama

Komentáře naleznete na konci poslední kapitoly.

Reklama
Reklama