Amikor az NV-nek van egy játékkal gondja - volt már ilyen, lásd Tomb Raider, Doom, stb. -, akkor azt csinálják, hogy nem beszélnek róla, amíg nincs driver. Mindig így csinálták, és ha megnézed, akkor most se reagálnak a World War Z-re. Majd megteszik akkor, ha már lesz hozzá driverük.
Ennek a fejlesztésnek semmi köze az AMD-hez. Ez gyakorlatilag a shader modell 6.0 Vulkan megfelelője.
Hogy mihez mennyi idő alatt jön javítás, nagyban függ attól, hogy mi a probléma. Például egy memóriamenedzsmenten belüli allokációs problémát sokkal egyszerűbb javítani, mint egy fordítási gondot.
Amiről szó van egy új képessége a Vulkan API-nak. Lényegében lehetővé teszi, hogy az egymástól független feladatok párhuzamos futtatását egy multiprocesszoron. Korábban ezek futtatása csak egymás után volt megvalósítható, ezért vezették be ezt az új képességet, így már egymás mellett is futhatnak. Az, hogy a driver oldalán mi a gond ezzel... kb. ezernyi oka lehet. Nagyon röviden, amikor shader fordítás történik, akkor a meghajtó a hardverre vonatkozó adatok birtokábak kialakítja a megfelelő wave-eket. Lesz egy kép arról, hogy a shader mennyi regisztert (compute esetén LDS-t is) használ, és a multiprocesszor képességeit figyelembe véve lesz egy szám, amennyi wave-et a multiprocesszor tud futtatni. Itt minden harver statikus particionálást használ, vagyis betöltenek minden adatot a regiszterekbe, még akkor is, ha sose nyúlnak hozzá. Minden gyártónak van egy jól kialakított képe arról, hogy az adott hardver multiprocesszora mire képes, hol van az a minimum/maximum határ, ami már rontja cachinget, vagy nem fedhető el a memóriakésleltetés, stb. és a fordító is próbál határokon belüli kódot fordítani, amennyire ez lehetséges persze. És itt van az a pont, amikor leginkább az segít, ha kitapasztalod, hogy mi a jó hardvernek. Általában ezért van az, hogy amikor kiadnak egy új architektúrát, akkor az első driverek nem valami gyorsak, mert még nem értik annyira a hardvert, de aztán írnak jobb shader fordítókat, és egyre jobb lesz gyakorlatilag ugyanannak a shadernek a hardveren való működése. Persze csodát nem lehet tenni, de problémás helyeken +20-30% is benne lehet, átlagban pedig simán meglesz a +5%. A probléma az új subgroup/wave terminológia esetében az, hogy független feladatok párhuzamos futtatása megvalósítható, tehát a wave-ekre vonatkozóan ugyan a hardver működése nem változott, de az új funkcióval a szálak, illetve inkább lane-ek képesek adatokat megosztani egymással, ráadásul nem csak shader lépcsőn belül, hanem shader lépcsők között is. A kérdés az, hogy a lane-ek közötti adatmegosztás tekintetében mi az optimális a hardvernek, érdemes-e változtatni a tipikusan jól működő wave mennyiségekre való optimalizálást. Ezekre nehéz felkészültni tesztshaderekből.
Ami biztos, hogy nem az NV-nél dolgoznak hülyék, hanem nincs elég adat ahhoz, hogy mindig jó döntést hozzanak, mert a PC-piacon ez egy újdonság, illetve a Nintendo Switch által használt API-k sem tartalmaznak subgroup/wave terminológiát. Ergo még nem volt igazán igény egyetlen ügyfél részéről sem arra, hogy a hardver működjön ilyen körülmények között is. Ezzel szemben az AMD-nél már a Sony eleve wave terminológiát kért a PS4-hez, aztán követte őket a Microsoft is, tehát a GCN-nél már 2012-ben felmerült az igény arra, hogy a hardver így működjön. PC-n pedig ugyanezt bevetették 2016-ban a Doom Vulkan portjában, akkor még nem szabványosan, de ahhoz is kell fordító. Ergo amíg az NV-nél egyetlen ügyfél sem kért subgroup/wave terminológiára optimalizált fordítót, addig az AMD-nél ez két ügyfélnél már lassan 7-8 éve igény, a PC-s partnerstúdiók tekintetében pedig három éve. Ennyi idő alatt azért elég jól rá lehet jönni arra, hogy az adott hardver mit szeret, ha a lane-ek között adatmegosztás lehet shader lépcsőktől függetlenül. Alapvetően egy év alatt ki lehet ezt tapasztalni, csak nem elég tesztkódokat futtatni, hanem kellenek a production ready cuccok.
Ilyen különbségek azért nem történnek meg sűrűn, mert általában a piac az újdonságokra egyszerre lép rá, tehát úgymond valami nagy változás bevezetésénél egyszerre szarok a driverek, amelyek egyszerre fejlődnek majd. Manapság az eltérések azért szaporodtak meg, mert az AMD mindent évekkel hamarabb megcsinált szoftveres szinten. Az explicit API-kra vonatkozó implementációt a Mantle-lel, ebből él a Vulkan és a DX12 is. Szimplán van egy PAL rétegük, ami egységes, és fölé húznak egy API-tól függő részimplementációt. Szoftveres szinten azért marha nagy előny, hogy már a DX12 és a Vulkan bemutatására van egy működő absztrakciós réteged a hardveren, amire csak húzol egy kvázi wrappert, és már megy is az egész. Eközben az Intelnek és az NV-nek semmije nem volt a DX12 és a Vulkan API-hoz. Ők nulláról indultak, nem több év tapasztalatból, illetve több tízezer sornyi gyakorlatilag 99%-ban hasznosítható kódról. Ugyanez a shader fordítónál. Az AMD-nek rég megvan, rég működik, míg az Intelnek és az NV-nek megint a nulláról kell felépíteni.
Azt értsétek meg, hogy itt nem a hardver a rossz, vagy az API, vagy bármi az iparágon belül, hanem az a különbség csak, hogy az AMD-nek voltak olyan megrendelői, akik igényt formáltak ezekre az újításokra, már azelőtt, hogy a PC-n szabványosítva megjelentek volna, míg az Intel és az NV esetében ilyen megrendelő nem volt, így nekik értelmetlen volt korábban ebbe erőforrást rakni. Most persze raknak, már megvan az igény, csak a bevezetés szempontjából már nem azt látod, hogy mindenki nulláról indul szoftveres szinten.
A VMA-nak pedig semmi köze a fentiekhez. Az csak egy menedzsment lib. Leginkább abban van jelentősége, hogy mennyi VRAM-ot használ a program, az allokációk törlése hogyan zajlik, van-e defragmentálás, ha igen, akkor hogyan, stb. Ez minden hardvert kb. ugyanúgy értint. Az, hogy bekapcsolták valószínűleg abból adódott, hogy a saját megoldásuk túl agresszív volt, így talán a kelleténél többször törölt allokációkat, ami akadozáshoz vezethetett. Inkább választották azt, hogy legyen több VRAM-igény. Ezt leszámítva más problémát nem fog okozni egyetlen hardvernek sem. A VMA-t nagyon sokan használják a piacon belül, mert időigényes ~13-15 ezer sornyi kódot magadnak bepötyögni, és a végén kb. ugyanott leszel, ahol az AMD megoldása. Inkább érdemes ezt módosítani az igényeknek megfelelően. Valaki persze nem módosítja. Például az Ubisoft elmondta az idei GDC-n, hogy bekapcsolták az Anvil Vulkan portján, és out of box működött az egész, sose kapcsolták ki többet. A Quantic Dream PC-s portjai is ezt használják majd, az új Wolfenstein is ezt fogja használni, bár tudtommal az id software módosít rajta, mert annál a motornál vannak igen specifikus igények, amit egy általános lib azért nem fed le, vagy nem elég jól.
[ Szerkesztve ]
Senki sem dől be a hivatalos szóvivőnek, de mindenki hisz egy meg nem nevezett forrásnak.