Keresés

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

  • Abu85

    HÁZIGAZDA

    válasz namaste #27948 üzenetére

    Arról van szó a keresztkötésnél, hogy maga a GPU egy heterogén processzor, és az egyes függetleníthető elemek nem direkten vannak csoportosan egymással összekötve, hanem a csoporton belül is mindegyik elem csatlakozik az előtte lévő csoport össze elemével. Tehát például az egyik setup motor az adatokat továbbküldésénél nem egy multiprocesszorokból álló tömböt céloz, hanem direkten egy multiprocesszort. A belső vezérléstől függ, hogy melyiket.

    A gyűrűs buszt korábban megválaszoltam: [link]

    Látszatra egyébként az AMD és az NV is egy tömbösítésben hisz, és a tömbön belül mindketten inkább keresztkötést használnak. De amíg az NV a tömbök összekötését is inkább így oldja meg, addig az AMD egy gyűrűs buszra fűzi ezeket. Az AMD a Vega esetében ezt Infinite Fabricra cseréli, ami egy NoC-szerű megoldás.

    A gyűrű vagy NoC teszi lehetővé, hogy olyan dolgokat rakjanak a hardverbe, mint a GDS. Ezzel ugye képesek az egész hardveren belüli munkát szinkronizálni. Az NV erre nem képes, mert csak egy GPC-n belül képesen fenntartani a szinkront, de GPC-n kívül már nem, illetve technikailag megtehetnék, csak annyira felesleges. A miértre az a válasz, hogy a global ordered append csoporton belül a legfontosabb függvény lényegében azt igényli, hogy maguk a wave-ek a dispatch sorrendjében fussanak le. Ezt az AMD úgy oldja meg, hogy a hardver folyamatosan kommunikálhat a GDS-en keresztül, hiszen mindegyik multiprocesszor hozzá van kötve ehhez a chipen belüli tárhoz. A szinkronizáció úgy valósul meg, hogy a GDS-be kerülő adatok alapján kapják meg a multiprocesszorok az engedélyt a wavefrontok futtatására, és ez garantálja a korrekt sorrendet. Ennek persze van egy olyan hátránya is, hogy globális szinkronizáció mellett minden multiprocesszor csak egy wavefront futtathat, de erre jött a GCN4-ben az utasítás-előbetöltés, illetve az, hogy a chipen belül marad a munka elég nagy előny. A global ordered append esetében ezt a funkciót az Intel és az NV emulálja. Erre már mindkét cégnek van drivere, és úgy csinálják, hogy a meghajtók lefoglalnak egy tárterületet a VRAM-ból. Az NV 128 kB-ot foglal le, igazából ez bőven elég, maga a lefoglalás a lényeg. Ezen a területen belül történik majd meg a szinkronizáció a processzor segítségével. Itt is multiprocesszoronként egy warp/wave/akármianevegyártónbelül fut, de a problémát az emulált megoldással az, hogy amíg tart az adatok kiírása és olvasása a szinkronizációra fenntartott memóriaterületre, addig egy teljes munkastop van a GPU-ra. Tulajdonképpen a memória elérése, a munkastop, illetve a késleltetés átfedésének ellehetetlenítése okozza a milliószoros teljesítménykülönbséget. Erre a függvényre tényleg durván rá kell tervezni a hardvert, hogy haszna is legyen, szabvány ide vagy oda.

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