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

  • rudi

    nagyúr

    válasz Tyberius #282 üzenetére

    A DX10-zel nem csak a softveres (API-s) megközelítés változik gyökeresen, hanem a GPU-k hardveres felépítése is, kicsit boncoljuk ezt.

    Egy klasszikus GPU (legjobb példa erre a G7x sorozat, mert az X1000-es Radeonok más kicsit a jövő felé léptek) felépítése nagyos specifikusan blokkosítva van, ez a kép jól mutatja:
    [kép]
    Látható, hogy vannak a VS-esk (hozzájuk lehet venni még a Cull/Clip/Setup részt, ami a geometriát építi fel és kiszedi a takarásban lévő részeket stb.), majd egy elosztó, majd ismét szélesesdik az architektúra - jönnek a PS-ek - aztán megint jön egy crossbar osztónű és a ROP (raszterizáló egységek). Ehher kívültől csatlakozik még a memvezérlő, amit itt elég egyszerűen vázoltak fel, de az is egy masszív crossbar vezérlő, 256 bit esetén 4 ággal.

    Mi az a corssbar? Egy olyan összeköttetés kétfajta hardveregység között, ahol az egyik oldal minden eleme össze van kötve a másik oldal minden elemével.
    [kép]
    A G73 24 pixel shadere 6 négyes blokkba (quadba - elgyen annyi elég, hogy a quad a 2x2 pixelt jelent, és mindenféle pixelszámolás alapja) szervezve és a 16 ROP egysége között 96 szálat kell megvalósítani. 32 pixel shader (8 quad) és 20 ROP esetén már 160 szálat kellene kivitelezni, amit már eléggé bajos megvalósítani helyügyileg is. Nem csoda, hogy az R580 48 shaderét (12 quad, de még azon sem lepődnék meg, ha nem csak négyes blokkokba lehetne őket szervezni) már nem corssbarral valósították meg, hanem egy osztóművel és egy nagy közös (ez fontos, hogy közös) regisztertömbbel.

    De mi is az a regiszter? Nos az egy olyan, mondhatni adathely, amit a GPU számolói ''közvetlenük'' (idézőjelben, mert itt is van címzés meg pointerezés, de ez megint csak mellékes) nagyon kis késleltetéssel érnek el, ezekben található adatokkal hajtják végre a számolási műveleteket.

    No, de térjünk vissza a hardverfelépítéshez. Szóval adott egy halom, specifikus VS és PS, aminek mindnek megvannak a maguk kis cachejei (ezekbe töltik a szükséges textúrákat és adatokat) és korlátozott számú regisztereik (ezekbe töltik fel a Cacheből az éppen szükséges adatokat, amikkel a számolás zajlik). Egy ilyen felépítést (sok kis részegység, mondhatni processzorblokkok a processzoron belül) hardveresen megvalósítani, és összehuzalozni meg összeszervezni nem egyszerű feladat. Éppen ezért van az, hogy olyasmit pusmogtak pl a G70 (GeForce 7800 GT/GTX GPU-ja), hogy hardveresen 8-10 quad (vagyis 32-40 pixel shader!!!) meg van benne valósítva, de ebből átlagosan csak 20-24 életképes (!). Állítólag a G73 (GF7600-ag GPU-ja) is hardveresen 4 quados (16 PS-es).

    Ebből is látszik, hogy ez a quadozósdi már eléggé nehezen kezelhető felépítés lett. Mi a megoldás? Az, amit az ATI R5xx chipjainél láttunk, vagyis annak a továbbfejleszétse. Mit is tud az R5xx architektúra? A VS rész maradt a régi csak a pufferkezelését oldották meg (ez még fontos lesz). Utána viszont a PS-ek, textúrázók és ROP-ok kezelése gyökeresen megváltozott. Nézzük csak az R520 (X1800 GPU) blokkdiagramját:
    [kép]
    Van először is a ''diszpécseregység'', ami a munkát osztja (no alapvetően ő már egy nagy titok, és a jövőben érdekes lehet, kinek mennyire jön össze a megvalósítása). Utána jönnek a PS-ek egyelőre (ez is fontos lehet) quadokban. Amit észre kell venni, hogy ezek már nem közvetlenül tartalmazzák, a textúrázókat, hanem azok is külön blokkba kerültek, és a diszpécser kezeli őket. A textúrázók másik vége a most már közös, baromi nagy regisztertömbnél van. A pixel shaderek quadok működése most (Radeon X1000 családnál) úgy megy, hogy a diszpécser kiszól ''itt ez a shaderkód, és ez a regisztertartomány, tessék kiszámolni''.

    A közeljövőben, az uinified shaderes felépítéssel úgy módosul, hogy a diszpécser nem csak a PS-ek hanem általános shaderek fölött uralkodik. Innentől kezdve az utasításai nem úgy kezdődnek, hogy ''hé, pixelquad!'' hanem úgy, hogy ''hét ti, X számú általános sahder!'' az sem biztos, hogy továbbra is négyesével szóllítja majd meg a számolókat. A megszólítás úgy folytatódik tovább, hogy ''van itt egy VS vagy GS vagy PS meló''. Ez azt eredményezi, hogy amikor a korábbi 6-8 vertex shadeből 2-3 számolja a geometriát, a többiek beállnak pixelt vagy mást számolni. Ráadásul ennek a VS/PS terhelési aránynak még érdekesebb az eloszlása mint gondolnánk. Az alábbi ábra azt mutatja, hogy egy kép kiszámolása közben mikor, milyen terhelés van a VS és PS egységeken. Látható, hogy egyszerre szinte soha nincsenek kiterhelve.
    [kép]

    A másik dolog, hogy az ATI az X1000-ben már a sokhuzalos Crossbar vezérlőt is leváltotta Ring-busra. Erre most nem térek ki, az X1000 cikkben elmagyaráztam [link]

    Summázva. A szétválogatott blokkok, regiszterek és sok-sok összekötő huzal helyett most úgy épülhet fel egy GPU, hogy a következő elemei lesznek:
    - valami nagyon titkos, trükkös és okos diszpécser (ez lesz az érdekes rész)
    - baaaromi nagy általános, egyforma szhader számolókból álló hadsereg (ezt könnyebb lesz megvalósítani mint a mai, azért eltérő számolókat
    - az R580 256 kB-os tömbjénél is nagyobb regiszteróriás (ez tudtommal egyszerűbb megvalósítani mint számolókat vagy kisebb memóriablokkokat
    - amire az Xbox 360 GPU-ja (Xenos) alapján következtetni lehet, lesz még egy On-DIE (vagyis a GPU-val egy lapkára pakolt) memória, ami veszettül gyors lesz és akár 8-16 MB is lehet.
    - egy ring-bushoz hasonló memóriakezelés
    - kell még egy ügyes buszrendszer, ami összeköti a számolókat és egyéb egységeket.

    A nagy kérdés az lesz, hogy egy ilyen architektúra felületre/fogyasztásra/tranzisztorszámra/órajelre vetítve milyen hatékonyságot mutat majd a mai cuccokkal összevetve. Valószínű, hogy jóval hatékonyabb lesz.

    mindjárt folytatom a programozós résszel

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