Az új generációs konzolok, illetve számos aktuális, PC-s grafikus vezérlő tartalmaz olyan funkciókat, amelyek már a mai programok esetében is képesek lennének értékelhető extra teljesítményt felmutatni, de ezeket még mindig csak ízlelgetik a fejlesztők. Többek között ilyen az aszinkron compute, ami lényegében lehetővé teszi az éppen nem dolgozó shader processzorok befogását valamilyen compute feladatra. Mint ismeretes az aktuális grafikus API-k soros működésű rendszerek, ami azt jelenti, hogy a hardvernek küldött parancsokat a GPU sorban fogadja, és így is hajtja azokat végre. Ez az előző évtized fejlesztéseivel teljesen logikus működének számított, de manapság már némileg átalakultak a hardverek, illetve ezzel a fejlesztői igények is.
A hardverek szempontjából az Xbox One és a PlayStation 4 IGP-je, az AMD GCN architektúrájára épülő Radeon GPU-k és IGP-k, illetve az NVIDIA GK110, GK208 és GM107 kódnevű GPU-i rendelkeznek olyan parancsprocesszorral, amelyek képesek egyszerre több compute parancs fogadására, így lehetővé téve az aszinkron compute elérhetőségét. Jó hír tehát, hogy a gyártók látják az alapproblémát, hiszen tényleg igen kellemetlen az a szituáció, amikor az adott program a shadow mapok számításával van elfoglalva, ami főleg a ROP blokkokat terheli, míg a shader processzorok kihasználása eközben 10-30% körülire esik. Erre persze vannak ellentétes példák is, de a gond alapvetően ott van, hogy a GPU tulajdonképpen egy heterogén módon programozható processzor, és a többféle részegység hatékony és egyben párhuzamos kihasználásához párhuzamosan több eltérő parancs végrehajtása szükséges. A mai játékokban ráadásul rengeteg compute effekt van, amelyek a shadow mapok számítása közben elvben minden gond nélkül lefuthatnának hasznosítva a szabad shader processzorok jelentős részét.
Hirdetés
A hardver azonban nem minden, mivel az aszinkron compute funkciót szoftveresen is implementálni kell, illetve nem elhanyagolható módon kell egy olyan grafikus API, ami ezt támogatja. Utóbbi körbe az Xbox One DirectX 11.x, a PlayStation 4 GNM, valamint az AMD Mantle API tartozik, de opcionálisan a DirectX 12-ben is kihasználható lesz az újítás. Persze maga a koncepció ma is lehetséges lenne OpenCL-en keresztül DirectX vagy OpenGL interopot használva, de a programozók az efféle koncepcióknál jellemzően egyszerűbb megoldásokkal szeretnek dolgozni.
A fejlesztők sajnos a fonalat is lassan veszik fel, így jelenleg csak az exkluzív konzolcímek használnak aszinkron compute-ot, többek között az InFamous: Second Son épít rá, de igazából ennek a funkciónak általánossá kellene válnia, hiszen igen sok sebességet lehet nyerni GPU-limites szituációkban.
Az elsődleges probléma, hogy nem olyan egyszerű ezt a funkciót megvalósítani, mint amilyennek elsőre tűnik. Elvileg a feldolgozás jól elkülöníthető, de nagyon kell ügyelni arra, hogy az egyes parancsokhoz tartozó feladatok ne használják egyszerre ugyanazt az erőforrást. Ez természetesen soros feldolgozás mellett nem volt gond, mivel már maga a működési elv kizárja a hiba lehetőségét. Mindemellett érdemes manuálisan beállítani az erőforrásokat az aszinkron compute-hoz, amivel hatékonyan biztosítható a feldolgozás megbízhatósága. Utóbbi a kritikus tényező, mivel ha nem fut megbízhatóan a kód, akkor nem lehet kiadni, és vissza kell térni a soros végrehajtásra.
Aszinkron compute lehetősége a Frostbite 3-ban
Az jó hír, hogy a fejlesztők kísérleteznek, így a jövőben az aszinkron compute lényeges szerepet kaphat nem csak az exkluzív konzolcímekben. Többek között Johan Andersson az idei GDC-n elmondta, hogy a Frostbite 3 videojáték-motor leképzőjének megvilágítási fázisa futtatható párhuzamosan a shadow mapok kalkulálásával, és az előzetes tesztekben 80%-os a gyorsulás. Ez persze nem jelenti, hogy a végeredmény is ennyit gyorsul, hiszen az előbbi számítások csak egy kis részét képzik a teljes képkockára vonatkozó munkának, de a grafika és compute munka átlapolásának hatékonysága látszik, és nem kétséges, hogy a 80%-os extrából a végső képkockára vonatkozóan is marad nagyjából 10%-os tempóelőny. Emellett persze az előbbi extra begyűjthető még számos compute effektnél, tehát mindent megfelelően felépítve 10-40%-os gyorsulásokat sem lehet kizárni GPU-limites szituációkban. Minden attól függ, hogy reálisan mennyi parancs feldolgozása futhat egymás mellett párhuzamosan.
Azt sajnos nem tudni, hogy PC-n az aszinkron compute mikor veti meg a lábát. Nyilván a következő év végéig a Mantle-höz lesz kötve, így csak azokban a játékokban lehet rá számítani, amelyek ezt az API-t használják. A DirectX 12-től kezdve azonban lényegében szabványos formában is elérhető lesz a funkció, még ha csak opcionálisan is. A konzolok esetében valószínűleg általánossá válik a rendszer használata, legalábbis túl sok érvet nem lehet felhozni ellene.