» »

Nova bitka v vojni grafičnih kartic

Da je računalništvo hitro se razvijajoča panoga čivkajo že vrabčki na vejah. Da se grafične kartice razvijajo še hitreje od ostalih področij znotraj računalništva, je takisto lahko jasno vsakemu, ki vsaj vsake toliko preleti kakšen cenik z računalniško opremo. Hitrost s katero prihajajo in odhajajo s teh cenikov razni modeli grafičnih kartic je namreč naravnost osupljiva. Mnogokrat pa je bilo že tudi v praksi dokazano, da je v vsakem hitrem svetu že majhna napaka dovolj za izpad iz igre, pa naj bo to izlet iz steze v formuli 1 ali pa zgrešena generacija grafičnih čipov v bitki za čim večji tržni delež. Nekaj let nazaj si je takšen izlet iz proge privoščil slavni 3dfx, kar so plačali s propadom podjetja. Lani pa si je podobeno napako privoščil še en gigant - NVIDIA. Prav zato so bile to rundo vse oči uprte v NVIDIO in ali jim bo uspela vrnitev v igro ali pa bodo počasi odšli v prašne strani zgodovine. Kako stvari stojijo danes?


Rdeči tabor

ATI je že pred dvema letoma izdal jedro imenovano R300 (in kartici Radeon 9700 in 9700 PRO, ki sta nosili ta čip). R300 je bil prvi čip, ki je bil izdelan z DirectX 9.0 v mislih in je bil predstavljen celo prej kot sama knjižnica DirectX 9.0. Kljub temu pa se je to jedro kasneje izkazalo za izjemno dobro zasnovano, saj je z manjšimi popravki zmoglo opraviti z vso konkurenco vse do nove generacije kartic, o katerih je govora v tem članku.


Novo jedro R420

Radeon X800 XT

vir: ATI

Tistim, ki nekoliko bolje spremljajo razvoj grafičnih kartic, je kodno ime R420 gotovo vsaj malce dvignilo obrvi. Proizvajalci namreč radi poimenujejo svoje koščke silicija z lepimi "okroglimi" imeni. Konkretno so zadnje tri ATI-jeve generacije nosile imena R100 (originalni Radeon), R200 (Radeon 8500) in že omenjeni R300. Dejstvo, da je nov čip imenovan R420, nakazuje, da je ATI delal na čipu R400, vendar je bil projekt opuščen. Na nove Radeone X800 bi tako lahko gledali tudi kot na rešitev v sili, ko je ATI ugotovil, da jedro R400 ne bi bilo konkurenčno.

Tega občutka se ne znebimo, ko si pogledamo same specifikacije, saj novi Radeoni iz družine X800 delujejo bolj kot štiri jedra RV360 zlepljena skupaj, kot pa povsem nov čip. To seveda ni nujno slabo, saj tako lahko pri ATI-ju sam čip bolje optimizirajo, ker vedo, kje so bile težave s prejšnjo generacijo. Poleg tega pa je tudi funkcijsko starejše jedro še vedno dovolj močno tudi za najnovejše igre. Kljub temu pa je v novem jedru tudi nekaj novosti. Najpomembnejša novost je gotovo algoritem za stiskanje tekstur 3Dc. Gre za predelavo že obstoječega DXTC (DirectX Texture Compression) oziroma S3TC in je bistveno bolj primeren za stiskanje t.i. normal map, ki jih na veliko uporabljajo sodobne igre (Doom 3, Far Cry,...). Igre lahko zato uporabljajo večje normal mape, ali pa za že obstoječe normal mape porabijo 4x manj prostora v pomnilniku grafične kartice. Vendar pa morajo to novo kompresijo igre posebej podpreti.

Mapa normal

Mapa normal zakompresirana z DXT1. 3Dc odpravlja te napake (glej nos pošasti). Napake pa postanejo še bistveno bolj očitne, ko je mapa normal uporabljena za izris luči.

Druga novost je sprememba v pixel shaderjih, ki so sedaj lahko dolgi do 512 ukazov (96 na R300), še vedno pa spadajo v generacijo 2.0 in ponujajo manj kot tisti v GeForce-ih FX. Tretja sprememba pa je, da so kotne funkcije sedaj en ukaz namesto makroja šestih ukazov, kar lahko precej pohitri shaderje, ki uporabljajo kotne funkcije. Med novosti bi lahko šteli tudi temporal antialiasing, vendar gre le za uporabo možnosti programiranja vzorcev za mehčanje robov, ki je prisotna že v R300. Velika prednost tega načina je, da z menjavanjem vzorcev za vsako izrisano sliko navidez podvojimo število vzorcev (torej 2x FSAA izgleda zelo blizu 4x FSAA). Ima pa tudi slabost, in sicer deluje dobro le pri dovolj velikem številu slik na sekundo (čez 60 fps).


