Mi a programozók gondja?
Az előbbi oldal alapján igen nyilvánvaló, hogy a hardver szempontjából mire van szükség: sok wave-vel jó lesz a kihasználtság, amivel magas lesz a teljesítmény. Elméletben mi sem egyszerűbb ennél, de a gyakorlat általában más lapra tartozik. A fejlesztőknek a modern GPU-kkal egyszerre van könnyű és nehéz dolguk. Talán nem lesz újdonság, hogy az AMD Vega és az NVIDIA Turing is úgynevezett SIMT dizájn, az érintett cégek elég régóta erre a működésre esküsznek, amelyet viszonylag egyszerű megtanulni, elvégre a wave-ek ugyanazokat az utasításokat futtatják a lane-eken (innen jön a Single Instruction Multiple Thread elnevezés). A programozó szemszögéből nincs explicit szálmenedzselés, se vektorokra való optimalizálás, vagyis a tipikus buktatók már a hardver oldalán meg vannak kerülve.
Van azonban más probléma (amit az előző oldal végén ecseteltünk), nevezetesen a statikus erőforrás-allokáció. Innentől ugyanis arra kell koncentrálni, hogy egy wave minél kevesebb erőforrást igényeljen, amivel nő a futtatható konkurens wave-ek száma. Ezt persze könnyebb leírni, mint megtenni, főleg amiatt, hogy a mai programokban tipikusan elterjedtnek számítanak az úgynevezett übershaderek, amelyek igen komplexek lehetnek. Emellett a GPU-k gyorsítótár-architektúrájának folyamatos fejlődésével ma már érdemes lehet az úgynevezett találati ablakra játszani. Ez egy leginkább konzoloknál alkalmazott optimalizálási technika, ami lassan átszivárog PC-be, és lényegében azt jelenti, hogy a lehetségesnél szándékosan kevesebb konkurens wave futtatását vállalja be a programfejlesztő, hogy megnőjön az az időtartam, amíg az adatok ottmaradnak a gyorsítótárakban, hogy ezeket esetleg ne kelljen újból a fedélzeti memóriából betölteni. Persze ez kockázatos játék, mert a GPU-kon belül rengeteg párhuzamos számítás zajlik, így a gyorsítótárakban is nagyon kevés ideig marad meg az adat, vagyis a találati ablak nem nő meg drasztikusan bizonyos trükkök bevetése mellett. Ettől függetlenül vannak olyan helyzetek, amikor ez egy értékes optimalizálási stratégia, és végeredményben ez hoz majd nagyobb teljesítményt.
A fentiekből látszik, hogy a mai GPU-kra való programozást úgymond könnyű elsajátítani, a régebbi, legalább tíz évvel korábbi hardverekhez viszonyítva mindenképpen, de rendkívül nehéz az optimalizálást mesteri szinten űzni, mert a modern GPU-k működése túl kötött, így relatíve kevés olyan helyzet van, ahol optimális a hatékonyságuk.
Ezektől függetlenül abból kell főzni, ami van, tehát ha a fejlesztők nagyobb teljesítményt akarnak kisajtolni shader programjaikból, akkor be kell tartani az AMD és az NVIDIA nagyrészt hasonló optimalizálási normákat megfogalmazó iránymutatásait. Ezekkel végeredményben igen jól működnek a mai GPU-k, de az alapproblémák ettől még léteznek, csak a szoftverek kezelik őket – már amelyik programban van erre optimalizálás.
A cikk még nem ért véget, kérlek, lapozz!