Vélemény: van aszinkron compute a Maxwellen?

Félreértések a köbön

Az elmúlt két hét csak úgy izzott attól a kijelentéstől, amelyet az Oxide Games fejlesztője tett arra vonatkozólag, hogy az NVIDIA legújabb, második generációs Maxwell architektúrája nem támogatja natívan az aszinkron compute képességet, aminek előnyeiről az alábbi hírben már írtunk. Ezt a hozzászólást a média az elmúlt napokban nagyon felkapta, és pillanatokon belül átfutott a weben, amiből aztán olyan anyagok is születtek, hogy a legújabb GeForce-oknak hiányos a DirectX 12-re vonatkozó támogatása, ami többszöri olvasásra is igen furcsa következtetésnek tekinthető.

Sajnos már most látszik, hogy egy ennyire egyszerű kijelentést mennyire félre lehet értelmezni, így jobbnak látjuk kifejteni, miről is van szó. Egyrészt az aszinkron compute a DirectX 12 multi-engine funkciójának része az aszinkron DMA képességgel egyetemben. Hivatalosan ezt multi-engine és szinkronizáció funkciónak hívják, de a szinkronizációt most ideiglenesen kivesszük a képből, hogy ne kelljen annyi tényezővel foglalkozni. Azért leírjuk, hogy utóbbi egy fontos szempont, mert az egyes feladatok futtatását megfelelő sorrendben kell elvégezni. Ezt a soros feldolgozás eleve garantálta, de párhuzamos feldolgozásnál már problémákat okozhat, ha még a szükséges adat megléte előtt megkezdődik egy feladattal kapcsolatos munka. Annak érdekében, hogy ez ne történjen meg, a fejlesztőknek szinkronizációt kell alkalmazni, így az egyes aszinkron feladatok futtatását megfelelően kell időzíteni.

Magát a multi-engine-t és szinkronizációt minden DirectX 12-t támogató implementációnak kezelnie kell, mert a multi-engine egy kötelező funkció az API-n belül. Alapjaiban arról van szó, hogy a hardver felé irányuló parancsok a DirectX 11-ben csak a grafikai parancslistába érkezhettek, és szépen sorban végre lettek hajtva. A DirectX 12 a grafikai mellé bevezetett még két parancslistát, amelyek közül az egyik a copy, míg a másik a compute parancsokat képes fogadni, előbbi felelhet az adatfeltöltésért, míg utóbbi a compute feladatokért. Az API-ba épített hierarchia alapján a copy motor kiterjesztése a compute motor, és ennek a kiterjesztése még a grafikai motor.

Ez azt jelenti, hogy a grafikai motor minden olyan képességgel rendelkezik, amivel a copy és a compute motor, míg a compute motor tartalmazza a copy motor képességeit. Ez a hierarchia teszi lehetővé, hogy a fejlesztőknek elég legyen multi-engine funkcióval kompatibilis kódot írni, és az fut bármelyik DirectX 12-t támogató hardveren. Ezzel gyakorlatilag a Microsoft kötelezővé tette a multi-engine kihasználását, hiszen minden DirectX 12-es implementáció képes értelmezni a három különböző logikai parancsmotort, így képesek kezelni az ezekbe betöltött feladatokat.

A fentiekből látható, hogy a multi-engine funkciót, és ezen belül az aszinkron compute képességet nagyon is érdemes támogatni, mivel nincs olyan DirectX 12-es implementáció, amely nem képes valamilyen módon futtatni egy multi-engine kódot. A Microsoft célja a fejlesztők kímélése azzal, hogy ne kelljen szükségszerűen minden gyártó minden különálló architektúrájára eltérő kódot írni, ami a PC-piacon biztosan nem működne. Az elmélet innen egyértelmű: egyetlen multi-engine kód fut minden hardveren, aminek van DirectX 12-es meghajtója, és ennyi. A gyakorlat mezejére átlépve azonban már vannak olyan dolgok, amelyekre nem feltétlenül reflektál az API.

A cikk még nem ért véget, kérlek, lapozz!

Azóta történt

Előzmények

Hirdetés