Hirdetés

Elkészült a Microsoft első példaprogramja a shader modell 6.0-hoz

A Wave Intrinsics Sample számos célt szolgál, elsődlegesen a fejlesztőket tanítja meg az alapvető újítások használatára.

A hónap elején számoltunk be arról, hogy a Windows 10 őszi frissítésére végleges lesz a shader modell 6.0. Tesztelési céllal azonban 15063-as vagy újabb Windows 10 verziókon is használható, amennyiben ki van választva a fejlesztői mód és fel van telepítve az új shader fordítót tartalmazó fejlesztőkörnyezet.

Hirdetés

Mivel a véglegesítés gyakorlatilag már csak formalitás, a Microsoft kiadta az első példaprogramját a shader modell 6.0-hoz, amely a Wave Intrinsics Sample nevet viseli. Ez a wave intrinsics nevű újítást mutatja be nyolc leképezési módon keresztül.

Az alapértelmezett mód wave operáció nélkül
Az alapértelmezett mód wave operáció nélkül [+]

Az alapértelmezett módban természetesen nincs használva semmilyen wave operáció, így ez szolgáltatja az alapot. A többi nyolc mód különböző függvényeket vet be és a példaprogram a háromszög kinagyított részén vizualizálja a hatásukat. Természetesen a forráskód elérhető, vagyis látható az is, hogy az egyes függvényeket hogyan kell használni. Ez nagyon fontos tényező, mivel a shader modell 6.0 definiálja a wave terminológiát, így hatékonyan használható ki a modern GPU-kba tervezett szálszintű párhuzamosság. Az alapegység az úgynevezett lane, amely a feldolgozás egyetlen szála. A korábbi modellekben csak egy lane volt kiaknázva, vagyis a hardverek SIMD egységeinek optimális használata nagyon függött az implementációtól. A wave terminológia ezt egészíti ki, és lényegében behozza a wave-et, mint másik alapegységet, amely egy meghatározott számú lane-t futtathat párhuzamosan a multiprocesszorokon, mindezt anélkül, hogy a fejlesztőknek közvetlen erőforrás-korlátozással kellene élni a párhuzamosítás biztosítása érdekében. Ezzel az iránnyal számos ma is sűrűn használt algoritmus gyorsítható fel.

Fontos kiemelni, hogy az egyes architektúrák egy wave-ben eltérő számú lane-t támogatnak. Ezt az alkalmazásnak le kell kérdeznie, és a shader modell 6.0-t támogató implementációk el is fogják árulni, hogy az adott hardver egy wave-ben minimum és maximum mennyi lane-t támogat. Ez a mai hardverekkel megegyezik, vagyis mindkét lekérdezésre ugyanazt az értéket adják majd vissza a meghajtók, viszont a Microsoft fontosnak látta ezt megkülönböztetni a jövőben érkező hardverek miatt. A lényeg az, hogy az aktuálisan készülő, shader modell 6.0-t használó applikációk csak a minimum értéket fogják hasznosítani. Ezt az iparág egyébként az AMD-nél "wavefront size" (a GCN-es Radeonokon ez 64), míg az NVIDIA esetében "warp width" (a Maxwell és a Pascal architektúrára épülő GeForce-okon ez 32) értékként ismerheti.



A wave intrinsics egyes függvényeinek hatása egy wave-enként 32 lane-nel dolgozó architektúrán [+]

A példaprogram az előző bekezdés miatt vizualizálja a különbségeket, ugyanis az egyes eltérő architektúrák által kiadott minták különbözők lesznek. Nem is optimális olyan kódot írni, amely direkten igazodik az egyik hardverdizájnhoz. Például egy 32 lane-hez igazított kód az aktuális Radeonokon rossz kihasználtsághoz vezet, míg a 64 lane-re való optimalizálás azt eredményezi a GeForce-okon, hogy túlzott lesz a wave-ek közötti verseny az erőforrásért és gyorsan kifut a hardver a helyi adatmegosztásra szánt memóriából. Ezt elsődlegesen az Xbox One konzolok miatt érdemes megemlíteni, mert ott előszeretettel nyúlnak olyan optimalizáláshoz a fejlesztők, amely gyakorlatilag figyelembe veszi a multiprocesszorok adottságait, és azt feltételezi, hogy az egy wave-ben található 64 szomszédos lane egymáshoz képest garantált atomiság mellett futtatják az utasításokat. Ezzel elkerülhető bizonyos atomi, illetve szinkronizációs műveletek végrehajtása, amelyek a hardver számára drágák lehetnek. Emiatt sokkal célszerűbb lesz PC-n ténylegesen elvégezni a szükséges atomi, illetve szinkronizációs műveleteket, mivel úgy az eltérő architektúrák jól kezelhetők. Persze az Xbox One konzolokról áthozott, igen specifikusan optimalizált shaderek futtatása így is megoldható bármilyen hardveren, de a wave-enként nem 64 lane-nel dolgozó architektúrákon ez hátrányos, és itt mindegy, hogy felfelé vagy lefelé tér el a dizájn.

A Microsoft azt is elárulta, hogy korábban frissítették még a DirectX MiniEngine-t is, amelyben a Forward+ leképező teljesítményét javították wave operációk használatával. Ezt a rendszert még két évvel korábban adták ki demonstrációs céllal, így a fejlesztők kísérletezhetnek benne a DirectX 12-es technikákkal, illetve tanulhatnak is a forráskódból.

Hirdetés

Fotóznál vagy videóznál? Mutatjuk, melyik okostelefon mire való igazán!

PR Vásárlás előtt érdemes megnézni, mit kínálnak az aktuális telefonok, ha igazán ütős képeket vagy profi mozgóképeket szeretnénk készíteni.

Azóta történt

Előzmények