Zeleni tabor

NVIDIA se je lani znašla v hudih škripcih, saj je njihov odgovor na Radeona 9700 PRO najprej pošteno zamujal, ko pa je kočno prišel na dan, se je izkazalo, da je v novih DirectX 9.0 aplikacijah tudi bistveno počasnejši. Kot da to še ne bi bilo dovolj, je bila kartica GeForce FX 5800 Ultra, zasnovana na jedru NV30, še pošteno glasna, in vse to je povzročilo, da dejansko ni nikoli ugledala polic trgovin. GeForce FX 5900 (NV35) je sicer odpravil nekaj arhitekturnih težav (o tem več malce kasneje), zaradi katerih je bil njegov predhodnik tako počasen v programih, ki so uporabljali pixel shaderje 2.0. Še vedno pa je ostala nadležna težava, ki je vztrajno zmanjševala hitrost shaderju skladno s količino uporabljenih registrov. Kljub funkcijsko bogatemu čipu je bilo pred prihodom nove generacije bolj ali manj jasno, da bo NVIDIA morala precej drastično poseči v arhitekturo, če se hoče enakovredno kosati s konkurenco.


NV40 stopi v ring

GeForce 6800 Ultra

vir: Nvidia

Da novi GeForce ni ravno zgled enostavnosti je razvidno že iz števila tranzistorjev v tej novi zverini, ki jih je kar 220 milijonov (160 milijonov v konkurenčnem Radeonu X800). Seveda pa samo število tranzistorjev ne odloča o zmagovalcu. NVIDIA je iz prejšnje generacije obdržala dobre lastnosti, predvsem velja tukaj omeniti tehnologijo UltraShadow, ki podvoji število izrisanih pik, ko so potrebne samo Z in stencil vrednosti (renderiranje senc v Doom 3), preostanek čipa pa je več ali manj povsem nov. NV40 je že po prvem pogledu v specifikacije funkcionalno zelo napreden čip, saj je prvi, ki podpira t.i. shader model 3.0 z vsemi novostmi, ki jih ti shaderji prinašajo. Omogoča dostop do tekstur iz vertex shaderja, kar nam omogoča displacement mapping. Podprogrami, vejitve in zanke delujejo tako na nivoju ogljišč trikotnikov (vertex shader), kot tudi na posameznih pikah (pixel shader). Pomembna novost je tudi možnost filtriranja tekstur zapisanih v 16 bitnem formatu s plavajočo vejico in "prelivanje" (blending) s tem formatom. Poleg tega pa je NV40 sposobna renderirati na 4 ločene površine, kar je podpiral že Radeon 9700, GeForce-i FX pa ne. Pomembna novost je tudi možnost instanciranja geometrije (geometry instancing), ki pohitri izris velike količine enakih objektov (gozd, travnik, kup asteroidov,...). Pri tem pa je potrebno omeniti, da geometry instancing zmanjša samo obremenitev na centralnem procesorju, saj imamo namesto 10000 klicev v grafično knjižnico (in posledično gonilnik) samo enega. Obremenitev grafične kartice pa je v obeh primerih povsem enaka, pravzaprav zna biti geometry instancing celo počasnejši v primeru, ko hočemo izrisati veliko objektov sestavljenih iz veliko trikotnikov, saj postane problem hitrost branja oglišč iz pomnilnika (vertex fetch), kar do sedaj še ni bil problem. Poleg tega pa to podpirajo tudi drugi čipi in ATI je že našel pot kako to funkcionalnost ponuditi na svojih karticah brez SM 3.0. Čip pa vsebuje še dve novosti, ki sta veliko bolj dobrodošli za končne uporabnike. NVIDIA se je končno oprijela mehčanja robov z rotiranim vzorcem (Rotated Grid FSAA), ki pri enakem številu vzorcev nudi boljše rezultate. Novost je tudi programabilen video pogon, ki vsebuje vse potrebne ukaze za kodiranje in dekodiranje video posnetkov. S tem bo mogoče razbremeniti centralni procesor, saj bo tako kodiranje kot dekodiranje video posnetkov v različnih formatih (MPEG, DivX,...) prevzela grafična kartica, seveda ob ustrezni programski opremi.

Predvsem pa je pri novem paradnem konju zelenih pomembno to, da ne vsebuje več napak prejšnje generacije. Pixel shaderji sedaj tečejo s polno hitrostjo tudi v polni natančnosti, pa tudi drastično zmanjševanje hitrosti ob uporabi večih registrov je preteklost. Še vedno pa polovična natančnost prinaša določene hitrostne prednosti (manj pritiska na registre pomeni, da kartica lažje skriva zakasnitve pri teksturiranju), vendar je to sedaj le še dodatna možnost kako še bolj pohitriti shader in ne več pogoj za normalno delovanje. Edina arhitekturna težavica je v bistvu ta, da je dostopanje tekstur iz vertex shaderja še dokaj počasno, vendar bodo to opazili le programerji, že osvežitev pa bo tudi to težavo odpravila.


