3DMark: testujeme výkon DirectX 12
8.6.2015, Pavel Šantrůček, recenze
3DMark je jedním z prvních nástrojů pro testování režie 3D API a ačkoliv se objevilo hned několik více či méně povedených článků o měření DirectX 12 pomocí 3DMarku, my si dnes provedeme měření svá vlastní a samozřejmě nezůstane pouze u nich. Aktualizováno.
Kapitoly článku:
Mantle
Na začátku roku 2011 na bit-tech.net vychází rozhovor s názvem „Farewell to DirectX?“ s tehdejším šéfem divize pro vztahy s vývojáři společnosti AMD, Richardem Huddym, který se zhurta pustil do soudobé architektury DirectX a ostatních 3D API. Samozřejmě on už tenkrát dobře věděl, o čem mluví, protože AMD mělo již tehdy dlouhodobé zkušenosti s herními konzolemi, u kterých komunikace mezi hrou a grafickou kartou probíhá na nižší úrovni. Huddy také jako první vynesl na svět problematiku nízkého počtu Draw Calls díky vysoké režii samotného DirectX a poukázal na způsob, jakým se s vysokým počtem Draw Calls vypořádávají mnohem výkonnostně slabší herní konzole. Bohužel na jeho slova „direct-to-metal“ – tedy přiblížení vývojářů blíže k hardware – už nedošlo, protože na konci toho samého roku odešel z AMD do společnosti Intel.
Dlouho se nic nedělo, až na sklonku roku 2013 AMD představilo své nové 3D API s názvem Mantle, které přinášelo veškeré výhody světa herních konzolí do světa PC. Později vyšlo najevo, že hlavním iniciátorem Mantle byl Johan Andersson, tehdejší technický šéf vývojářů studia DICE, který měl díky vývoji her pro konzole k programování „direct-to-metal“ samozřejmě blízko také. Výhody „konzolového“ stylu přístupu k hardware byly zjevné, ale bez podpory ovladačů na straně grafických karet nebylo možno jakékoli nové API v praxi zrealizovat. Andersson tedy nelenil a postupně začal jednat o podpoře se společnostmi Intel, Nvidia a AMD. No a jak jeho jednání nakonec dopadla, víme asi už všichni.
Samotné představení Mantle v září 2013 bylo pro mnohé velkým překvapením a po prvních teoretických i praktických testech na začátku roku 2014 bylo jasné, že AMD drží v rukou nebývale mocný nástroj.
V každém případě Mantle s sebou přineslo mnoho technických a revolučních vylepšení, jejichž popis daleko přesahuje rozsah dnešního článku. Proto se teď zaměříme jen na jeho exekuční model, tedy na to, jakým způsobem jsou vytvářeny a odesílány příkazy na grafickou kartu.
V první řadě je zde zátěž API na vytváření příkazů (Command Bufferů) rozložena na všechna jádra procesoru tak, že každé procesorové jádro může samo o sobě vytvářet vlastní Command Buffery. Na vytváření Command Bufferů se tak může podílet každé jádro procesoru paralelně, což drasticky zkracuje celkovou dobu na vytvoření snímku. Kolik procesorových jader se pak má podílet na vytváření příkazů záleží pouze na vývojáři.
Když jsou Command Buffery vytvořeny, je nutné je odeslat k exekuci na grafickou kartu pomocí fronty s názvem Command Queue. Tato fronta je výsostně sériovou záležitostí, což znamená, že tudy proudí příkazy hezky jeden po druhém a pokud některý z těchto příkazů má na grafické kartě delší exekuční čas (je zpracováván déle), všechny další příkazy ve frontě za ním musí samozřejmě čekat. Typickým příkladem jsou vstupně/výstupní příkazy kopírování dat.
Mantle proto vedle této grafické univerzální fronty zavádí ještě další dva typy front. První z nich je DMA Queue, pomocí které mohou být na grafickou kartu zasílány vstupně/výstupní DMA příkazy. DMA fronta pracuje asynchronně, tedy paralelně vedle fronty univerzální, která pak může být použita výhradně na příkazy grafické.
Posledním novým typem je fronta výpočetní s názvem Compute Queue a jak už název napovídá, slouží výhradně k zasílání příkazů výpočetních. Těchto výpočetních front může vývojář použít vícero a všechny pracují opět asynchronně, tedy nezávisle na sobě a samozřejmě i nezávisle na univerzální grafické a DMA frontě.
Podmínkou využití těchto front je pak nutná podpora na straně grafické karty, která musí umět přijímat několik „Command Stream“, a tedy umět zpracovávat všechny tyto fronty paralelně.
Mantle toho přináší samozřejmě ještě daleko více jako třeba jiný přístup k paměti grafické karty, nebo individuální přístup ke každé grafické kartě v případě multi-gpu zapojení, ale o tom dnešní článek není.
Výhody Mantle byly zřejmé a odezva byla prakticky okamžitá. Apple začíná stavět svůj Metal. Kronos, který potřebuje nové OpenGL jako sůl, ohlašuje Vulkan. Microsoft urychleně ohlašuje DirectX 12.
A co se tedy nakonec s Mantle stane, až vyjde DirectX 12? Těžko dnes říct, ale protože se AMD vyjádřilo v tomto smyslu ...
"The Mantle SDK also remains available to partners who register in this co-development and evaluation program. However, if you are a developer interested in Mantle "1.0" functionality, we suggest that you focus your attention on DirectX® 12 or GLnext."
... vše nasvědčuje tomu, že svou kariéru zřejmě ukončí. Ať už to však dopadne jakkoli, jeho úspěšnost lze posuzovat ze dvou pohledů.
Pokud si AMD dělalo ambice na prosazení Mantle jako standardu, pak úspěšné určitě nebylo, a to i díky tržnímu podílu grafických karet AMD. Pokud jeho účelem mělo být vyprovokování ostatních k nějaké činnosti kolem stojatých vod 3D API, pak Mantle bylo asi tím nejúspěšnějším projektem za poslední dekádu v herní sféře.
Mantle bylo v technickém smyslu úspěšné a revoluční zejména i proto, že se na něm podíleli jedni z nejlepších herních vývojářů, kteří ho nasměrovali ke svým vlastním potřebám, a nikdo jim do toho nemluvil. AMD pak poskytovalo technickou a finanční podporu.
Stejně jako Kronos i my tedy poděkujeme AMD a půjdeme se konečně podívat na Microsoftí Mantle, tedy DirectX 12.