Hlavní stránka Hardware Grafické karty Rozhraní DirectX 11 a jeho nejbližší budoucnost
Rozhraní DirectX 11 a jeho nejbližší budoucnost
autor: Z. Obermaier , publikováno 8.3.2010
Rozhraní DirectX 11 a jeho nejbližší budoucnost

Grafické karty jsou dnes zřejmě nejviditelnějším kusem hardware, kdy se nové generace s vyšším výkonem a technologiemi objevují v téměř pravidelných časových odstupech. Nejskloňovanějším slovem tohoto roku a zřejmě i několika příštích let bude bezesporu DirectX 11 jako nejvíce prosazované API.


Rozhraní DirectX 11 a jeho nejbližší budoucnost

Další podstatnou novinkou je konverze stávajícího Direct3D API ze striktně jedno-vláknové aplikace do více-vláknové. Je pravda, že paralelizace se dnes již stále více prosazuje a více-vláknových programů celkem přibývá. Ještě nedávno jsme mohli spočítat aplikace s podporou více vláken na prstech jedné (možná obou) rukou. Dnes je situace jiná, velká většina her už dokáže více než dvě jádra procesoru využít, stejně jako i náročnější uživatelské aplikace.

Multi-threading in DX11

Proto i zde Microsoft shledal jedno-vláknové Direct3D 9 API jako už překonané a s novou verzí nabízí jistou formu paralelizace. Základní myšlenkou je využití jader CPU tak, aby mohl probíhat zároveň rendering a další, v tu chvíli nevyužitá jádra, mohla například připravovat další scénu nebo objekty. Veškeré úlohy je možné v novém API Direct3D 11 znásobit a rozdělit do více vláken (threadů). S prvními prvky paralelizace jsme se mohli setkat už u DX10, kde nebyla pevně ukotvena ve specifikacích API. Zde ale záleželo na tvůrcích ovladačů a schopnostech programátora. I tak byl ale přínos malý, a nezbývalo než se pokusit jej zlepšit. Vývojáři se zaměřili na asynchronní nahrávání a vytváření zdrojů (resources) a paralelní vytváření renderovacích sekvencí (Display, Render List). Nejdůležitější novinkou je možnost rozdělit hlavní renderovací úlohu také mezi více vláken.

Všechny tyto funkce Direct3D 11 umožňuje. Proti starším Direct3D API je tu zásadní rozdíl, nahrávání a vytváření zdrojů (resources) musel být vykonáván ve stejném vlákně (threadu) jako rendering. Samotný proces renderingu je činnost, kterou nelze ve starším API nijak zásadně paralelizovat. Je totiž závislá na pevně dané posloupnosti dat a příkazů jdoucí za sebou. Rozdělením do více vláken by přibyly starosti se synchronizací, a tato věc by zřejmě přinesla více potíží než výhod. Samotný proces renderingu se tedy urychlit více vlákny nedal. Nyní je možné tyto činnosti oddělit do vlastních vláken a částečně je paralelizovat.

Aby toho bylo možné dosáhnout, rozdělila se DX11 vrstva na tři oddělená rozhraní (interface). Označují se Device (zařízení), Immediate Context (aktuální kontext), Deferred Context (odložený kontext). Každému z těchto rozhraní je přiřazeno vlastní vlákno (thread). Rendering se u DX11 přesunul z rozhraní Device do dvou dalších - Immediate a Deferred Context.

Rozhraní DirectX 11 a jeho nejbližší budoucnost

Rozhraní Device a Immediate Context se v DX11 mohou vyskytovat pouze jednou, každý ve vlastním vláknu. Naproti tomu může být Deferred Context spuštěn v mnoha dalších vláknech (na obrázku). V samotném Device jsou vytvářeny zdroje, v Immediate Context je pak renderována aktuální scéna. Multi-threading benefit spočívá v možnostech nahrávání a přípravy hotových Command nebo Display listů z mnoha spuštěných Deferred Context. Hotové části jsou poté vkládány do Immediate Context, jež je zpracovává. U starších Direct3D API vytvářel Device zdroje (resources), a pokud potřeboval načíst data nebo renderovat, musel pozastavit vytváření zdrojů. Nyní jsou zdroje vytvářeny v samostatném vlákně Device, rendering probíhá také v samostatném vlákně a nahrávání zdrojů a vytváření Listů také v mnoha dalších vláknech. Tuto techniku lze pod DX11 použít i na DX10 hardware, část (Deferred Context) musí být ale nahrazena softwarově. Plnou podporu má pouze DX11 hardware.



 
Komentáře naleznete na konci poslední kapitoly.
226 čtenářů navrhlo autorovi prémii: 53.8Kč Prémie tohoto článku jsou již uzavřené, děkujeme za váš zájem.
Tento web používá k poskytování služeb soubory cookie.