Ko postavimo oba čipa bok ob bok...

...ugotovimo, da se na prvi pogled skorajda ne razlikujeta. Oba vsebujeta 6 cevovodov za obdelavo geometrije (vertex shader) in 16 cevovodov za izrisovanje pik (pixel shader) s po eno enoto za teksturiranje.

  R420 (Radeon X800 XT) NV40 (GeForce 6800 Ultra)
proces izdelave 130nm 130nm
število tranzistorjev 160 milijonov 220 milijonov
hitrost jedra 520 MHz 400 MHz
število cevovodov za izris pik 16 16
hitrost zapolnjevanja 8320 milijonov pik/s 6400 milijonov pik/s (12800 samo za Z in stencil)
število cevovodov za obdelavo geometrije 6 6
hitrost izrisovanja trikotnikov do 780 milijonov trikotnikov/s do 600 milijonov trikotnikov/s

Novi Radeon se zaradi precej višje frekvence (posledica manjšega števila tranzistorjev) očitno odreže bolje in vsi lahko mirno živimo naprej, saj že poznamo zmagovalca. Ali pač?

Vendar pa stvari niso več niti približno tako enostavne. Arhitektura vertex shader enot na obeh čipih je zelo podobna, saj je vsak cevovod za geometrijo tako na GeForce-u kot Radeon-u zmožen obdelati eno 128 bitno vektorsko operacijo in eno 32 bitno skalarno operacijo v enem ciklu. Kar se tiče fleksibilnosti je v prednosti sicer GeForce, ki omogoča daljše programe, dinamične vejitve in zanke ter dostop do tekstur, vendar je Radeon zaradi višjih frekvenc običajno hitrejši, ni pa nujno, saj si lahko z dinamičnimi vejitvami GeForce prihrani kar precej dela. Poleg tega pa maličenje geometrije v današnjih igrah sploh ni problematično, probleme pa pogosto povzroča hitrost pixel shaderjev.

NVIDIA je pri GeForce-ih FX pošteno zavozila ravno pri pixel shaderjih. NV30 je imel štiri cevovode od katerih je bil vsak zmožen hkrati prebrati dve teksturi (ali pa namesto dveh tekstur eno matematično operacijo s polno natančnostjo) in izvesti dve matematični operaciji s fiksno vejico (torej običajnih 32 bpp in ne 64 bpp ali celo 128 bpp). Taka arhitektura se je dobro obnesla le v DirectX 8.0 igrah (pixel shaderji 1.x). DirectX 9.0 oziroma pixel shaderji 2.0 pa zahtevajo vsaj 16 bitno natančnost s plavajočo vejico, zato je bil GeForce FX 5800 s štirimi operacijami na cikel pošteno za R300, ki so jih zmogli 8. Na NV35 je NVIDIA zamenjala dve enoti za fiksno aritmetiko z eno enoto za operacije s plavajočo vejico (ki pa ni bila sposobna vseh operacij), še vedno pa je ostajala velika omejitev število uporabljenih registrov, ki je hitro zmanjševala hitrost.

Če si sedaj pogledamo malce podrobneje še cevovod za izrisovanje pik na novem Radeonu X800 (ki je identičen tistemu iz prejšnje generacije):

Struktura cevovoda za izrisovanje pik na Radeonu.

vir: ATI

vidimo da ga sestavlja ena enota za teksturiranje in dve enoti za aritmetiko (24 bitna natančnost s plavajočo vejico). Obe enoti sta zmožni zastonjskih modifikatorjev iz pixel shaderjev 1.4, kar pomeni, da lahko gonilnik zazna množenje ali deljenje z 2, 4, 8 ali 16 in namesto enote za aritmetiko uporabi modifikator (zastonsko množenje in deljenje). Vendar pa je ena enota kar precej okleščena in ne zmore vseh ukazov.

