Több grafikus parancsprocesszor lesz az új GPU-kban?

Érdekes információk láttak napvilágot a napokban, melyek egy kevésbé ismert, de ugyanakkor lényeges probléma megoldását jelezhetik. Nevezetesen arról van szó, hogy a GPU-k már a kezdetek óta egyetlen parancsprocesszort használnak a grafikus feladatok fogadására, de ez a jövőben az architektúrák gyors skálázása mellett nem biztos, hogy elég lesz.

Korábban számos technikai elemzésben felmerült, hogy a multiprocesszorok számának növelése kellemetlenül hat az adott grafikus vezérlő kihasználhatóságára. Nyilván a probléma egy ideig kezelhető, így esetlegesen el lehet azon gondolkodni, hogy a tervezett multiprocesszorba több shader feldolgozó kerüljön, ezzel a multiprocesszorok száma alacsony marad, ami jobb kihasználást biztosít, miközben a shader egységek száma nő. Utóbbi koncepcióval viszont az a gond, hogy a multiprocesszorok úgymond túlhizlalásával számos limitáció születik meg, így például már a kommunikációra szolgáló belső összeköttetésekért felelős rendszer annyira komplex lesz, hogy a regiszterek számát, illetve a belső tárak buszszélességét kell limitálni, mert túl sok tranzisztort kell költeni az alapvető működés biztosítására. Természetesen megvan az a bizonyos arany középút, ami még elfogadható kompromisszumot jelent minden szempontból, de sokkal célszerűbb lenne a limitációk mellőzése és a multiprocesszorok kihasználhatósági problémájának megoldása.

Arra nehéz választ adni, hogy egy grafikus vezérlőn belül hány multiprocesszort lehet optimálisan működtetni. Ez nyilván függ a futtatott programtól, az architektúra jellegzetességeitől, a grafikus API működésétől, illetve még a grafikus meghajtótól is, tehát mondhatjuk azt, hogy nincs igazán kőbe vésve ez a paraméter. Az viszont biztos, hogy valamilyen terhelés mellett előjönnek bizonyos limitációk, ennek mértéke is változó, de ha már mérhető, akkor a probléma jellege behatárolható.

Ha az alapokig le akarunk ásni, akkor a gond ott kezdődik, hogy a grafikus vezérlők igazából heterogén módon programozható processzorok. A shader feldolgozók mellett még számos részegység található bennük, amelyek speciálisan elvégeznek bizonyos feladatokat. A feldolgozás ráadásul a program oldalán egy meghatározott futószalaghoz van kötve, vagyis a képkocka számítása úgymond lépcsőzetesen történik, így az egyes szakaszokat külön-külön, egymás után kell feldolgozni. Ez azért kellemetlen, mert a grafikus vezérlő sorban kapja a feladatokat és azokat sorban is hajtja végre. Maguk a feladatok persze párhuzamosan számolhatók, de ettől még a teljes munka szinkronizáltan történik, és a helyzetet tovább rontva az egyes szakaszok is speciálisan egy-egy részegységet terhelnek igazán.

A shadow mapok számítása a legtöbb modern motorban elkerülhetetlen, és ez a feladat főleg a ROP blokkokat terheli, míg a shader feldolgozókra relatíve kevés munkát ró. Ezzel lényegében a grafikus vezérlő számítási kapacitása a shadow mapok kalkulálása mellett nagyrészt kihasználatlan, mivel nincs mit futtatni a feldolgozókon, így az ehhez hasonló feladatok állandóan limitációkat jelentenek a hardverben, csak éppen eltérő terhelés mellett. Kitalálható, hogy minél több a lapkában található multiprocesszor, annál kevesebb lesz a valós programokban kihasznált shader feldolgozó. A probléma évek óta ismert, de eddig nem igazán tettünk ellene, viszont a Microsoft megelégelte a tétlenséget és az Xbox One APU-jának IGP-jét úgy rendelték meg az AMD-től, hogy legyen benne két grafikus parancsprocesszor. A koncepció előnye, hogy a hardver órajelenként két grafikus parancsot is képes fogadni, vagyis elméletben a duplájára nő a párhuzamosan futtatható grafikai feladatok száma.

