Hirdetés

Keresés

Új hozzászólás Aktív témák

  • Abu85

    HÁZIGAZDA

    válasz Oliverda #29679 üzenetére

    Nagyon leegyszerűsíted, pedig maga a probléma sokkal bonyolultabb. Amikor a Microsoft megszabta a bindless specifikációkat, akkor két modellt különítettek el. Egyet kapott az NVIDIA, leginkább azért, mert külön kérték ezt, és természetesen bekerült az alapvetően tervezett pure bindless koncepció, amit tulajdonképpen az Xbox One-ra szabtak, de ezáltal nyilván a GCN is jó, és az Intel is támogatja már a Gen9-cel, mert ezt is finomították a véglegesítésre. Ez akkor magát a végleges állapotot tekintve nagyon jó volt, de hosszabb távon nagyon rossz, mert mindenkit bezár a második szintre, aki DX12 CPU-n futó binding API-ját valamilyen formában is használja a meghajtó implementációjában. Ilyenkor a meghajtó elhelyez egy erőforrás-leírót egy tömbbe. Amikor a wave-ek elkezdenek futni a multiprocesszoron, ezt a tömböt fogja a multiprocesszor igényelni. Ennyi lényegében a bekötés. De a probléma az vele, hogy a processzor segítségére van szükség ahhoz, hogy a GPU tudja honnan kell mit betölteni a memóriából. Ennél Tier2-es bindless szint, vagyis amit az NV-re csináltak, annyiban különbözik, hogy az SRV-ket és a samplereket be tudja tölteni a mintavételezőbe a branch egység. De a többi buffer view-re már a CPU kell. A Tier3-es pure bindless szint alapvetően annyi, hogy nem kell használni a DX12 CPU-n futó binding API-ját, mert a GPU-ban van egy programozható integer skalár egység, ami a CPU munkáját teljesen ki tudja váltani. Minden memóriahozzáférés, akár a szűrt adattal visszatérők is beleprogramozhatók a shaderekbe, mert lényegében erről szólnak a bindless szintek, hogy a CPU-t ne terheljék a fejlesztők ezzel a feladattal. Na most a programozhtóság megkövetelése miatt ezt nem tudod csak úgy fixfunkciós blokkal megoldani, ide kell egy olyan programozható integer skalár egység, ami megcsinálja a proci feladatát.

    Az NV idén már váltott, amiből arra lehet következtetni, hogy rájött arra, hogy második szint bezárja őket, mert ha a Voltában nincs programozható integer skalár egység, vagy ennek a funkcióit hatékonyan emuláló koncepció, akkor például hiába tud a Pascalnál több CBV-t, UAV-t kezleni, vagy esetleg hiába támogat minden bufferhalmaz esetében unpopulated RS bejegyzést, a DirectX 12 nem fogja megengedni neki az extra tudás kihasználását. Emiatt a Tier2-es bindless szint rendkívül korlátozóvá és haszontalanná vált.

    A Maxwell és a Pascal esetében az NV átváltott a pure bindless szintre, amit a végleges specifikációkkal szerencsére nem nehéz emulálni, mert volt esze a Microsoftnak, és tudták, hogy 5-6 éven belül az Intel és az NV nem fog memóriaalapú, a bekötési állapot szempontjából transzparens hardvert tervezni, vagyis nem fogják lemásolni a GCN-t. Igazából a Gen9 esetében az Intel is emulál. Náluk az IGP melletti procimagok megcsinálják azt, amit az AMD CU-iban található skalár egységek. Ezután az IGP multiprocesszorai az utolsó szintű gyorsítótárban elérhetik az információkat. Az egyetlen hátránya ennek (a procimagok extra terhelésén kívül persze) a divergens indexelés, de egyrészt a Gen9 multiprocesszorain nem sok lane fut, másrészt tele van vektorregiszterrel az architektára. Az NV-nek ez a megoldás valamivel károssabb, mert a SM-enként 4 KB-nyi vektorregisztert is bukhatnak, ami a regiszterszegény Maxwell és Pascal architektúrákban jóval több, mint az egészséges határ, de valószínűleg 10-15%-nál nagyobb büntit nem szereznek vele, és innentől kezdve a bindless motorok nem jelentenek problémát, tehát egyedül az erőforráshalmazok problémájával kell foglalkozni, mivel a Maxwell/Pascal csak olyan halmazokat hozhat létre, ahol a flagek csak egy kategóriába sorolt típust engednek használni. A Volta állítólag már olyan halmazok is létrehozhat, ahol használható az összes típus. Utóbbival hatékonyabban működtethető a hardver, és a GCN, illetve a Gen9 is így működik. Ez amúgy egy nagyon egyszerűen kezelhető dolog. Maximum romlik a hatásfok.

    Valószínűnek tartom egyébként, hogy amit ma látunk az NV implementációjában, az a Volta miatt van benne, mivel az sem kap majd programozható integer skalár egységet, viszont össze lesz vonva az L1 és az LDS. Ilyen formában az L1 kapacitása felhasználható az SM-ken belüli regiszterterület tehermentesítésére a bekötés szempontjából. Tehát a Volta egy ilyen emulációból valószínűleg 3-5%-nál többet nem veszít, és a futtatható warpok számát sem csökkenti majd a módszer.

    Egyébként egyetlen mai hardver sem kap EOL-t idén.

Új hozzászólás Aktív témák