Az NVIDIA korábbi programozója szerint szinte mindegyik játék hibás

Az idei GDC után a csapból is az új generációs API-k folynak, és a legtöbb álláspontot már ismerjük, de gyártók rendszerprogramozói rendszerint sosem nyilatkoznak. Nemrég egy cikkben részleteztük, hogy a grafikus meghajtók miképp működnek, így könnyebb lesz megérteni a PC-s játékiparban bekövetkező váltást, viszont egy bennfentes tapasztalata egy olyan terület, amely mellett nem lehet elmenni szó nélkül.

Promit Roy korábban dolgozott a Microsoftnak, illetve az NVIDIA-nak is, utóbbi cégnél a DirectX-et támogató részlegen belül. Elmondása szerint az volt a feladata, hogy megkeresse a Windows Vista operációs rendszeren hibásan futó játékokat, és kiderítse, hogy ezek miért nem működnek. Az első dolog, amit megtanult, hogy szinte mindegyik játék hibás, ideértve az AAA kategóriás címeket a legnagyobb kiadóktól. Példaként felhozta, hogy egy játék megsértette az DirectX 9-es API szabályait azzal, hogy sosem hívta meg a BeginFrame és EndFrame függvényeket, míg egy másik játék rossz shaderekkel került szállításra, ami az NVIDIA meghajtóját nagyon terhelte. Ezeket egyenként kellett kezelni azzal, hogy valaki leült és kiderítette, hogy mit ront el a játék, és azt valahogy befoltozta a grafikus meghajtón belül.

Hirdetés

A grafikus eszközillesztő ugyanakkor gigantikus. Elmondása szerint 1-2 millió sornyi kód csak az absztrakció, plusz 1 millió sor még az adott API. A DirectX 9-ben a Clear függvény kezelése majdnem ezer sor csak arra vonatkozóan, hogy a meghajtó hogyan válaszoljon a parancsra, majd ezután meg lehetett hívni a megfelelő függvényt, amely módosíthatta a kérdéses puffert. A eszközillesztők komplexitása tehát szinte kezelhetetlen.

A többszálú feldolgozás is komoly szerepet kapott 2005-ben, amikor elkezdtek terjedni a többmagos processzorok. A gyártók a világ legjobbjait szerződtették, hogy az eszközillesztőket többszálú feldolgozásra optimalizálják, aminek az eredménye ma is ott van a meghajtókban, csak éppen nem sokat ér. Példaként felhozta, hogy a Futuremark 5% extra tempót tud kisajtolni egy triviális tesztkörnyezetben, tehát a játékokban még ilyen apró előrelépésre sem volt esély. Végül a több GPU-s mód, vagyis a CrossFire és az SLI is túlkomplikált. Promit Roy úgy gondolja, hogy a gyártók erőforrásainak több mint fele csak a több GPU-s technikák működésének biztosítására megy el.

A fentiek tudatában elmondható, hogy az új API-k négy alapvető problémának a megoldására születtek. A legnagyobb kérdés, hogy miért hibásak a játékok? A válasz egyszerűen az, hogy túl komplexek az aktuális API-k. Túl sok esetben lehet komoly lassulást szenvedni csak a szoftveres rétegben, mindezt anélkül, hogy a játék programozója egyáltalán tudna róla, hogy valami nem hatékony.

A grafikus eszközillesztő széleskörű fejlesztése is trükkös. A rendszerprogramozó szerint az AMD és az NVIDIA képes rá, de az Intel, az Imagination, a Qualcomm és a többiek túl kevés befektetést eszközölnek. Ezt részben láthatjuk a gyakorlatban is, így az Intel eszközillesztői jól működnek az ismertebb játékokon, de a kevésbé neves alkotások már nem kapnak figyelmet, így esetenként összezuhan a teljesítmény. Mindemellett annyi buktató van, hogy fejlesztőknek is lehetetlen elmagyarázni, hogy miképp lehet megfelelő leképzőt írni.

Elmondása alapján évek óta elfogadott, hogy képtelenség megfelelő teljesítményt kihozni egy adott GPU-ból, ha a gyártóktól valaki nem analizálja a játék forráskódját egy fejlesztői meghajtóval, amely alapján optimalizálható a sebesség. Kétség kívül ez a legnagyobb probléma, ugyanis elenyészően kevés ember látja a játék forráskódját, illetve azt, hogy az miképp fut le a grafikus meghajtón, valamint a Windows kernelen. Ezért hatalmas ötlet az új generációs API-kban, hogy tűnjön el a hagyományos értelemben vett grafikus eszközillesztő, hogy a fejlesztő végre maga is láthassa mi folyik az alsóbb rétegekben, beleértve a hardvert.

Természetesen a többszálú feldolgozáson segítenek a legtöbbet az új API-k, ez ugyanis jelen formában katasztrofális, ehhez nincs mit hozzáfűzni. Emellett komoly előny lesz még a több GPU-s rendszerek közvetlen elérése. Ezt az AMD és az NVIDIA mindig is transzparens módon akarta megoldani, vagyis úgy, hogy a programozónak ne kelljen rá direkt támogatást írni. Ugyanakkor bizonyos fejlesztőknél ez a gondolat pont ellentétes hatást ért el, így csak a munkát nehezítette.

Az új API-kra egyébként nehezebb lesz majd kódolni, hiszen az adott fejlesztő direkten átveszi a grafikus meghajtó feladatait, az viszont még kérdéses, hogy mennyivel. Promit Roy szerint a Microsoft és a Khronos Group ARB csoportja mindig is rossz felfogásban fejlesztett, ami arról szólt, hogy biztosítsanak egy egyszerűnek tűnő felületet, és a komoly problémát okozó tényezőkkel majd a háttérben, csendben törődnek. Erre valóban egyszerű kódolni, de alapvetően nehéz a hibakeresés és az optimalizálás. Az új felfogás alapján viszont a szabványalkotók végre elfogadják a bonyolultabb API-k létjogosultságát, ha végül az adott program működni fog.

Azóta történt

Előzmények

Hirdetés