Vsak cevovod za izrisovanje pik v novem GeForce-u pa je sestavljen iz dveh aritmetičnih enot, ki zmoreta izvajati vse ukaze iz specifikacije. Ker NV40 tako kot GeForce-i FX nima specifične enote za teksturiranje, to nalogo prevzame prva aritmetična enota, ki pa je tokrat zmožna prebrati le eno teksturo. Obe enoti sta tudi tukaj zmožni zastonjskih modifikatorjev iz pixel shaderjev 1.4, tako kot Radeon. Poleg tega pa sta obe enoti super skalarni, torej se lahko dva 2D ukaza izvedeta hkrati na isti enoti (za razliko od Radeona, kjer je lahko le en ukaz do 3D, drugi pa mora biti vedno 1D, torej skalaren). Zanimiva prednost je tudi to, da je prva aritmetična enota sposobna zastonj normalizirati vektor v polovični natančnosti, kar precej pohitri shaderje za izris luči, saj to prihrani kar 3 običajne ukaze. Tako kot pri vertex shaderjih pa tudi pri pixel shaderjih dinamične vejitve omogočajo programerjem, da si prihranijo nekaj nepotrebnega dela ali pa se znebijo podvojevanja dela in tako pohitrijo shaderje. Če si pogledamo še kako nekaj zadnjih čipov izgleda s stališča programerja:

  Radeon X800 GeForce 6800 Radeon 9800 GeForceFX 5900
Vertex shaderji
Verzija 2.0 3.0 2.0 2.0 razširjena
Največje število ukazov 256 512 256 256
Zanke, podprogrami, primerjanje s konstantami da da da da
Največja globina gnezdenja 1 4 1 4
Splošne primerjave, pogojno prekinjanje zank ne da ne da
Največja globina pri splošnem primerjanju - 24 - 24
Število različnih tekstur - 4 - -
Število konstant 256 256 256 256
Število začasnih registrov 16 32 16 12
Pixel shaderji
Verzija 2.0 razširjena 3.0 2.0 2.0 razširjena
Največje število ukazov 512 4096 96 512
Zanke, podprogrami, primerjanje s konstantami ne da ne ne
Največja globina gnezdenja - 4 - -
Splošne primerjave, pogojno prekinjanje zank ne da ne ne
Največja globina pri splošnem primerjanju - 24 - -
Število različnih tekstur 16 16 16 16
Število konstant 32 224 32 32
Število začasnih registrov 32 32 12 22

Ko potegnemo črto

Za to generacijo je očitno, da bo izredno izenačena. Kar ATI pridobi zaradi višje frekvence lahko NVIDIA odvzame z boljšo in fleksibilnejšo arhitekturo. Katera kartica pa bo zmagovala, bo v največji meri odvisno od igre in pixel shaderjev, ki jih bo uporabljala. NVIDIA se je z novimi GeForce-i zagotovo vrnila nazaj v igro in izničila prednost, ki si jo je ATI ustvaril v zadnjem letu. Prihodnost bo tako še zanimiva... Kot vedno.

Čudežno popotovanje skozi grafični cevovod

Čudežno popotovanje skozi grafični cevovod

Trenutno očitno živimo v obdobju, ko razni *PU-ji (Processing Unit) rastejo kot gobe po dežju. Nedolgo tega je tržne police ugledal prvi pospeševalnik fizikalnih izračunov (PPU ali Physic Processing Unit) PhysX podjetja Ageia. In ker to očitno še vedno ni dovolj, ...

Preberi cel članek »

Čudežno popotovanje skozi grafični cevovod II

Čudežno popotovanje skozi grafični cevovod II

V prvem delu smo si ogledali strukturo sodobne grafične kartice. Med drugim smo omenili shaderje, ki so zaradi svoje programabilnosti, nekakšno srce in duša sodobnih GPU-jev. Različni shaderji so odgovorni za različne strukture v grafiki (v Direct3D 10 so to oglišča, ...

Preberi cel članek »

Test 7800 GTX

Test 7800 GTX

GeForce napada v sedmo Po napetem tekmovanju za najhitrejši grafični procesor med NVIDIO in ATI-jem se razvoj novih grafičnih kartic kot kaže umirja. Od splavitve GeForce 6800 je minilo že dobro leto in kljub pritisku ATI-ja v obliki X850 sta oba proizvajalca nekako ostala v pat poziciji. NVIDIA je ...

Preberi cel članek »

Novosti DirectXa 9 - 1. del

Novosti DirectXa 9 - 1. del

No pa smo vendarle dočakali novo, dolgo pričakovano, različico knjižnice DirectX, ki jo je zlobni Microsoft, bolj ali manj skrbno skrival pred radovednimi očmi javnosti. V približno enaki tajnosti sta nastala tudi ta dva članka, ki vam bosta, vsaj upam tako, uspela ...

Preberi cel članek »

ATI Radeon 9700 - Nov kralj v grafični deželi

ATI Radeon 9700 - Nov kralj v grafični deželi

Če ne živite ravno v kakšnem zakotnem pragozdu ter lahko berete ta članek, potem ste gotovo že slišali, da je ATi izdal nov grafični čip R300, ki so ga poimenovali Radeon 9700. Kot verjetno že veste, novi Radeon s precejšjno lahkoto pomete z vso konkurenco ...

Preberi cel članek »