Az Xbox One APU-jának IGP-je két grafikus parancsprocesszorral
Az Xbox One APU-jának IGP-je két grafikus parancsprocesszorral

Az Xbox One esetében a fejlesztőktől megtudtuk, hogy a Microsoft még nem építette be a DirectX 11.x API-ba ennek a kihasználását, de ettől még van mód a koncepció működését ellenőrizni. Az Xbox One IGP-je egyszerűen particionálható, vagyis teljesen fel lehet osztani két logikai blokkra. A program ezzel két külön IGP-t lát, mindkettőnek van saját grafikus parancsprocesszora, ACE egysége, számos multiprocesszora, illetve setup és ROP blokkja. Kvázi olyan, mintha két VGA-t raknánk a PC-be, csak itt a felosztás logikai és nem fizikai szinten történt meg. Nagyon érdekes, hogy a statikus particionálással kísérletező fejlesztők a hardver egyenlő felosztásával 20-30%-os gyorsulást mérnek különböző komplex képszámítási feladatokban ahhoz képest, mintha az IGP egy egész erőforrásként működne. A számítási teljesítmény abszolút nem változott, ahogy igazából a programkód sem (csupán hozzá kellett adni az AFR feldolgozást), viszont a felosztással két kisebb grafikus erőforrás keletkezik, amelyeket ugyanaz a kód hatékonyabban tud kihasználni.

A kísérletek alapján egyértelműen előnyös lehet a több grafikus parancsprocesszor használata a GPU-kban. Persze nem abban a módban, ahogy most tesztelik a fejlesztők az Xbox One-on, hiszen ezt sokkal ízlésesebb működéssel is meg lehet oldani. A DirectX 12 már kap egy olyan fejlesztést, mely tulajdonképpen úgy is képes több grafikus parancsprocesszort működtetni, hogy azok ugyanazt az erőforrást etetik. Az előnyök a fenti bekezdésben végzett kísérleti koncepcióhoz képest nem változnak, csak nem szükséges a statikus particionálás használata (ezzel az AFR feldolgozás sem), hiszen az API már úgy működik, ahogy a hardver elvárja. Ezzel kapcsolatban tervben van a grafikai parancsok prioritásának bevezetése is, amit szintén támogat az Xbox One IGP-je. Egy nagyon hasznos funkcióról van szó, hiszen bizonyos grafikai feladatokat ki lehet jelölni úgymond fontosnak, így a hardver ezek gyors végrehajtására koncentrál, míg a többi, kevésbé fontos feladatot igény szerint háttérbe szorítják. Többek között az occlusion query abszolút prioritást élvezhet minden mással szemben, így a lehető leggyorsabban kiderül, hogy mely objektumokat kell kirajzolni az adott jelenetből.

Az nagy kérdés, hogy a PC-s hardverekben hogyan lesz ez az egész megvalósítva, ha már a DirectX 12 támogatni fogja a koncepciót. Nyilván az AMD esetében egyszerűen csak elő kell venni az Xbox One terveit és átmenteni a fejlesztéseket, de az NVIDIA és az Intel, illetve a Qualcomm még nem beszélt erről az irányról. Az utóbbi három cég számára a koncepció megvalósításához mindenképp új egységeket kell tervezni. Valószínű, hogy a következő körben a combosabb dedikált GPU-k két grafikus parancsprocesszort kapnak, míg a gyengébb teljesítményű társak továbbra is egyetlen egységgel dolgozhatnak. Fontos kiemelni, hogy bizonyos számú multiprocesszorok mellett utóbbi is elég, csupán az erősebb hardverek hatékonyabb kihasználását kell segíteni, mindemellett lehet építeni az aszinkron compute előnyeire is, amelyeket már számos ma elérhető hardver támogat, csak kell egy grafikus API, amellyel ezek az extrákat bevethetők.

Előzmények

Hirdetés