Branko Maksimović AMD ATI Radeon HD2900 XT Uvod Benchmark web sajt je ponovo od strane AMD-a prepoznat kao jedan od ključnih
IT medija u regionu, pa smo tako imali čast da prisustvujemo zvaničnom predstavljanju
ATI Radeon HD 2000 serije grafičkih akceleratora u Tunisu. Tzv. Tech Day manifestacija
koja se odigrala od 22. do 25. aprila u hotelu Sheraton u Tunisu upriličena
je od strane AMD-a, novog vlasnika kompanije ATI, za oko 300 novinara iz celog
sveta. Naravno, već po dolasku u hotel morali smo da potpišemo NDA (non-disclosure
agreement) koji nas je sprečavao da zvanično i nezvanično prenesemo bilo
kakve informacije koje smo u višednevnim predavačkim sesijama saznali u Tunisu.
Zaista, mora se odati priznanje organizatorima, jer su nas postepeno uvodili
u tehnološke finese novih akceleratora, da bi nas na kraju nokautirali tzv. deep
dive prezentacijama koje su trajale celog dana, ali na kojima smo mogli
saznati svaki detalj vezan za famozni R600. Pored novih ATI-jevih GPU-ova,
AMD je istom prilikom prezentovao i novu familiju svojih ”Stars” procesora
koji treba postepeno da potisnu dosadašnje procesore koje je AMD imao u ponudi,
a koji spadaju u ”Cities” seriju. Dakle, izgleda da je AMD odlučio
da se izdigne do neslućenih visina novim Phenom procesorima koji će
biti ponuđeni u ”X2” i ”X4” verzijama, u zavisnosti već od broja raspoloživih
jezgara. Da, radi se o dugo iščekivanim procesorima baziranim na K10 (prethodno
nazivano K8L) jezgrima koji bi uz R600 trebalo da nas uvere da se stvari oko
akvizicije ATI-ja od strane AMD-a, kreću u pravom smeru i da će priča imati
srećan završetak baš kao što to svi i očekujemo. Moramo priznati da gledajući
veliki broj slajdova na prezentacijama koje su trajale bukvalno po ceo dan,
nismo mogli da se otmemo utisku da je u razvoj R600 čipa uloženo na hiljade
sati inženjerskog rada, a u to su nas uverili i najviši predstavnici razvojnih
timova kompanije ATI koji su doputovali iz Kanade kako bi prisustvovali ”zatvorenom
predstavljanju” svog novog čeda. Veliki raspon između tzv. ”novinarskog predstavljanja”
R600 čipa i isteka NDA, koji je zabranjivao prenošenje tehničkih informacija
i rezultata testova novih ATI Radeon akceleratora, u neku ruku je i pozitivna
stvar. Naime, na taj način smo bili u prilici da hladne glave, nakon što su
se utisci dobro slegli, prenesemo vama, dragi čitaoci, naše mišljenje o novim
ATI-jevim akceleratorima. Da podsetimo, 14. maj je datum isteka važnosti NDA
ugovora za ATI Radeon HD2900XT i delimično za ostale predstavnike nove familije
Radeon 3D akceleratora. Znači, od današnjeg datuma, mogu se prenositi informacije
vezane za arhitekturu RV610 i RV630 čipova, ali ćemo na javnu objavu rezultata
testova morati sačekati 1. jul, kada će osim isteka važnosti NDA ugovora predstavnici
celokupne serije Radeon HD 2000 akceleratora biti dostupni u prodaji.
Uvod, drugi deo AMD definitivno ulazi u novu eru svog poslovanja i egzistencije. Od oktobra
prošle godine, kada je završena integracija sa kanadskom kompanijom ATI Technologies,
“novi AMD” je krenuo sa realizacijom novih projekata, prateći tako trendove
koji postaju dominantni u IT industriji, ali i postavljajući i sopstvene. Osim
već sada čuvenog “Fusion” projekta, koji će objediniti grafički i multipurpose
(sistemski) PU u jedno, tu su i projekti AMD Imageon familije media procesora,
kreiranih za sve zahtevnije tržište mobilnih telefona i prenosnih uređaja,
kao i GPU-a za igračke konzole (Microsoft Xbox360, Nintendo Wii).
Međutim, ono što je na Deep Dive prezentacijama u Tunisu bilo najbitnije predstaviti,
jeste nova familija Radeon akceleratora sa podrškom za DirectX 10. AMD je predstavio
kompletnu “top to bottom” ponudu, kako za dekstop, tako i za notebook tržište,
a novajlije nose novi prefiks u oznaci – HD, što je u skladu sa aktuelnim trendovima:
u poslednje vreme se sve označava sa ova dva magična slova. Nova Radeon familija
se sastoji od tri klase desktop akceleratora: ATI Radeon HD 2400, Radeon HD
2600, Radeon HD 2900, koje spadaju u value, mainstream i high-end (enthusiast)
kategorije, respektivno. Na još popularnijem, notebook tržištu, ATI
Radeon HD 2300 je rešenje za najjeftinije notebook računare sa discreete grafikom
(najjeftiniji po pravilu imaju integrisanu), dok su Mobility Radeon HD 2400
i HD 2600 namenjeni za prenosnike za zahtevnije korisnike, odnosno za igračke i
desktop replacement varijante. U kompaniji ATI, koji je sada “graphics
division of AMD”, se svo ovo vreme nikako nisu odmarali, pa nova Radeon HD
familija poseduje ključne karakteristike koje su zaista impresivne, od kojih
su mnoge po prvi put viđene kod desktop 3D i video akceleratora. Novi, R600
GPU je izrađen u 80-nanometarskom procesu i pored toga što ima čak 700 miliona
tranzistora, jezgro je sposobno za učestanosti od 800 MHz. Ovo veliko jezgro
u sebi sadrži čak 320 streaming procesora (naziv je verovatno sa namerom preuzet
od NVIDIA-e), koji su sposobni za vektorske i skalarne operacije i podržavaju
Shader Model 4.0 i DirectX 10. Još jedna od “velikih” brojki koje će partneri
postavljati na ambalažu Radeon HD2900 kartica je i podrška za 128-bit HDR i
24x anti-aliasing. Tu je i novi, Native Crossfire, koji smo prvi put videli
kod Radeon X1950 Pro i X1650 XT kartica, a koji će moći da se realizuje i na
“starim” Crossfire kompatibilnim pločama kakve su Intel 975 (i neke 965), zatim
RD580, RD560… Radeon HD kartice će, osim posvećenog video-engine-a
(nezavisni, hardverski dekoder HD video formata kakvi su H.264 i VC-1, a koje
AMD naziva UVD) imati podršku i za HDMI konektore, a da li će oni biti ugrađeni,
ili ćemo monitore (i LCDTV uređaje) na ovaj univerzalni audio-video digitalni
interfejs povezivati preko DVI-I-to-HDMI adaptera više i nije bitno. Novi Radeon
HD modeli svakako podržavaju HDMI i HDCP iz samog čipa, pa partneri neće imati
dodatni trošak oko implementacije ovih standarda na svoje kartice. Implementacija
HDMI konektora ima još više smisla kada uređaj na kome se nalazi može da reprodukuje
i zvuk, međutim, ni to nije problem za novi Radeon HD2900 akcelerator. I o
tome, nešto detaljniju priču možete pročitati na narednim stranama.
Već sa Radeon X1600, a nešto kasnije i sa high end Radeon X1950 čipom,
R580, ATI je predstavio tzv. asimetričnu arhitekturu, koja je imala tri puta
više Pixel Shader jedinica u odnosu na raster operator jedinice. Upravo
za ovu arhitekturu nam je rečeno da je “na pola puta” ka Unified Shader GPU-u,
koji smo tada svi tako željno očekivali, jer smo znali da predstavlja sledeći
korak (tada je već postojao Xenos – Unified Shader GPU koji je ATI kreirao za
Xbox360) na tako uzbudljivom tržištu grafike za PC računare.
Deep Dive in R600 Podsetićemo vas da je NVIDIA sa G7x i nV4x arhitekturom imala klasične Quad
jedinice sa jednakim brojem Pixel Shader i TMU jednica, pa je tako G71 imao
24 PS i TMU, 16 ROP i 8 Vertex Shader jedinica. ATI je dizajnirajući Xenos
GPU, predstavio prvi Unified Shader GPU, koji je uspešno prebačen na silcijum
još sredinom 2005. godine. Čak i krajem iste godine, njihov prvi Shader Model
3.0 (DirectX 9.0c) GPU, R520 je imao sličnu Quad Pipeline arhitekturu
kao i prethodna generacija grafičkih procesora, ali se jedan čip, RV530, isticao
naprednijim dizajnom, koji je kasnije nasledio Radeon X1950 XTX, odnosno R580.
Ovaj GPU je imao standardnih 16 ROP i TMU, ali čak 48 Pixel Shader jedinica. Ultra
Threading Dispatch jedinica posao deli u threadove i šalje ih na masivnu
paralelnu obradu. Sa G80, NVIDIA ide i korak dalje; ne samo što shader jedinice
postaju odvojene od teksturnog i back-end dela GPU-a, već postaju i “unificirane”.
Međutim, iako su sposobne da procesiraju i vertex i pixel shader instrukcije,
ovi Streaming Processor-i su po layout-u jednostavniji od
posvećenih Pixel i Vertex Shader jedinica, jer su u pitanju
obični skalarni procesori. S obzirom da su i vrlo efikasni u FP kalkulacijama,
lako je moguće programirati ih da rade operacije za izračunavanje boje piksela,
pozicije teksela, sila koje deluju na njih, ali i nečeg desetog. A s obzirom
na to da su jednostavne i “pakovane” odvojeno od ostatka čipa, bilo je moguće
dodeliti im visoke radne učestanosti – i do 3x više od takta na kome rade ROP
i TMU jedinice uže specijalnosti, odnosno memorijski kontroler. Međutim, i
ovaj princip poseduje negativne strane: skalarne jedinice ne mogu da rade sa
vektorskim operacijama, pa se svaka od vektorskih informacija prevodi u više
skalarnih i to po dva puta, u oba smera. Koliko god brz bio Streaming Processors
Unit, ovo dovodi do pada efikasnosti, pa je i nešto drugačiji pristup,
koji primenjuje ATI ako ne bolje, onda bar jednako dobro rešenje.
AMD-ov R600 GPU se sastoji od približno 700 miliona tranzistora, odnosno
osnovnih poluprovodničkih elemenata u 80-nanometarskom procesu koji AMD naziva
80HS. Prosto je neverovatno kada pomislimo da je jedan tako kompleksan čip
smešten na malu pločicu površine od svega par kvadratnih centimetara. Kako
bi bolje shvatili koliko su tranzistorska kola u modernim procesorima sitna,
preporučujemo da posetite ovu
web lokaciju. R600 nasleđuje najbolje od svojih prethodnika – Radeona X1950
XTX i naravno Xenos GPU-a, ali je i od njih značajno napredniji. Na default
taktu kod modela Radeon HD2900 XT, R600 isporučuje čak 475 GigaFLOPS-a, što
nam uz nešto više učestanosti (koje će 65-nm verzija čipa verovatno lako postizati)
i u Crossfire režimu donosi impresivnu cifru od čitavog TeraFLOPS-a, koja je
već merljiva sa pojedinim super-kompjuterima. Kao što možemo videti u tabeli,
R600 sadrži 16 TMU (texture management units), 16 render back-end jedinica
(češće smo ih nazivali Raster Operator Processors – ROP), kao i impresivnih
320 Stream Processor unita.
Radeon R600 je nastao na temeljima R580 arhitekture (jako brzo izvršavanje
dinamičkog grananja, posebne texture register cache memorije, fetch
4), dok je od Xbox360 GPU-a (Xenos) nasledio arhitekturu unificiranih vertex
i pixel shader-a, usavršeni load-balancing (između vertex, pixel i
geometry shader operacija) i maksimalizovanu upotrebu ALU jedinica. Naravno,
R600 je napredniji od oba ova GPU-a: superskalarna shader arhitektura je jedna
od ključnih novina, a poboljšan je i ultra-threaded dispatch procesor (u ATI-ju
tvrde da je razvijen od nule), dodata podrška za geometry shaders, odnosno
za DirectX 10 (R580 je DX9.0c, dok je Xenos nešto između DX9 i DX10). Kao što možemo videti na tabeli gore, R600 GPU se “sastoji” od nekoliko sistemskih
celina: Command Processor, Setup Engine-a, Ultra-Threaded Dispatch Procesora,
Stream Processing jedinica, teksturnih i keš jedinica, Memory Read/Write
Cache & Stream Out bafera, Shader Export, Render Back-Ends i
memorijskog kontrolera. Pogledaćemo i arhitekturu jednostavnijih RV6xx čipova,
o kojima će više reči biti u testu koji ćemo objaviti u junu, nakon isteka
NDA.
Unified Shader Architecture Prednosti koju arhitektura unficiranih tj. objedinjenih shader-a donosi u odnosu
na tradicionalnu, sa podeljenim vertex i pixel shader jedinicama, lepo se mogu
videti na tabeli koju smo prikazali ispod. U prethodnim verzijama DirectX-a,
pixel shader je uvek bio više ograničen od vertex shader-a, bar kada posmatramo
maksimalan broj stalnih i privremenih registara ili instrukcija. Programeri
su svaki put morali da kreiraju posebne shader programe koji će se, recimo,
odnositi isključivo na jednu osobinu nekog materijala (koji se izvršava u pixel
shader-u) ili na promenu njegovog izgleda nakon nekog fizičkog uticaja (udarac
metka u metal, program koji se izvršava u vertex shader-u). Shader Model 4.0
pruža unificiran set instrukcija sa istim brojem privremenih i stalnih registara
i input-a kroz ceo pipeline. Kreatori igara više neće morati da brinu o limitima
koje postavlja maksimalan broj poziva ka centralnom procesoru usled prevelikog
broja izmene stanja, jer će sve shader programe praktično izvršavati samo GPU
(ako zanemarimo zaista minimalan broj CPU verifikacija).
Command Processor & Setup Engine Kao što smo ranije naveli, R600 se sastoji od nekoliko celina. Command Processor
preuzima i izvršava niz mikro-komandi od samog drajvera i ima pun pristup memoriji.
Osim što je ovaj proces preuzeo od sistemskog CPU-a, čime se broj upita koje
mu drajver šalje smanjuje i do 30%, Command Processor funkcioniše na hardverskom
nivou, ali ipak funkcioniše samo tokom izvršavanja DirectX 9 i DirectX 10 aplikacija.
Setup Engine zatim priprema podatke za dalju obradu od strane stream processing
jedinica i to na tri načina, u zavisnosti od tipa podataka. Za vertex shader
programe, Setup Engine izvršava spajanje vertex-a i vrši njegovo deljenje (tesselation),
dok za geometry shadere izvršava spajanje geometrije (geometry assembly funkcija).
Ako na obradu stignu pixel shader programi, Setup Engine vrši konverziju i
interpolaciju koda kako bi isti bio prilagođen za procesiranje unutar streaming
processing unita.
UltraThreaded Dispatch Processor Za UltraThreaded Dispatch processor smo čuli i o njemu pisali u testovima Radeon
X1800, X1900 i X1950 XTX akceleratora. U odnosu na UTD iz R5xx GPU-ova, novi
Dispatch Processor je dodatno unapređen zbog znatno intenzivnijeg paralelizma.
Ako znamo da je shader zapravo program koji se sastoji od
seta instrukcija koje opisuju karakteristiku nekog vertex-a (tačke u 3D prostoru),
piksela ili primitive (osnovne površine ili dela površine u 3D prostoru), onda
je lako dati i definiciju za thread, koji je zapravo niz tačaka
(u 3D prostoru), poligona ili piksela koji zajedno čine skup podataka, odnosno
jedinicu od koje zavisi i na koji se odnosi određen deo shader programa.
Nakon što preuzme podatke iz Setup Engine-a i postavi ih u posebne redove (command
queues) za svaki od tipova shadera, arbiter jedinice odlučuju koji će se sledeći
thread izvršavati i to na osnovu posebnih parametara. Svaki od četiri SIMD
(single instruction multiple data) niza koji sadrži po 80 Streaming Processors
jedinica ima dva sopstvena arbitera, dok i jedinice za operacije sa teksturama
i vertex fetch poseduju posvećene arbiter-e, koji rade nezavisno od prethodno
pomenutih. S obzirom da i na nivou arbitera i celog UltraThreaded Dispatch
procesora postoje i posebne bafer memorije, svaki od threadova koji se izvršavaju
mogu biti povučeni i postavljeni “on hold” kako bi se što pre izvršio thread
koji ima veći prioritet (command queue sistem za svaki od threadova postavlja
i nivo prioriteta). Thread koji je bio procesiran se privremeno snima (Shader
instruction cache), pa se rad na njemu nastavlja čim se završi procesiranje
threada sa većim prioritetom. Ove cache memorije su posebno namenjene za čuvanje
podataka radi bolje organizacije procesiranja podataka kroz SIMD jedinice i
efikasniji paralelizam. Keš memorije se mogu podeliti na instruction cache,
koji može da radi sa shader programima praktično beskonačne dužine i constant
cache, koji podržava beskonačan broj konstanti, kako bi se shaderi koji se
često koriste mogli privremeno čuvati i radi smanjenja broja stanja (manji
broj poziva ka CPU-u, pogotovo tokom pripremanja scena za DirectX 9 aplikacije).
Ultra Threaded Dispatch Processor je unapređen i tako da sakrije latenciju
koja se stvara na nivou GPU-video memorija, jer posvećeni command queue sistem
može da rasporedi na stotine threadova kako bi se obezbedila maksimalna zaposlenost
SIMD jedinica. Pomenute cache memorije su GPR tipa (General Purpose Registers),
koje mogu da čuvaju threadove koji tek treba da se obrađuju, ali i one koji
su, kada su snimljeni bili u procesu obrade (intermediate shader data), kao
i one koje su obrađene (output shader data). Superscalar Architecture SIMD (Single Instruction, Multiple Data)
jedinice su dizajnirane po novom principu koji ATI naziva Very Large Instruction Word
(VLIW). Iako se sa ovim sistemom ne susrećemo prvi put, nije zgoreg napomenuti
da su nove SIMD jedinice unapređene tako da se svaki thread paralelno izvršava
na više elementarnih nivoa (5 matematičkih operacija uz obavezan flow
control). Unutar svakog shader programa postoji specijalna instrukcija
koja kontroliše, odnosno opisuje kako bi kod trebalo da se izvrši pod određenim
(važećim) uslovima. Niz ovih instrukcija kroz nekoliko povezanih ili jedan
(veći) shader program se zajedno nazivaju – flow control. Zahvaljujući preciznom
Dispatch Processoru i već pomenutim arbitrima, sve operacije unutar jednog
thread-a se izvršavaju paralelno kroz celu SIMD jedinicu, uz napomenu da se
Texture i Vertex Fetch operacije prosleđuju i izvršavaju odvojeno.
Arhitekturu R600 GPU-a nazivamo superskalarnom, dok je ona kod G80 – skalarna.
To je zbog toga što R600 sadži niz superskalarnih shader procesora. Svaki od
ovih procesora može da pripremi do pet skalarnih multiply/add instrukcija po
kloku u 32-bitnom floating point formatu, uz podršku za integer i bitwise operacije.
AMD na svom tech-sheetu navodi da “svaki peti streaming processor može da radi
sa instrukcijama kakve su SIN, COS, LOG i EXP”, međutim – o čemu je reč? 320
streaming processora je zapravo skup od 64 ALU jedinice vec4+scalar tipa. Dakle,
svaka od njih može da obradi do pet skalarnih MAD (multiply/add) instrukcija,
što znači da ukupno, po kloku, obrađuje 320. Međutim, tek svaki peti može da
radi sa LOG, EXP, COS i drugim kompleksnijim operacijama, što znači da po kloku
R600 obrađuje do 64 vec4 instrukcije. Pošto SP jedinice kod NVIDIA G80 čipa
rade samo sa skalarnim operacijama (vektorske se prevode u skalarne), logično
bi bilo da i R600 ima mogućnost da prevodi vec4 instrukcije u skalarne, kako
bi GPU bio efikasan u svakoj situaciji (prilikom izvršavanja threadova koji
se, recimo, 90% sastoji od vec4 instrukcija). Kako su SP jedinice kod R600
raspoređene u četiri SIMD niza, možemo primetiti da svaki SIMD niz ima po 16
vec4+scalar jedinica (koje AMD naziva 5-way superscalar shader processors),
odnosno 80 po AMD-ovoj računici. Svaki SIMD niz poseduje posvećene General
Purpose Register bafere koji čuvaju threadove koji tek treba da se obrađuju,
one koji su u procesu obrade, kao i one koje su obrađeni.
Ovako moćan “Streaming Computing” ima primenu i van sveta igara ili profesionalne
(CAD) grafike. Ne samo što je veoma pogodan za napredno procesiranje video
materijala, fotografija ili zvuka, već svoje primene ima i u medicini. Upravo
je na Deep Dive prezentacijama, gospođica Natalya Tatarchuk, na poziciji “3D
Applications Research Group” u kompaniji AMD, dala prezentaciju o tome kako
se R600 može koristiti za real-time vizuelizacije; podatke koje računaru šalje
MRI (Magnetic Resonance Imaging scan) ili PET (Positron Emission Tomography)
skener mogu se iskoristiti za kreiranje 3D modela. Naravno, R600 je dovoljno
moćan i za izvršavanje virutelnih operacija ili istraživanje vaskularnih puteva.
U svakom slučaju, osim za obuku, može se koristiti i za edukaciju kadrova jer
više za ove primene nisu neophodni super-kompjuteri. Virtuelna endroskopija
je sada već moguća jer R600 podržava i real-time volumetric rendering, subsurface
scattering, a postoji način i da se simulira collision response, odnosno da
se do detalja predstave uslovi unutar tkiva i organa gde nijedna kamera ne
bi mogla ništa da snimi. Osim u medicini, Streaming Processing se može iskoristiti
i za simulaciju dinamike fluida, što može biti veoma korisno u krajnjim fazama
CAD i CAM dizajna (virtuelni air-tunnel u kome možete isprobati koliko je dinamičan
auto koji ste kreirali), ali i u meteorologiji ili vizuelizaciji hemijskih
procesa. R600 je već dovoljno snažan za realnu zapreminsku simulaciju (oblaci,
para, dim) fluida.
Texture Units Radeon HD2900, odnosno R600 GPU ima i četiri teksturne jedinice, od kojih svaka
poseduje osam texture adress procesora. Poređenja radi, R580 poseduje četiri
jedinice sa po četiri texture adress processing unita. Ako sve maksimalno pojednostavimo,
mogli bi smo reći da R600 ima 32 TMU jedinice, mada su one sada znatno efikasnije.
Međutim, stvari ipak nisu tako jednostavne, jer svaki od četiri teksturna procesora,
pored osam jedinica za adresiranje tekstura, sadrži i četiri floating point
filtering jedinice (ukupno 16) i po 20 texture sampling jedinica (ukupno 80).
Pošto su RV6xx čipovi nastali na R600 arhitekturi, i Radeon HD2400 i HD2600
imaju identične teksturne jedinice. Svaka od pod-jedinica za filtriranje tekstura
nudi i do sedam puta više performanse u odnosu na iste jedinice kod prethodne
generacije (R5xx) procesora kada govorimo o bilinearnom filtriranju u HDR formatu
uz 64-bitnu preciznost. 128-bit format obara brzinu za oko 50%, što je odličan
podatak, znajući da je rad u ovom formatu gotovo nemoguća misija na Radeonu
X1900. Anizotropno filtriranje usporava R600 mnogo manje nego R580, pa je high-quality
mod kod Radeon X1000 familije postao default kod Radeon HD2000 serije.
Viši kvalitet anizotropnog filtriranja je nešto što smo očekivali, znajući
da je i NVIDIA kod G80 postavila nove standarde kada je podrazumevani kvalitet
filtriranja u pitanju. I bilo je vreme! Teksturni sistem u okviru R600 GPU-a
donosi i novi sistem koji ATI naziva Depth Stencil Textures (DST) zajedno sa
Percentage Closer Filtering (PCF) algoritmom. No, o tome ćemo pričati u nekom
od narednih testova kada budemo imali konkretnije informacije.
Radeon HD2000 familija akceleratora donosi i podršku za novi format tekstura
(RGBE 9:9:9:5) za najčešće upotrebljavani 32-bit HDR format (FP16) koji koristi
najveći broj igara (manji broj igara koristi jednostavniji integer format (INT16)
za HDR. Novina je i podrška za teksture izuzetno velike rezolucije – čak 67
megapiksela (odnosno megateksela u 3D svetu), što znači da bi Radeon HD2900
mogao da izađe na kraj sa teksturama rezolucije 8192 x 8192 piksela. Kao i
R580, Radeon HD2900 može da izvrši do dve texture fetching operacije po teksturnoj
jedinici u jednom kloku (filtered + unfiltered), ali samo R600 ima mogućnost
i da izvrši do četiri nefiltrirane fetch instrukcije (Fetch4). Podrazumeva
se da Texture Filtering jedinice imaju pun pristup pixel, vertex i geometry
shader programima koji se smeštaju u General Purpose Register bafere.
Geometry Processor & Programmable Tesselation
Sirova propusna moć čipa, fillrate i brzina obrade podataka vezanih za geometriju
zavisi od brzine vertex shadera, geometry shadera, brzine triangle setup sistema,
efikasnosti vertex fetch podsistema unutar TM jedinica, veličine vertex cache
bafera i efikasnosti sistema za upisivanje i čitanje podataka u i iz nje. Postavlja
se i pitanje efikasnosti sistema za tzv. geometry amplification (o čemu ćemo
takođe pisati nešto kasnije). Međutim, u AMD-u su sigurni da je njihov processor
za kalkulaciju geometrije najefikasniji na tržištu, jer je R600 sposoban za
Fetching do 16 “tačaka” po kloku, dok se vertex shader programi izvršavaju
i do deset puta brže (u odnosu na Radeon X1000 seriju) najpre zahvaljujući
prelasku na Unified Shader arhitekturu (postojanje load-balancing-a je najbitniji
upravo na ovom nivou). Cache registri su u odnosu na R5xx seriju povećani čak
osam puta, a AMD tvrdi da je njihov Geometry Shader procesor i do 50 puta (!!!)
efikasniji od rešenja koje nudi konkurencija. R600 donosi i programabilno deljenje
geometrije (programmable tesselation).
Hardware tesselation je našim čitaocima možda poznat još iz vremena Radeon
7000 akceleratora, kada je primenjen prvi i vrlo primitivni oblik higher order
surfaces sistema. Od sličnog principa (N-Patches) je i NVIDIA ubrzo odustala
– čekali su se “bolji dani” i neka vrsta standardizacije kroz API, kao i veće
interesovanje game developera. U AMD-u, odnosno njegovoj grafičkoj
diviziji, smatraju da je upravo sada pravo vreme za hardware tesselation. Implementacija
ove funkcije omogućava kreatorima igara da povećaju broj promena na geometriji
nivoa, odnosno samim objektima i uvedu detaljne deformacije terena ili samih
objekata, uz znatno manji broj informacija koji se šalje GPU-u. Kao što možemo
videti na slikama, tesselation se oslanja i na upotrebu displacement “tekstura”
kakve su normal i paralax occlusion mape. Implementacija ovih tehnika bi mogla
da omogući da se kvalitet prikaza u igrama približi onom kod modernih 3D crtanih
filmova, a onda i CG grafici iz holivudskih filmova. Naravno, problem je u
tome što su CG filmovi prerenderovani i što njihovo kreiranje može da traje
koliko god je to potrebno, dok u igrama između dva frejma ne sme da prođe više
od petnaestak milisekundi. Kao što smo već pisali, displacement mape se postavljaju
na jednostavan (low-poly) 3D objekat i svaki piksel na toj mapi označava “visinu”
u odnosu na referentnu površinu (površinu objekta na koji se primenjuje). Klasična
tekstura, odnosno color mapa onda daje “život” tom objektu, koji je prethodno
“obogaćen” displacement teksturom (koja objektu donosi ogroman broj detalja).
Za više informacija o displacement mapping-u pogledajte naš test Radeona X1K
familije ili GeForce 7800 i 7900 akceleratora. Međutim, model na koji primenjujete
normal ili paralax mapu ne mora da ima ni nekoliko desetina hiljada, već svega
par stotina poligona. Kako se “deljenje” poligona može isprogramirati za svaki
objekt ili čak deo objekta posebno, jasno je kolika je ušteda učinjena kada
je protok vertex informacija u pitanju. Sasvim je logično da je “tek sada vreme
za hardware tesselation”, jer bi ušteda za vertex shader unite bila besmislena
kod prethodne generacije, kada bi vertex jedinice samo stajale neiskorištene.
Sad kada su Unified Shader GPU-ovi postali stvarnost, ušteda na protoku vertex
informacija znači više vremena za rad sa drugim tipovima informacija, ali i
mogućnost za veći broj promena stanja nad geometrijom (deformacija terena,
objekti koji se lome, ugibaju i sl.).
Prva generacija higher-order surfaces sistema je pretrpela dosta kritika
jer je njena primena u nekim igrama (autor ovog teksta se seća Unreal Tournament-a)
donosila više grešaka u prikazu nego nekih pozitivnih promena. Poenta je da
nije potrebno “deliti” pojedine objekte, dok je za kreiranje novih detalja
na nekim objektima potrebno primeniti različite tipove tesselation metoda.
Neki od njih koje ćemo pomenuti su: Bezier (nazvane po slavnom francuskom inženjeru
Pijeru Bezijeru), koje obuhvataju sva tri matematička metoda deljenja (Linear,
Quadratic i Cubic), zatim B-Spline, NUB, N-Patches (metod koji je još pre par
generacija primenila NVIDIA), te deljenje po Catmull-Clark metodu ili metodu
zaokreta (Loop). Ono što je impresivno, jeste da je ovo čisto hardverski metod,
koji ne mora da bude podržan od strane API-ja, već samo od strane timova koji
razvijaju softver (odnosno igre). Hardware Tesselation je već u žestokoj upotrebi
kada su u pitanju igre za Xbox360 (Gears of War, Viva Pinata, Dead Rising su
samo neki od primera).
Render Back-Ends
Ovaj deo GPU-a je unapređen u velikoj meri i u AMD-u tvrde da je čak dvostruko
efikasniji u odnosu na rešenje iz prethodne generacije. Radeon HD2900 GPU može
da prikaže do 32 piksela po kloku (mogli bi smo reći da R600 ima 32 ROP jedinice),
dok Radeon HD2600 i HD2400 imaju mogućnost outputa do 8 piksela po kloku. Ovaj
deo GPU-a je zadužen za post-processing efekte koji sada imaju značajno manji
performance impact, dok je Render-to-texture funkcija drastično poboljšana.
Dodat je i programabilni MSAA resolve algoritam koji omogućava Custom Filter
AntiAliasing modove, a novi formati za texture blending su: 128-bit full floating
point i 11:11:10 floating point format. Dok Radeon X1950 XTX podržava rad sa
maksimalno četiri Rendering Target-a, Radeon HD2900 će raditi sa maksimalno
osam MRT-a, što između ostalog otvara put ka bržem (i/ili kvalitetnijem metodu)
omekšavanju ivica.
Z/Stencil Compression & druga poboljšanja Detekcija i uklanjanje “nevidljivih” tj. zaklonjenih (occluded) površina,
kao i kompresija Z i Stencil informacija je deo GPU-a koji se konstantno unapređuje.
Konkretno kod R600, kompresija ovih podataka je poboljšana i sada ima odnos
od 16:1 (prethodni sistemi su obezbeđivali odnos do 8:1), odnosno do 128:1
u scenarijima sa 8x MSAA algoritmima. Z-buffer i Stancil Buffer informacije
sada imaju posebne registre radi veće efikasnosti (ranije su se smeštale u
isti bafer), a sada je po potrebi moguće i njihovo smeštanje u lokalnu video
memoriju (van on-GPU bafera). Z Range Optimization je po konceptu sličan Ultra
Shadow tehnici kod GeForce kartica (od generacije 6), koji podrazumeva da se
Stancil i Z operacije vrše do određene “dubine” u 3D sceni). Re Z funkcija
omogućava brzu proveru Z-bufferu na dva nivoa: jednom tokom izvršavanja funkcija
nad geometrijom i kasnije, tokom pixel shadinga i to bez stvaranja dodatne
latencije. Isti sistem obezbeđuje poboljšani Early Z test (u svakom slučaju
pre nego što krene pixel shading scene). Hierarchical Z Buffer je unapređen:
dodat je Hierarchical Stencil “algoritam” (HiS) koji poboljšava performanse
u radu sa stancil senkama i zapravo je krucijalan deo pomenutog Z Range Optimization
sistema. Hierarchical Stencil podržava i rad sa 32-bitnim Floating Point Z-Buffer
informacijama (Radeon X1K je bio ograničen na 24-bitni format).
Memorijski kontroler
Radeon HD2900 XT GPU zadržava RingBus arhitekturu memorijskog kontrolera,
ali je sada u pitanju skup kružno postavljenih “stanica” kojih ima čak osam
(svaka širine od 64 bita, tj. 4x2x64-bita), što čini čak 512-bita. U pitanju
je prvi desktop GPU koji ima 512-bitnu memorijsku magistralu, što je zahtevalo
više I/O izvoda od GPU-a ka memoriji i daleko kompleksniji PCB. Najveći problem
je u tome što, kako je čip manji, odnosno kako napreduje proizvodni proces,
to je sve teže kreirati veći broj izvoda i kompleksniju memorijsku magistralu.
Međutim, naporan rad inženjera AMD-a imao je za rezultat napredni dizajn I/O
izvoda koji uz znatno veću gustinu omogućava da se na istu površinu spakuje
čak dva puta više izvoda nego što je to bio slučaj sa izvodima (I/O pads) kod
256-bitne magistrale (R580). Uz 512-bitni memorijski bus, AMD je uspeo da postigne
dva puta viši memorijski propusni opseg zadržavajući iste ili čak niže radne
učestanosti u odnosu na najbrži model prethodne generacije. Ring-bus arhitektura,
kao i ranije, smanjuje broj vodova kroz sam GPU jer je i fizički, memorijski
kontroler smešten po obodima GPU-a. U AMD-u tvrde da je već pri širini magistrale
od 256-bita daleko logičnije da se koristi ring-bus tip memorijskog kontrolera,
jer sa povećanjem širine cross-bar kontroleri postaju veoma kompleksni za dizajn
I/O pad-a (izvoda oko GPU-a, tj. od grafičkog ka memorijskim čipovima), ali
i dizajn “stanica” unutar mikroarhitekture čipa. Zbog toga smatramo da će NVIDIA
sa nekim novim high-end čipom konačno predstaviti novo rešenje za memorijski
kontroler.
Novi AA metod – Custom Filter AntiAliasing Pored već poznatih metoda (algoritama) za eliminisanje nazubljenih ivica (anti-aliasing)
na ivicama objekta i kroz alpha-teksture, koje obuhvataju Multisampling,
Adaptrive SuperSampling i MultiSampling, Super AA (u CrossFire režimu), Gamma
Corrected (resolve) AA, Programable i Temporal AA, tu je i potpuno novi
Custom Filter Anti-Aliasing. Svaki od pomenutih AA metoda se oslanja na primenu
postprocessing filtera od strane Render Back-end dela GPU-a. Svaki od postojećih
metoda primenjuje upravo box tip filtera, dok CFAA upravo “posmatra” van paterna
piksela koji se obrađuje (nalazi na “problematičnoj” ivici. Zato se za detekciju
ivice koristi adaptive edge detect filter koji se sastoji od semplova neuniformnog
oblika. Prema broju semplova koji obuhvata, ovaj filter se može “podeliti”
na narrow (uski) i wide (široki). Ostatak ilustracija će vam lako pokazati
o čemu se zapravo radi. AMD tvrdi da CFAA obezbeđuje bolje performanse od supersampling
metoda, ali i bolje rezultate. No, kroz nove metode antialiasing-a još uvek
nismo testirali jer očekujemo brže drajvere (CFAA filteri i same performanse
će biti značajno bolje u kasnijim revizijama drajvera).
Kao što smo napomenuli, Custom Filter Anti-Aliasing je novi metod za eliminisanje
nazubljenih ivica i po prvi put je jedan ovakav metod potpuno softverski programabilan
i može se unaprediti (upgrade-ovati) promenom parametara unutar drajvera i daljom
optimizacijom koda, kao i pisanjem specifičnih filtera za specifične situacije
u igrama (u čemu game developeri mogu značajno da pomognu). CFAA radi sa postojećim
DirectX 9 aplikacijama (za sada nema podršku u OpenGL naslovima) i radi u kombinaciji
sa HDR-om, a primenjuje se čak i na Stencil senke. U poređenju sa Coverage Sample
AA metodom, CFAA pruža nešto bolji prikaz samih ivica, a moguća je i upotreba
filtera sa efektivnim brojem od čak 24 sample-a. CFAA je takođe efektivniji kod
filtriranja alpha tekstura, mada prema našim preliminarnim inspekcijama uspeva
da pomalo zamuti samu teksturu na objektu pri najagresivnijem setovanju (16x)
Universal Video Engine i HDCP Posle više nego afirmativnog dela članka koji hvali PureVideo HD engine druge
generacije u našem testu G84 kartica, bili smo sigurni da će AMD da ponudi
nešto još impresivnije i – nismo se prevarili. Kao i G84/86 GPU i nova familija
Radeon HD akceleratora ima posvećeni video processing engine koji AMD naziva
Universal Video Processor. U odnosu na AVIVO, UVP je napredovao koliko i PureVideo
HD druge generacije u odnosu na rešenje iz GeForce 7 familije. Cilj je isti
– smanjiti CPU utilizaciju pri posmatranju WMV9, H.264, AVC i VC1 video formata,
gde su H.264 i VC1 daleko najbitniji, jer predstavljaju već prihvaćeni, standardni
video kodek za Blu-ray i HD-DVD diskove, kao što je MPEG2 bio za DVD. Priliko
m obrade HD video signala, pred grafičkom karticom stoji izazov koji se ne
završava samo na procesiranju bar 6x više informacija u odnosu na video signal
standardne definicije. Osim što je neophodno da se izbori sa više podataka,
GPU mora da vodi računa o specifičnostima svakog kodeka, a zatim i o copy-protection
mehanizmima na više različitih nivoa. Kao što možete videti, u tabelama je
lepo ilustrovano koliko taskova je u svakom od “scenarija” prepušteno centralnom
procesoru, a koliko grafičkoj kartici.
Čak i kod G84 GPU-a, početne BitStream i Entropy Decode faze se izvršavaju
od strane CPU-a, dok je u slučaju Radeon HD akceleratora sve na GPU-u. UVP
je kreiran da u potpunosti dekodira i najzahtevnije (i najnaprednije) video
kodeke kakvi su VC-1, AVC i H.264, uključujući i bit-rejtove od 40 Mbps ili
više. UVP koristi već postojeća, programabilna SIMD jezgra, odnosno Stream
Processors jedinice. Pošto je u stanju da off-loaduje CPU, ovaj video engine
je ključna stvar na tržištu notebook računara, jer smanjuje potrošnju (CPU
se ne opterećuje 80-90% već svega 5 do 10%) i produžava trajanje baterije.
Ono što Radeon HD GPU-ovi podržavaju, za razliku od G84 i G86 procesora jeste
podrška za full-speed CABAC i CAVLC dekodiranje u okviru H.264 i VC-1 kodeka.
Sav postprocessing se obavlja unutar SP jedinica, uz primenu filtera koji su
ništa drugo do namenski kreirani shader programi koji se u potpunosti izvršavaju
“in-vivo”. HDMI, odnosno High Definition Multimedia Interface je u potpunosti
podržan od strane R6xx GPU-a, zajedno sa obaveznim HDCP (High-bandwidth Digital
Copy Protection) sistemom zaštite od kopiranja. Osim digitalnog signala, HDMI
konektor “prenosi” i više kanalni audio zvuk.
DirectX 10 rekapitulacija Microsoft-ov API DirectX je prešao dug put od kada je 1995. godine predstavljen
kao deo Windows 95 operativnog sistema. Ovaj interfejs, odnosno “okruženje”
za kreiranje aplikacija, i kao brojni drugi API-ji, njihovo funkcionisanje
je vezano za rad operativnog sistema. Svoju najbitniju prekretnicu, DirectX
je imao kada se pojavio Windows XP, prvi operativni sistem koji je bio „gaming
friendly”. DirectX 8 je doneo rad sa kratkim programima koji se izvršavaju
u namenski kreiranom delu grafičkog procesora; ovi kratki programi, odnosno
shaderi su u stanju da prilagode, tj. programiraju pixel ili vertex jedinicu,
odnosno pronađu najefikasniji način da se jedna SIMD instrukcija izvrši unutar
specifičnih i manje specifičnih ALU jedinica. Ovaj koncept je u igračkoj industriji
zaživeo brže nego što su u Microsoft-u računali, te u početku nisu bili spremni
da izbace novu verziju DirectX API-ja, koja je pre svega „fokusirana” na to
da sva ograničenja koja je prethodna generacija postavljala budu prevaziđena,
kao i da performanse budu više. I dok su prethodne verzije ovog API-ja bile
više nadogradnja i ubacivanje novih mogućnosti, DirectX 10 je redizajniran
i kreiran tako da krajnje performanse budu što više. Pre nego što su se grafički
API-ji pojavili, aplikacija je slala informacije direktno ka grafičkom procesoru,
što je sa jedne strane dobar pristup, jer nema posrednika, ali je u tom slučaju
nemoguće kreirati 3D igru koja bi dovoljno dobro radila sa različitim GPU-ovima.
API je dobro rešenje, jer se između aplikacije sa jedne i GPU-a i video drajvera
sa druge strane postavlja kao sloj koji obezbeđuje ultimativnu kompabilnost
po principu – aplikacija mora da bude napisana po načelima (standardima) API-ja,
dok sam GPU zajedno sa njegovom manifestacijom unutar operativnog sistema –
drajverom, zapravo predstavlja motor za pravilno izvršavanje funkcija koje
API i softver mogu da pošalju. Umesto da se programeri bave specifičnim funkcijama
različitih GPU-ova, uz obavezu da se njihov softver pravilno na njima izvršava,
aplikacija šalje niz instrukcija ka API-ju, koji ih prevodi u instrukcije razumljive
samom hardveru. GeForce 8800GTX je prva video kartica na tržištu, lansirana
još početkom novembra 2006. godine, koja podržava DirectX 10 i Shader Model
4.0 u okviru Windows Vista operativnog sistema, dok je AMD tek pre nekoliko
nedelja predstavio, a danas počinje sa prodajom svojih DirectX 10 akceleratora. PC je mašina namenjena za različite tipove upotreba, koja se shodno tome i
konfiguriše. Međutim, koncept sistema je u svim slučajevima praktično isti,
pa na putu ka visokim performansama pojedinih podsistema postoji mnogo prepreka,
odnosno nečega što nazivamo „uskim grlom”. Prethodne verzije DirectX API-ja
su se dosta oslanjale na sistemski procesor, pa i bez obzira na to što su grafičke
kartice odavno preuzele sve kalkulacije vezane za iscrtavanje grafike (ovoga
puta ne pričamo o ostalim komponentama koje čine jednu igru, tako da ih zanemarujemo),
sam DirectX je bio tako organzovan da svaka operacija nad teksturom, geometrijom,
osvetljenjem itd. mora da bude verifikovana od strane API-ja. To ne bi bio
problem da se sam DirectX, kao i ostali API-ji Windows-a ne oslanja direktno
na CPU kad god je potrebno da prihvati neku instrukciju koju mu šalje sama
aplikacija (3D igra). Upravo zbog toga je toliko bitno da osim veoma jake grafičke
kartice, za dobre performanse u igrama imate i moćan centralni procesor. Najveća
prepreka ka igrama koje izgledaju realistično ili foto-realistično jeste večiti
problem koji u svojoj koncepciji ima(o) grafički API, a koji se odnosi na njegovu
zavisnost od brzine samog procesora. Geometry Shader i Stream Output su dve
komponente novog DirectX 10 API-ja, koje, esencijalno, omougćavaju da grafički
čip procesira čitavu „geometriju” scene bez obzira na to kojim redom i kojom
brzinom se izvršava procesiranje vertex informacija. DirectX 9 je postavljao
ograničenje tako što je svaki deo geometrije izvršavao redom, tako da je određeni
objekat bio spreman za prikaz tek kada je i njegov poslednji „trougao” bio
procesiran. U ovom API-ju je takođe bilo nemoguće prepustiti da sve kalkulacije
vezane za geometriju scene odradi GPU, već je sa većinom ovih instrukcija morao
da bude upoznat i sam CPU. Naravno, i ranije su postojali vertex shader programi
koji omogućuju da manje izmene geometrije hendluje sam GPU, ali bi za drastičnu
izmenu čitave scene (smislena manipulacija čitavom geometrijom u realnom vremenu)
bio neophodan gigantski vertex shader program, koji bi vertex jedinica stalno
morala da poziva iznova (ili bar da poziva naredni program), što je jako naporno
za programere, a sve zbog limita koji postavlja DirectX 10. Jako je zanimljivo
da je u ovom slučaju sam softver (DirectX 9 API) ograničavao i već dovoljno
dobar, postojeći hardver (R580, G71 itd.). Uz novi, Geometry Shader, razvojni
timovi će imati mogućnost da animiraju likove i samo okruženje u igrama bez
konstantnog ograničenja vertex jedinice, odnosno njenog stalnog obraćanja sistemskom
procesoru (preko API-ja). Kako će nova posvećena jedinica biti u stanju da
sama obrađuje vertex informacije, više nećemo (morati da) gledati kako se objekti
u igrama pojavljuju niodakle (dobar primer su brojne outdoor igre – Oblivion,
Gothic 3 i sl.). Kao što ćemo videti kasnije, Geometry Shader kao poseban deo
novih GPU-ova, će zahvaljujući novom DX10 API-ju moći da generiše i obradi
podatke vezane za geometriju scene, pa ih onda pošalje u Vertex jedinicu, koja
tradicionalno radi nad pripremom za prikaz na ekranu (transforming). Shading
(lightning), naravno, i dalje obavlja Pixel Shader jedinica, odnosno Unified
Shader jedinica u slučaju takve arhitekture grafičkog procesora. Geometry Shader omogućava dinamičku modifikaciju objekata unutar samog GPU-a,
bez oslanjanja na CPU, dok je Stream Output tu da obezbedi pravilnu komunikaciju
između pipeline jedinica koje rade na istom delu geometrije, a koja može biti
modifikovana od strane samog Geometry Shadera. Drugim rečima, Stream Output
je komponenta koja omogućava da se podaci generisani od strane Vertex i Geometry
Shadera budu privremeno sačuvani u memoriji, pre nego što bi bili ponovo poslati
na početak pipeline- a (input), da bi bili ponovo modifikovani. Ovi paketi
podataka se upravo privremeno i čuvaju da se ceo proces inicijalnih kalkulacija
ne bi ponavljao od početka, svaki put kada određeni shader program zahteva
više prolaza (multiple pass operations). Neke od mogućnosti Geometry Shadera
su prikazane na slici iznad, a mi ćemo dodati da je pametnom upotrebom ovako
moćnog sistema za manipulaciju geometrijom, moguće kreirati svetove koji nikada
nisu isti. Zamislite pucačinu iz prvog lica čiji hodnici nikada nisu isti svaki
naredni put kada je igrate? I zamislite prednosti ovog sistema u online igranju
– neki novi klinci u nekom novom “Kanteru” neće moći da nauče svaki
kutak mape kako bi znali gde da nađu mesto za kampovanje. U ranijim verzijama DirectX-a, najveći problem je, kao što smo naveli, ograničen
broj poziva koje API može da pošalje centralnom procesoru za svaku od manipulacija
nad komponentama 3D scene. Zbog tog ograničenja, razvojni timovi su često grupisali
objekte, što se naziva batching , kako bi smanjili broj „poziva” koji API upućuje
CPU-u. Međutim, ako se objekti razlikuju po svojstvima samog materijala od
koga su „izgrađeni”, batching nije moguć. I svaka izmena stanja (blending,
promena teksture, oblika i sl.) bi obavezivala API da se obrati centralnom
procesoru. Međutim, kod DirectX 9 API-ja, pre svake izmene stanja, prilikom
svakog obraćanja CPU-u, bila je neophodna i validacija, koja je kod nove verzije
API-ja neophodna samo prilikom prvog izvršavanja izmene nad novim objektom.
Jedna od novih mogućnosti DirectX 10 je nazvana „niz tekstura” (Texture Array)
koja omogućava da proces se više tekstura pune rezolucije poveže u niz bez
potrebe da se svaka od njih poziva ponovo. Ova mogućnost je korisna u situacijama
kada želimo da objekat postepeno promeni svojstvo (recimo, ako želimo da prikažemo
ubrzano starenje čoveka pa je neophodna izmena teksture kože) ili samo izgled.
Ranije bi bilo neophodno da dizajneri za svaku teksturu pozivaju kompletnu
izmenu stanja (reteksturisanje, shading, shadowing, itd.) što je kompleksan
proces ako se u isto vreme menjaju color, displacement teksture i light mape.
Pošto bi se svaka od ovih tekstura menjala gotovo svake sekunde, veliki deo
memorije i procesorskog vremena bi bio potrošen samo na taj objekat, tako da
su u ovakvim slučajevima dizajneri često birali varijantu gde bi svaku narednu
promenu na teksturi (odnosno svaku novu teksturu), iscrtali na samo jednoj
teksturi, a onda za svaku promenu koristili različite koordinate (delove) iste
bitmape. S obzirom na to da je ograničenje u rezoluciji tekstura kod DirectX
9 API-ja 4048 x 4048 piksela, dizajneri su morali da žrtvuju ili detaljnost
svake od tekstura ili broj samih promena, a u oba slučaja, rezultat nije ni
izbliza impresivan kao kada se za svaku promenu primenjuje novi set tekstura;
ovaj slučaj je bio prisutan u NVIDIA demou koji prikazuje ubrzano starenje
automobila u garaži, ali je činjenica da u tom demou praktično imamo samo jedan
osnovni objekat – šta bi učinili kada bi on bio samo mali deo neke kompleksnije
3D scene? Texture Array omogućava da do 512 setova tekstura bude “vezano” u
niz. Svaka od tekstura je indeksirana od strane samog GPU-a, kako bi broj poziva
ka CPU-u bio još manji. Predicted Draw je još jedna funkcija koja je sada nezavisna od centralnog procesora.
Već je poznato da u 3D sceni, nakon transformacije neophodne za prikaz, mnogi
objekti ostanu van vidnog polja (occluded). U nekoliko poslednjih generacija
grafički procesori su imali hardverski metod koji utvrđuje koje će površine
biti zaklonjene (o tome smo pisali u više navrata), međutim ti metodi su u
praksi dosta nepraktični, jer je bitnije da krajnja slika nema vizuelnih grešaka
čak iako su performanse za neki procenat niže. Zbog toga su i na softverskom
nivou, programeri uveli metod koji se naziva Predicted Draw i koji funkcioniše
tako što se nakon izvršavanja operacija sa vertex-ima, scena prikaže bez tekstura,
na najjednostavniji mogući način (kao što u filmskoj industriji, pre snimanja
svake scene postoji pre-visualisation faza, koja omogućava reditelju da tačno
zamisli kako će svaka scena izgledati). Ako izostavljanje nekog objekta nema
uticaja na izgled konačne scene, onda se taj objekat u datom frejmu dalje ne
procesira, što se naziva Occlusion Query. Sve ovo se, ponavljamo, izvršava
isključivo uz GPU intervencije. Kako bi broj izmena stanja mogao da bude vezan
u jedan batch i onda hendlovan od strane GPU-a, uvedena su dva nova sistema
– State Objects i Constant Buffers. Pre DirectX 10, broj stanja je definisan
pre nego što podaci krenu kroz pipeline , i da bi neke promene mogle da budu
primenjene, ceo skup podataka je morao biti rekonfigurisan. Novi DirectX API
omogućava da se izmene stanja vrše na više nivoa na pipeline- u. State Objects
se sastoji od pet SO grupa : Input Layout, Sampler, Rasterizer, Depth Stencil
i Blend. Constant Buffers se sastoji od predefinisanih vrednosti koji se koriste
kao parametri unutar svih shader programa. Broj osvetljenja u sceni, sa svim
parametrima (intenzitet, boja, pozicija) je određen konstantnom vrednošću unutar
tog bafera. Pošto se u igrama neke od tih vrednosti menjaju, ovaj bafer se
često mora update-ovati, ali je i dalje efikasnije da se parametri čuvaju u
njemu, pošto se ove promene ne dešavaju „po frejmu”. Constant Buffers može
da sačuva do 4096 vrednosti i sve one mogu biti apdejtovane samo jednom batch
funkcijom (ranije je za svaku od promena bila neophodna posebna funckija).
DirectX 10 je, dakle, kompletno redizajniran API koji omogućava daleko više
performanse, bližu saradnju sa grafičkim procesorom i manju zavisnost od centralnog.
DirectX 10 donosi i Shader Model, verzije 4.0, koji donosi nekoliko ključnih
novina. Prva od njih je postojanje novog „koraka” u procesiranju geometrije
– geometry shader, koji dozvoljava manipulaciju primitivama bez uticaja CPU-a.
Druga novina je uvođenje arhitekture unificiranih shader-a, zajedno sa unificiranim
setom instrukcija i zajedničkim resursima kroz ceo pipeline ( vertex, geometry,
pixel shaders ); treća novina proizilazi iz druge – resursi za shader kalkulacije
bilo kog tipa su daleko veći jer iste ALU jedinice, u zavisnosti od potrebe,
mogu izvršavati i vertex i pixel operacije. Geometry Shader programerima daje
mogućnost za prirodnu hardversku kalkulaciju izmene geometrije i fizičku manipulaciju
objektima. ATI Radeon™ HD 2900 XT Specifikacija
• 700 million transistors on 80nm HS fabrication process • 512-bit 8-channel GDDR3/4 memory interface • Ring Bus Memory Controller • Fully distributed design with 1024-bit internal ring bus for memory reads and writes • Optimized for high performance HDR (High Dynamic Range) rendering at high display resolutions • Unified Superscalar Shader Architecture • 320 stream processing units • Dynamic load balancing and resource allocation for vertex, geometry, and pixel shaders • Common instruction set and texture unit access supported for all types of shaders • Dedicated branch execution units and texture address processors o 128-bit floating point precision for all operations o Command processor for reduced CPU overhead o Shader instruction and constant caches o Up to 80 texture fetches per clock cycle o Up to 128 textures per pixel o Fully associative multi-level texture cache design o DXTC and 3Dc+ texture compression o High resolution texture support (up to 8192 x 8192) o Fully associative texture Z/stencil cache designs o Double-sided hierarchical Z/stencil buffer o Early Z test, Re-Z, Z Range optimization, and Fast Z Clear o Lossless Z & stencil compression (up to 128:1) o Lossless color compression (up to 8:1) o 8 render targets (MRTs) with anti-aliasing support o Physics processing support • Full support for Microsoft DirectX 10.0 o Shader Model 4.0 o Geometry Shaders o Stream Output o Integer and Bitwise Operations o Alpha to Coverage o Constant Buffers o State Objects o Texture Arrays • Dynamic Geometry Acceleration o High performance vertex cache o Programmable tessellation unit o Accelerated geometry shader path for geometry amplification o Memory read/write cache for improved stream output performance • Anti-aliasing features o Multi-sample anti-aliasing (up to 8 samples per pixel) o Up to 24x Custom Filter Anti-Aliasing (CFAA) for improved quality o Adaptive super-sampling and multi-sampling o Temporal anti-aliasing o Gamma correct o Super AA (CrossFire configurations only) o All anti-aliasing features compatible with HDR rendering • Texture filtering features o 2x/4x/8x/16x high quality adaptive anisotropic filtering modes (up to 128 taps per pixel) o 128-bit floating point HDR texture filtering o Bicubic filtering o sRGB filtering (gamma/degamma) o Percentage Closer Filtering (PCF) o Depth & stencil texture (DST) format support o Shared exponent HDR (RGBE 9:9:9:5) texture format support • CrossFire™ Multi-GPU Technology o Scale up rendering performance and image quality with 2 or more GPUs o Integrated compositing engine o High performance dual channel interconnect • ATI Avivo™ HD Video and Display Platform o Two independent display controllers