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.

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.

Azóta történt

Előzmények

Hirdetés