Z-puskurin optimointi: ATI Hyper-Z



Samankaltaiset tiedostot
Luku 6: Grafiikka. 2D-grafiikka 3D-liukuhihna Epäsuora valaistus Laskostuminen Mobiililaitteet Sisätilat Ulkotilat

Videon tallentaminen Virtual Mapista

Tietokoneen muisti nyt ja tulevaisuudessa. Ryhmä: Mikko Haavisto Ilari Pihlajisto Marko Vesala Joona Hasu

CUDA. Moniydinohjelmointi Mikko Honkonen

Luento 6: Piilopinnat ja Näkyvyys

Merkittävimmät nykynäytönohjainten

Intel Pentium Pro -prosessori. tietokonearkkitehtuurit, syksy -96 Ari Rantanen

VÄRISPEKTRIKUVIEN TEHOKAS SIIRTO TIETOVERKOISSA

Varoituksista. VAARA: VAARA kertovat tilanteista, joihin saattaa liittyä omaisuusvahinkojen, loukkaantumisen tai kuoleman vaara.

Dell Inspiron 560/570: Tekniset tiedot

Tampereen yliopisto Tietokonegrafiikka 2013 Tietojenkäsittelytiede Harjoitus

Arkkitehtuurikuvaus. Ratkaisu ohjelmistotuotelinjan monikielisyyden hallintaan Innofactor Oy. Ryhmä 14

PixelFlow. Hans-Erik Grönlund 46549W

Työasema- ja palvelinarkkitehtuurit (IC130301) Apumuistit. Kiintolevyt. 5 opintopistettä. Petri Nuutinen

CT50A2602 Käyttöjärjestelmät Seminaarityö. Tietokoneen muisti nyt ja tulevaisuudessa

Tietokoneen rakenne: Harjoitustyö. Motorola MC prosessori

D B. Levykön rakenne. pyöriviä levyjä ura. lohko. Hakuvarsi. sektori. luku-/kirjoituspää

Kehittyneiden Aaltomuotojen Käytettävyys HF-alueen Tiedonsiirrossa

Tilanhallintatekniikat

PC-tietokoneen kokoaminen. Osien valinta

AUTON LIIKETEHTÄVIÄ: KESKIKIIHTYVYYS ak JA HETKELLINEN KIIHTYVYYS a(t) (tangenttitulkinta) sekä matka fysikaalisena pinta-alana (t,

Videon tallentaminen Virtual Mapista

Mini-ITX tietokone Intel Atom prosessorilla

Alla on yhteenveto Helsingin yliopistolle tarjotun ratkaisun kokonaiskustannuksista. Alla on yhteenveto laitteistokomponenttien kustannuksista.

A/D-muuntimia. Flash ADC

Työasema- ja palvelinarkkitehtuurit IC Tallennusjärjestelmät. Tallennusjärjestelmät. 5 opintopistettä.

Ongelma(t): Miten tietokoneen komponentteja voi ohjata siten, että ne tekevät yhdessä jotakin järkevää? Voiko tietokonetta ohjata (ohjelmoida) siten,

Algoritmit 1. Luento 10 Ke Timo Männikkö

Yleisen PSCR-menetelmän toteutus ohjelmoitavalla näytönoh

SÄHKÖENERGIATEKNIIIKKA. Harjoitus - luento 6. Tehtävä 1.

Harjoitustyö, joka on jätetty tarkastettavaksi Vaasassa

Linux rakenne. Linux-järjestelmä koostuu useasta erillisestä osasta. Eräs jaottelu: Ydin Komentotulkki X-ikkunointijärjestelmä Sovellusohjelmat

ASM-kaavio: reset. b c d e f g. 00 abcdef. naytto1. clk. 01 bc. reset. 10 a2. abdeg. 11 a3. abcdg

Tehtävä 2: Tietoliikenneprotokolla

TAMPEREEN TEKNILLINEN YLIOPISTO Digitaali- ja tietokonetekniikan laitos. Harjoitustyö 4: Cache, osa 2

Alla on yhteenveto Helsingin yliopistolle tarjotun ratkaisun kokonaiskustannuksista.

Kytkentäkentän teknologia

Luento 2: Viivan toteutus

JHS 180 Paikkatiedon sisältöpalvelut Liite 4 INSPIRE-palvelujen laadun testaus

Ohjeita fysiikan ylioppilaskirjoituksiin

Luento 10: Näkyvyystarkastelut ja varjot. Sisältö

ICT4TN Tehtävänanto

Matematiikka ja teknologia, kevät 2011

Kolmioitten harjoituksia. Säännöllisten monikulmioitten harjoituksia. Pythagoraan lauseeseen liittyviä harjoituksia

Harjoitus 3 ( )

1. Osoita, että joukon X osajoukoille A ja B on voimassa toinen ns. de Morganin laki (A B) = A B.

Alienware Alpha R2 Asetukset ja tekniset tiedot

Sisällys. Yleistä attribuuteista. Näkyvyys luokan sisällä. Tiedonkätkentä. Aksessorit. 4.2

Sivuston nopeus. (vanhentumista ei ole määritetty)

JOHDATUS TEKOÄLYYN TEEMU ROOS

MAXIMUS IX FORMULA. 5-Way Optimization Yhden klikkauksen ylikellotus ja jäähdytys

Varsinaisen suorittimen jälkeen

T Johdatus tietoliikenteeseen ja multimediatekniikkaan Tietokonegrafiikka

PIKSELIT JA RESOLUUTIO

NÄYTÖNOHJAIMEN SUORITUSKYKYTESTIT

Flash AD-muunnin. suurin kaistanleveys muista muuntimista (gigahertsejä) pieni resoluutio (max 8) kalliita

Sisällys. 16. Ohjelmoinnin tekniikkaa. Aritmetiikkaa toisin merkiten. Aritmetiikkaa toisin merkiten

Opetusmateriaali. Fermat'n periaatteen esittely

S11-04 Kompaktikamerat stereokamerajärjestelmässä. Projektisuunnitelma

16. Ohjelmoinnin tekniikkaa 16.1

Successive approximation AD-muunnin

Toshiba ja Intel: jännittävää ja yksilöllistä digitaaliviihdettä missä tahansa

Laita tietokone testipenkkiin

Vektorien pistetulo on aina reaaliluku. Esimerkiksi vektorien v = (3, 2, 0) ja w = (1, 2, 3) pistetulo on

811312A Tietorakenteet ja algoritmit, , Harjoitus 3, Ratkaisu

A11-02 Infrapunasuodinautomatiikka kameralle

TK Palvelinympäristö

Tietokoneenrakenneharjoitus

Testiraportti Android virtuaalikone vs. natiivikoodi Ville Laine, Delta 23

Matikkaa KA1-kurssilaisille, osa 3: suoran piirtäminen koordinaatistoon

Virheen kasautumislaki

TK Palvelinympäristö

Miten voin selvittää säästömahdollisuuteni ja pääsen hyötymään niistä?

Tietorakenteet, laskuharjoitus 7, ratkaisuja

16. Ohjelmoinnin tekniikkaa 16.1

Algoritmit 2. Luento 6 To Timo Männikkö

Aluksi Kahden muuttujan lineaarinen yhtälö

ELEC-C5070 Elektroniikkapaja (5 op)

Väylät. Prosessorin tie ulkomaailmaan Pienissä järjestelmissä vain yksi väylä. Osoite, data ja ohjaussignaalit Prosessori ainoa herra (master)

Luento 3: 3D katselu. Sisältö

Turun seitsemäsluokkalaisten matematiikkakilpailu Tehtävät ja ratkaisut

Asetuksen mukaan tarkoituksenmukaisen internetyhteyden vähimmäisnopeudesta

Ongelma(t): Mistä loogisista lausekkeista ja niitä käytännössä toteuttavista loogisista piireistä olisi hyötyä tietojenkäsittelyssä ja tietokoneen

Kytkentäkentän teknologia

Lumejärjestelmä Xen. Reino Miettinen

Videotoisto Nexus 7 tableteilla: Android 4.4 KitKat selvästi edellistä versiota heikompi

JOHDATUS TEKOÄLYYN TEEMU ROOS

Digikuvan peruskäsittelyn. sittelyn työnkulku. Soukan Kamerat Soukan Kamerat/SV

Malliratkaisut Demot

Dell Fluid Data TM solutions

Tietokoneen toiminta. Virtuaalilaboratoriotyö

Ohjelmoijan binaarialgebra ja heksaluvut

KUVANKÄSITTELY THE GIMP FOR WINDOWS OHJELMASSA

TL5503 DSK, laboraatiot (1.5 op) Kuvasignaalit. Jyrki Laitinen

Grafiikkasuorittimen käyttö keskusmuistitietokannoissa

Sivuston nopeus. Sivullasi ei ole uudelleenohjauksia. Lue lisää aloitussivun uudelleenohjausten välttämisestä.

Sivuston nopeus. Sivullasi on 2 uudelleenohjausta. Uudelleenohjaukset viivästyttävät sivun lataamista.

Metallin lisäävän valmistuksen näkymiä

Office ohjelmiston asennusohje

Luku 8. Aluekyselyt. 8.1 Summataulukko

Transkriptio:

TEKNILLINEN KORKEAKOULU 3.5.2003 Tietoliikenneohjelmistojen ja multimedian laboratorio Tik-111.500 Tietokonegrafiikan seminaari Kevät 2003: jpkaasal@cc.hut.fi Z-puskurin optimointi: ATI Hyper-Z Janne Kaasalainen 49731K

Z-puskurin optimointi: ATI Hyper-Z Janne Kaasalainen TKK, Tietoliikenneohjelmistojen ja multimedian laboratorio jpkaasal@cc.hut.fi Esittely Tässä paperissa käsitellään uusien näytönohjaimien kohtaamia vaatimuksia ja ongelmia muistiväylän kaistanleveyden suhteen. Kotitietokoneissa ja peleissä käytettävät resoluutiot ovat kasvaneet ja pelit käyttävät mm. multiteksturointia, antialiasointia, anisotrooppista suodatusta sekä pikselinvarjostusohjelmia. Tämän seurauksena on näytönohjaimien muistiväylän kaistanleveyden tarve kasvanut moninkertaiseksi verrattuna muutan vuoden takaisiin ohjaimiin. Näytönohjaimien valmistajat ovat huomanneet ongelman ja kehittäneet ratkaisuja pienentää tarvittavaa kaistanleveyttä erilaisilla pakkausmenetelmillä ja näkyvyystarkasteluilla. 1 JOHDANTO Reaaliaikainen 3D-grafiikka on kehittynyt viime vuosina huomattavasti. Uudet pelit käyttävät yhä hienompia tehosteita, partikkelisysteemejä, multiteksturointia ja pikselinvarjostusohjelmia. Tämän lisäksi erilaiset kuvanpehmennysalgoritmit (antialiasointi, anisotrooppinen suodatus) ovat yleistyneet. Nykyisissä näytönohjaimissa on huomattavat mahdollisuudet myös käyttää näitä ominaisuuksia sovellusten kehittäjiä tyydyttävillä ruudunpäivitysnopeuksilla. Antialiasointi ja pikselinvarjostusohjelmat ovat myös kasvattaneet näytönohjainten muistiväylän kaistanleveyden tarpeen moninkertaiseksi. Tässä paperissa esitellään nykyisten näytönohjainten muistiväylän kaistanleveyden tarvetta ja jo kehitettyjä keinoja tarpeen pienentämiseksi. Artikkelissa esitetyissä laskuissa käytetään esimerkkitietokoneena tehokasta, ammattikäyttöön tarkoitettua OpenGL-työasemaa. Erot pelikoneisiin ovat pienet, ja voidaan tässä paperissa jättää huomioimatta näytönohjainten pohjautuessa yhä useammin samoihin piirisarjoihin joiden ajurit ovat eri käyttötarkoituksiin optimoituja. Näytön resoluutioksi on oletettu 1600x1200 pikseliä 32-bitin värisyvyydellä. Työasema on varustettu Tyan Thunder i7505 emolevyllä, 2Gb DDR 266MHz-keskusmuistia ja kahdella Intel Pentium 4 Xeon -suorittimella. Vastaava kokoonpano on löydettävissä esimerkiksi Dell Precision-sarjan työasemista. 1

Tärkeä osa työasemaa on näytönohjain, joka nykyisin pitkälti määrittelee koneen tehokkuuden graafisessa käytössä. Pääasiallisena referenssiohjaimena tässä artikkelissa käytetään ATI FireGL X1 näytönohjainta joka pohjautuu R300-piirisarjaan. 2 MUISTIVÄYLÄN KAISTANLEVEYDEN TARVE Jotta tarvittavaa muistiväylän kaistanleveyden tarvetta voitaisiin arvioida, on huomioitava niin käytetty resoluutio kuin virkistystaajuuskin. Tämän lisäksi on todettava, että pikseliä kuvaamaan eivät enää riitä RGB-komponentit, vaan tarvitaan myös tekstuuri ja Z-arvo (eli etäisyys kamerasta). Näin ollen jokaiselle pikselille tarvitaan (Morein, 2000): Bittiä pikseliä kohti = Z puskuri + Z arvo + värin kirjoitus + ( väri) + tekstuurien luku Ensimmäisessä tapauksessa ei tarvita väriarvon lukua ja oletetaan käytettävän vain yhtä tekstuuria, jolla kuitenkin on alfa-kanava, jolloin bittimääräksi pikseliä kohden saadaan: Bittiä pikseliä kohti = Z puskuri + Z arvo+ värin kirjoitus + tekstuurien luku = 32 bittiä + 32 bittiä + 32 bittiä + 32 bittiä = 128 bittiä Esimerkkikokoonpanon määrittelemälle 1600x1200-resoluutiolle ja 85 Hz:n virkistystaajuudelle voidaan näin laskea näytönohjaimen tarvitsema muistiväylän kaistanleveys. 1600 1200 85Hz 128 bittiä / pikseli = 20889600000 bittiä/s = 20,8896Gb / s = 2,6112Gt / s Ruudunpäivitysnopeuteen perustuva arvio tarvittavalle kaistanleveydelle on kuitenkin ongelmallinen, sillä tämä vaatii oletuksia tavoitellusta ja hyväksyttävästä ruudunpäivitysnopeudesta. Esimerkiksi PAL-formaatin televisiovastaanotin piirtää kuvan ruudulle 25 kertaa sekunnissa, NTCS-formaatin vastaanotin puolestaan 30 kuvaa sekunnissa. Edellä ei kuitenkaan ole otettu huomioon esimerkiksi antialiasointia tai useampia pikseli kerroksia, joita muodostuu päällekkäisiä kappaleita piirrettäessä. Kerroksia on tyypillisesti 3-4 kappaletta jokaista pikseliä kohden ja olettaen antialiasoinnin käyttävän neljä näytettä jokaiselle pikselille. ATI Radeon 9700 näytönohjaimessa antialiasoinnin käyttämä näytteiden määrä on säädettävissä kahden ja kuuden näytteen välillä (Weinand, 2002b). Tarvittava muistiväylän kaistanleveys = 4 4 2,6112Gt / s = 41,7792Gt/ s Tämä nostaa muistikapasiteetin tarpeen kuusitoistakertaiseksi eikä edelleenkään ota huomioon multiteksturointia pikselikerroksille. Jotta voisimme arvioida millaisista kuormista näytönohjaimet pystyvät suoriutumaan, täytyy meidän tutkia ohjaimien tarjoamaa muistiväylän kaistanleveyttä. Muistiväylän kaistanleveys lasketaan kaavalla: Muistiväyl än kaistanleveys = väylän nopeus väylän leveys 2

On huomattavaa, että muistityypillä on suuri merkitys tiedonsiirtokapasiteettiin. Esimerkiksi DDR-muisti siirtää tietoa sekä pulssin nousevalla että laskevalla reunalla ja näin efektiivisesti kaksinkertaistaa muistipiirien nopeuden. Esimerkkitietokoneen muistiväylän nopeudeksi saadaan näin Muistiväylän kaistanleveys = 266 MHz 2 siirtoa kellojaksossa 32 bittiä / 8bittiä per tavu = 2128Mt / s 2,1Gt / s Edelleen soveltaen kaavaa esimerkkikokoonpanossamme olleelle FireGL X1 - näytönohjaimelle, jonka muistiväylä koostuu neljästä 64-bitin alalohkosta muodostaen 256- bitin väylän: Muistiväylän kaistanleveys = 310 MHz 2 siirtoa kellojaksossa 256 bittiä / 8 bittiä = 19840Mt / s 19,4Gt / s per tavu On kuitenkin huomattava, että saatu muistiväylän kaistanleveys on teoreettinen arvo. Käytännössä näytönohjaimet eivät pysty hyödyntämään läheskään koko kapasiteettia. Erään esitetyn arvion mukaan nvidia käyttäisi kerrointa 0,75 arvioidessaan muistiväylän kaistanleveyden todellista kapasiteettia (nvidia, 2002). Mielenkiintoiseksi tilanteen tekee myös arvio näytönohjaimen tarvitsemasta muistikaistasta toimiakseen maksimitehollaan. FireGL X1 -näytönohjaimessa on kahdeksan liukuhihnaa jotka kukin toimivat 325 MHz:n nopeudella. Jotta näytönohjain pystyisi toimimaan suorituskykynsä äärirajoilla tarvittaisiin muistikaistaksi: Muistiväyl än kaistanleveys = 8 liukuhihnaa 325MHz / liukuhihna 128 bittiä per pikseli /8 bittiä per tavu 41,6Gt / s Saatu kaistanleveyden tarve on yli kaksikertainen tarjottuun teoreettiseen kaistanleveyteen nähden. On myös huomattavaa, että laskettu muistiväylän kaistanleveyden tarve on hyvin lähellä aikaisemmin laskettua muistiväylän kaistanleveyden tarvetta 1600x1200-resoluutiolle kohtalaisella antialiasoinnilla. nvidian arvio muistiväylän kaistanleveyden tarpeelle vastaavalla resoluutiolla ja nelinkertaisella antialiasoinnilla on peräti 55,3Gb/s, mikä puoltaa tässä laskettujen arvioiden konservatiivisuutta (nvidia, 2002). 3 NÄKYVYYSTARKASTELU Kolmiulotteisen kappaleen piirtäminen ruudulle on sidoksissa kameraan, joka on suunnattu kappaletta kohti. Kameralla on luonnollisesti polttoväli sekä korkeuden ja leveyden määräämä suhde, aspect ratio. Kameralle on myös säädetty arvo, jota lähempänä olevia kappaleita se ei ota huomioon. Tällä etäisyydellä olevaa tasoa kutsutaan near-clipping-planeksi. Vastaavasti kaukaisimman näkyvän arvon muodostamaa tasoa kutsutaan far-clipping-planeksi. Yhdessä nämä suureet muodostavat alueen, jonka sisällä kappaleen täytyy ainakin osittain olla jotta se tulisi piirretyksi ruudulle (Kuva 1). 3

Kuva 1. 3D kappaletta tarkastellaan aina kameran välityksellä. Näkyvät kappaleet jäävät ainakin osittain near- ja far-leikkaustasojen väliin (Woo et al, 1999). Kun piirrettävänä on useampia kappaleita, ei näkyvyysalueella oleminen ole riittävä ehto kappaleen näkymiselle. Kappale voi olla toisen kappaleen joko kokonaan tai osittain peittämä. Tässä kappaleessa keskitytään tapaukseen, jossa kappale on kokonaan peitettynä. Osittaisen näkyvyyden tarkastelu tapahtuu pääsääntöisesti Z-puskurin avulla pikselitasolla. Puhtaasti rautatasolla piirrettävien kappaleiden määrän optimointi rajoittuu lähinnä tarkasteluun onko kappale näkyvällä alueella. Tämä tapahtuu laskemalla kappaleen dimensioista sen ympärille yksinkertainen primitiivi, esimerkiksi kuutio, jonka näkyvyyttä tarkastellaan. Näkyvyystarkastelu tehdään usein kutsuvan ohjelman ja näytönohjaimen yhteistyönä, jolloin näkyvyyskysely palauttaa vähintään tiedon siitä, onko kappale näkyvissä vai ei. Tämä tieto luetaan ohjelmassa ja päätellään, lähetetäänkö kappaletta enää näytönohjaimelle piirrettäväksi. Tästä menetelmästä käytetään nimeä Occlusion Query (Rege, 2002). Pääasiallinen vastuu saatavasta hyödystä on kuitenkin kutsuvan ohjelman harteilla sillä näkyvyystarkastelu vie väistämättä oman aikansa - samoin tulosten välittäminen kutsuvalle ohjelmalle. Kuten myöhemminkin todetaan, on näkyvyystarkasteluja tehtäessä kiinnitettävä huomiota piirtojärjestykseen. Etualalla olevat suuret kohteet peittävät taakseen pienempiä kappaleita joiden piirtämiseltä voidaan välttyä. Jos kauimmaisia kappaleita piirretään ennen niitä peittäviä objekteja suoritetaan turhia piirto-operaatioita. 4 Z-PUSKURI Näytönohjaimen piirtäessä primitiivejä ruudulle, on sen tiedettävä jääkö piirrettävänä oleva kappale jo piirrettyjen kappaleiden taakse. Tämä ongelma ratkaistaan valtaosassa nykyisistä näytönohjaimista käyttämällä Z-puskuria. Z-puskuri on näytönohjaimella oleva muistialue, joka sisältää jokaiselle pikselille syvyyskoordinaatin joka ilmaisee pisteen etäisyyden kamerasta (oikeammin near-clipping planesta). Piirrettäessä uutta pikseliä verrataan sen syvyyskoordinaattia mahdollisesti alla olevan pikselin syvyyskoordinaattiin. Jos piirrettävän pikselin syvyyskoordinaatti on suurempi kuin jo piirretyn, voidaan pikseli jättää käsittelemättä. 4

Z-puskurin algoritmi (Owen, 2002) aloitetaan alustamalla muistialue suurimmalla mahdollisella syvyysarvolla (käytännössä tämä arvo on sama kuin far-clipping plane). Syvyysarvot voivat olla myös normalisoituja 0:n ja 1:n välille. Tämän jälkeen algoritmi etenee seuraavasti: jokaiselle polygonille P jokaiselle pikselille (x, y) P:ssä laske z-syvyys pisteessä x, y jos z-syvyys < z-puskurin arvo pisteessä x, y niin aseta pikseli (x, y, väri) z-puskuri (x, y) <= z-syvyys Algoritmi on yksinkertainen ja hyvin toimiva. Haittapuolista mainittakoon, että on sangen mahdollista, että pikselin väri ja intensiteetti asetetaan useaan kertaan riippuen kappaleiden piirtojärjestyksestä. Jos kappaleet piirretään syvyysjärjestyksessä aloittaen kaukaisimmasta kappaleesta, tarkoittaa se, että kaikki muut kappaleet joudutaan piirtämään niiden lopullisesta näkyvyydestä riippumatta koska piirtohetkellä ne ovat päällimmäisiä kappaleita. Jos tämän lisäksi käytetään pikselinvarjostusohjelmia, joudutaan myös ne ajamaan jokaiselle kappaleelle. Myös muistinkulutus on huomattavaa, koska joka ainoalle pikselille joudutaan tallentamaan 16-32- bittinen arvo, riippuen hieman näytönohjaimesta. Kuten todettua, on syvyystarkastelu nopeaa ja täysin näkyvät kappaleet voidaan piirtää missä järjestyksessä tahansa. Tämä ei kuitenkaan päde osittain läpinäkyville kappaleille; blending - operaatioissa tarvitaan tietoa siitä, mitä pikselin takana on joten kappaleet täytyy piirtää syvyysjärjestyksessä aloittaen etäisimmästä kappaleesta. 5 HYPER-Z Edellä on esitetty, että muistiväylän kaistanleveyden tarve on valtava käytettäessä antialiasointia ja piirrettäessä lukuisia päällekkäisiä kappaleita. Tutkittaessa sitä, mitä tietoa tarvitaan pikselin värin määrittämiseen saadaan eriteltyä mahdollisia optimoinnin kohteita. 5.1 Yleistä Piirrettäessä pikseliä käytetään huonoimmassa tapauksessa 40% (8/20-tavua) kaistanleveydestä Z-puskurin tiedon siirtämiseen (Morein, 2002). Bittiä pikseliä kohti = Z puskuri + Z arvo+ värin kirjoitus + värin luku + tekstuurien luku = 32 bittiä + 32 bittiä + 32 bittiä + 32 bittiä + 32 bittiä + 32 bittiä = 160 bittiä Yleisessä tapauksessa Z-tiedon käyttämä osuus muistikaistasta on 50%. Tämä sisältää yhden tekstuurin lukuoperaation, mikä voidaan olettaa olevan realistinen tilanne mallinnusohjelmissa. Erityisesti peleissä käytetään jo multiteksturointia, mikä lisää lukuoperaatioita. Bittiä pikseliä kohti = Z puskuri + Z arvo+ värin kirjoitus + tekstuurien luku = 32 bittiä + 32 bittiä + 32 bittiä + 32 bittiä 5

= 128 bittiä Vastaavasti nopeimmin käsiteltäviä pikseleitä ovat ne, jotka eivät läpäise Z-testiä ja voidaan näin jättää jatkokäsittelemättä. Bittiä pikseliä = 32 bittiä kohti = Z puskuri Tällöin Z-puskurin osuus käytetystä kaistanleveydestä on 100%. Teknisestä toteutuksesta johtuen on kuitenkin todettava, että tekstuurien ja värien lukemiset voidaan joutua tekemään joka tapauksessa. Joka tapauksessa Z-puskurin osuus siirrettävästä tiedosta on vähintäänkin 40%. Näytönohjaimen muistikaistaa ja muistikaistan tarvetta tutkiessamme totesimme ATI FireGL X1 - näytönohjaimen tarjoavan noin 20 Gt/s kaistanleveyden. Muistiväylää tarvittiin kuitenkin noin 42 Gt/s. Jos Z-puskuria ei tarvittaisi ollenkaan, tippuisi muistiväylän kaistanleveyden tarve 60 prosenttiin alkuperäisestä (noin 25 Gt/s). Tämä on jo sangen lähellä tarjottua kaistanleveyttä. Hyper-Z on joukko ATI:n kehittämiä menetelmiä optimoida Z-puskurin käyttöä ja siirrettävän tiedon määrää sisältäen Z-puskurin pakkauksen, nopean Z-puskurin tyhjennyksen ja hierarkisen Z-puskurin. 5.2 Z-puskurin pakkaus Z-puskurin pakkaus tapahtuu käyttäen DDPCM-menetelmää (Differential Differential Pulse Code Modulation) ja saavuttaa parhaassa tapauksessa pakkaussuhteen 4:1 (Morein, 2002). Kyseessä on kahdesti suoritettava DPCM-koodaus Z-puskurin näytejonolle. DPCMkoodauksessa koodataan näytteiden väliset muutokset eikä koko näytettä. Samanarvoiset, peräkkäiset, näytejonot voidaan tämän jälkeen korvata yhdellä arvolla ja kertoimella joka kertoo montako kertaa näyte esiintyy jonossa. Pakkauksen hyöty saadaan esiin näytteissä, joissa muutoksen suuruus on vakio. DDPCM pakkaa tehokkaasti myös näytejonoja, joissa muutos kasvaa tasaisesti. Taulukko 1. DDPCM-koodaus alkuperäiselle näytejonolle. Näyte 1 2 3 4 5 6 7 8 9 10 PCM 10 11 13 16 20 25 26 25 24 23 DPCM 10 1 2 3 4 5 1-1 -1-1 DDPCM 10 1 1 1 1 1-4 -2 0 0 Koska näytönohjaimet piirtävät kappaleet kolmioina, ovat tämän tyyppiset muutokset näytteiden välillä sangen todennäköisiä. ATI:n mukaan saavutettava pakkaussuhde on vähintään 2:1, mutta käytettäessä esimerkiksi antialiasointia saattaa nousta jopa 24:1. On huomattavaa, että pakkaustapa on häviötön. 6

5.3 Hierarkinen Z-puskuri Hierarkinen Z-puskuri tarkoittaa Z-puskurin jakamista pienempiin lohkoihin joita verrataan piirrettävää aluetta vasten. Alun perin Hyper-Z jakoi Z-puskurin 8x8 pikselin lohkoihin jonka sisältämien pikseleiden maksimiarvo tallennettiin nopeaa vertailua varten. Piirrettäessä uutta kappaletta verrataan sen minimiarvoa lohkon maksimiarvoon. Jos kappaleen minimiarvo on suurempi kuin lohkon maksimiarvo, ei kappale näy kyseisen lohkon alueella ja sen käsittely voidaan jättää huomiotta. Tarkastelu tapahtuu ennen rasterointia, mikä nopeuttaa näytönohjaimen toimintaa entisestään. Hyper-Z III esitteli kolmivaiheisen hierarkisen Z-puskurin. Tässä Z-puskuri on jaettu kolmeen hierarkiatasoon, joita verrataan kukin vuorollaan. Jos ensimmäisessä vertailussa (edellisen kappaleen tilanne) todetaan, että kappale näkyy ainakin osittain, suoritettaan tarkastelu astetta pienemmälle lohkolle. Jos kappale näkyy tämänkin läpi, siirrytään pikselikohtaiseen tarkasteluun (Kuva 2). Saavutettavat hyödyt ovat nähtävissä muistiväylän kaistanleveyden tarpeen pienenemisessä ja vertailuoperaatioiden määrän vähenemisessä. Kuva 2. Kolmivaiheinen Z-puskurin avulla tapahtuva näkyvyystarkastelu etenee asteittain pikselitason tarkasteluun. Kohdassa 1 olevan kappaleen taakse piirretään sinistä kolmiota joka näkyy kuvassa kohdassa 2. Tarkasteltaessa ylimmän hierarkiatason lohkoja (kohta 3) havaitaan lohko joka ei tule näkymään ollenkaan. Toisen tason lohkoille suoritetaan vastaava tarkastelu kohdassa 4 ja pikselikohtainen tarkastelu kohdassa 5. Lopputulos näkyy kohdassa 6 (Weinars, 2002a). Z-puskuri on ohjelmatasolla käyttäjälle läpinäkyvä, eli sen toimintaa ei erikseen ohjata. Näin ollen suurin osa 3D-ohjelmista toimii piirtämällä kuvan yhä uudelleen edellisen päälle pyyhkimättä edellistä kuvaa. Tämä ei pääsääntöisesti ole ongelma, koska kaikki kuvan pikselit piirretään kerta toisensa jälkeen. Näytönohjaimen täytyy kuitenkin alustaa Z-puskuri piirrettyjen kuvien välillä, jotta edellisten kuvien Z-arvot eivät vaikuttaisi näkyvyyden määrittämiseen. 7

5.4 Nopea Z-puskurin tyhjennys Erityisesti korkeita resoluutioita käytettäessä Z-puskurin koko on sangen iso, noin 5.5Mb resoluutiolla 1600x1200. Tämän muistialueen alustaminen vie luonnollisesti aikansa, mikä voi käydä kriittiseksi nopeita päivitystaajuuksia tavoiteltaessa. Kuluvaa aikaa on vähennetty huomattavasti toteuttamalla tyhjennys lohkokohtaisesti. Jokainen lohko omaa merkin, joka kertoo onko lohko alustettu vai ei. Z-puskuria ei missään vaiheessa alusteta fyysisesti. Jos lohko on alustettu, saavat sen näytteet uuden arvon ensimmäisellä piirtokerralla, muussa tapauksessa suoritetaan normaali näkyvyystarkastelu. ATI:n arvioiden mukaan Z-puskurin tyhjennyksen vaatima aika kutistuu noin kuudeskymmenesneljäsosaan. Tämä riippuu suoraan lohkojen koosta, kyseinen arvio saavutetaan 8x8 näytteen lohkoilla. 5.5 Yhteenveto On huomattava, että vaikka Hyper-Z nopeuttaakin näytönohjaimia huomattavasti, mm. kappaleiden piirtojärjestyksellä on suuri merkitys piirrettävien kuvien päivitysnopeuteen. Hyper-Z ei poista normaalin Z-puskurin kanssa esiintyviä ongelmia, mutta pystyy kyllä lieventämään niitä. Hyper-Z on kehittynyt ensimmäisistä verisoistaan huomattavasti. Ensimmäinen Hyper-Z ominaisuuksia hyödyntävä näytönohjain oli ATI Radeon, Hyper-Z II esiteltiin Radeon 8500 sarjan yhteydessä. Radeon 9700 ohjain esitteli kolmannen version tekniikasta johon oli tehty parannuksia mm. nopeaan tyhjennykseen ja Z-puskurin pakkaukseen. Tänä keväänä esitelty Radeon 9800 -sarja lisäsi toiminnallisuuteen parannetun Z-välimuistin stencil-puskurille III+ versiossa. Lightspeed Memory Architecture on nvidian vastine ATI:n Hyper-Z tekniikalle. LMA hyödyntää niin ikään Z-puskurin häviötöntä pakkausta, nopeaa Z-tyhjennystä kuin näkyvyyden määrittämistäkin. Tämän lisäksi nvidia laskee mukaan muistinohjaimen ja välimuistit (nvidia, 2002). Voitaneen olettaa että erot Hyper-Z arkkitehtuuriin ovat aika pieniä. nvidia ilmoittaa Z- puskurin pakkaussuhteeksi 4:1, mikä vastaa ATI:n optimistista arviota. Näkyvyysmäärittely perustuu niin ikään Z-puskurin arvojen tarkasteluun. 6 PIKSELINVARJOSTUSOHJELMAT Edeltävissä kappaleissa olemme sivunneet pikselinvarjostusohjelmia. Vaikka ne eivät kuulu Hyper-Z kategoriaan ja niiden vaikutusta muistiväylän kaistanleveyden tarpeeseen on hyvin vaikeaa arvioida, käydään näiden toiminta tässä lyhyesti läpi. Pikselinvarjostusohjelma on lyhyt ohjelma, joka suoritetaan jokaiselle piirrettävälle pikselille sen väriarvon määrittämiseksi. Pikselinvarjostusohjelmat muokkaavat pikselin väriarvoja käyttäen pääsääntöisesti apunaan näytönohjaimelle tallennettuja tekstuureita. Tämä lähestymistapa edellyttää luonnollisesti useampia tekstuurinlukuoperaatioita ja johtaa näin kaistanleveyden tarpeen kasvamiseen (Penfold, 2002). 8

Pikselinvarjostusohjelmilla on myös rajoitteita niiden koon ja suoritusnopeuden suhteen näytönohjainmallista riippuen. Tässä paperissa ei kuitenkaan käsitellä pikselinvarjostusohjelmia tämän syvällisemmin. 7 UUDET NÄYTÖNOHJAIMET Tässä artikkelissa on keskitytty lähinnä uusiin näytönohjaimiin, jotka ovat jo pääasiassa markkinoilla. Esimerkeissä on käytetty ATI FireGL X1-näytönohjainta, joka pohjautuu R300 - piiriin. Radeon 9700 Pro ja FireGL X1 ovat GPU:n (Graphics Processing Unit) toteutukselta identtiset. Ainoat erot ovat ajureissa, näytönohjaimella olevassa muistimäärässä ja kosmeettisissa eroavaisuuksissa. Näytönohjaimen GPU toimii 325 MHz kellotaajuudella ja muistina on käytetty 256-bittistä DDR muistia 310 MHz kellotaajuudella. Näytönohjain tukee kaikkia edellä mainittuja näkyvyystarkastelutapoja ja hyödyntää Hyper-Z III arkkitehtuuria. Selkeänä erona mainittakoon Z-puskurin bittimäärä; R300 käyttää 24- bittistä Z-puskuria, minkä lisäksi on toteutettu 8-bitin stencil-puskuri. Tänä keväänä julkaistu R350-piiri eroaa R300-piiristä lähinnä korkeammilla kellotaajuuksilla, mitkä lisäävät käytettävissä olevaa muistikaistaa ja prosessointinopeutta. R350:n GPU:n kellotaajuus on 380 MHz ja muistin vastaavasti 340 MHz. Hyper-Z on saanut pieniä parannuksia ja uuden versionumeron, III+. nvidian tehokkain piiri NV30 julkaistiin niin ikään tämän vuoden alkupuolella. Piirin GPU ja DDR-II -tyyppinen muisti toimivat tehokkaimmassa näytönohjaimessa 500 MHz kellotaajuudella. Toisin kuin ATI, on nvidia päätynyt käyttämään 128-bittistä muistiväylää. Kuten ATI, myös nvidian uusi näytönohjainsukupolvi tukee edellä esiteltyjä näkyvyystarkasteluja. nvidia on myös kehittänyt OpenGL-laajennuksen Occlusion Query tekniikkaa varten. Taulukossa 2 on laskettu esiteltyjen piirisarjojen kaistanleveys ja esitetty siihen vaikuttavat komponentit. Kellotaajuudet pohjautuvat fyysisiin arvoihin; markkinointitarkoituksissa on usein esitetty mm. muistien nopeudet kaksinkertaisina huomioiden DDR tekniikan vaikutukset. Taulukko 2 Näytönohjaimien muistiväylien nopeus Piiri GPU Muistit Väylä Muistityyppi Kaistanleveys R300 325 MHz 310 MHz 256b DDR 19,4 Gb/s R350 380 MHz 340 MHz 256b DDR 21,3 Gb/s NV30 500 MHz 500 MHz 128b DDR-II 15,6 Gb/s 8 SUORITUSKYVYSTÄ nvidian uuden näytönohjaimen rajoittunut kaistanleveys herättää kysymyksiä nykyisten näytönohjainten muistiväylän kaistanleveyden tarpeesta. Hyper-Z- ja LMA -arkkitehtuurien tarjoamaa nopeushyötyä on hankala arvioida koska molemmat ovat piiritason tekniikoita ja näin ollen niiden poiskytkeminen ajuritasolla ei onnistu. 9

Suorituskykyä voidaan kuitenkin arvioida epäsuorasti mittaamalla näytönohjaimien skaalautuvuutta tietokoneen prosessorin suhteen. Kasvatettaessa prosessorin nopeutta ja verratessa näytönohjaimen suorituskykyä nähdään, että suorituskyvyn kasvu ei suinkaan ole lineaarista (Kuvat 3 ja 4). Pullonkaulaksi muodostuu siis joko tiedon toimittaminen näytönohjaimelle tai itse näytönohjain (Shimpi, 2003). Kuva 3. Näytönohjaimen suorituskyky eri suorittimien nopeuksilla ja resoluutiolla 1024x768. R300-piirin nopeuden kasvu on lähestulkoon lineaarista. Ti-4600 näytönohjaimen suorituskyvyn kasvu hidastuu voimakkaasti prosessoritehon lisääntyessä (Shimpi, 2002). 10

Kuva 4. Näytönohjaimen suorituskyky eri suorittimien nopeuksilla ja resoluutiolla 1280x1024. Kummankaan näytönohjaimen kohdalla kasvu ei suinkaan ole lineaarista, mikä osoittaa prosessoritehon kasvattamisen vaikuttavan vähenevässä määrin näytönohjaimen suorituskykyyn (Shimpi, 2002). Vertailtaessa R350 ja NV30-piirejä keskenään, on R350-piiri nopeampi erityisesti käytettäessä antialiasointia ja anisotrooppista suodatusta huolimatta NV30-piirin nopeammista kellotaajuuksista (Weinars, 2002b). Tämä antaa viitteitä siitä, että muistiväylän hitaus on ainakin NV30:n tapauksessa muodostunut ongelmaksi. 9 YHTEENVETO Tässä paperissa esitetyt laskelmat ovat olleet konservatiivisia jättäen huomiotta mm. muistiväylän siirtokyvyn epäideaalisuuden ja pikselinvarjostusohjelmat. Muistiväylän epäideaalisuuksien vaikutusta on hyvin hankala arvioida, koska valmistajat eivät ole halukkaita ilmoittamaan näytönohjaimiensa muistiväylän hyötysuhdetta. Pikselinvarjostusohjelmien vaikutus muistiväylän kapasiteettiin on puolestaan sovelluskohtainen, ja yleispäteviä on hyvin hankala esittää. Z-puskurin pakkaus ja hierarkinen Z-puskuri vähentävät tarvittavaa kaistanleveyttä huomattavasti, mutta pystyvät vain pienentämään ongelmaa. Näytönohjaimien valmistajat ovatkin kehitelleet myös muita menetelmiä muistiväylän kaistanleveyden tarpeen pienentämiseksi, kuten esimerkiksi värien pakkaus, joka tapahtunee Z-puskurin pakkausta vastaavalla menetelmällä. Näiden menetelmien hyödyn arviointi on vaikeaa. On muistettava, että ongelmat ovat aina suhteessa haluttuun ruudunpäivitysnopeuteen ja näin ollen myös ohjelman käyttötarkoitukseen. Muistiväylän kaistanleveyden tarpeessa on eroa riippuen siitä, piirtääkö sovellus 50 vai 25 kuvaa sekunnissa. 11

VIITTEET Akenine-Möller, Tomas; Haines, Erik. 2002. Real-Time Rendering. 2 nd edition. A.K. Peters Ltd. 880 p. pp 692-700 Morein, Steve. 2000. ATI Radeon HyperZ Technology. Interlagen, Switzerland, 22.8. 2000. SIGGRAPH Eurographics Graphics Workshop 2000. 21 p. nvidia Corporation. 2002. Technical Brief, NVIDIA Lightspeed Memory Architecture II. NV Doc # - TB-00312-001. nvidia. 12 p. Owen, G. Scott. 2002. HyperGraph. ACM SIGGRAPH Education Committee. Penfold, Dom. 2002. Vertex Shaders and Pixel Shaders. 20.4. 2003. Tom s Hardware Guide. 11 p. Rege, Ashu. 2002. Occlusion (HP and NV extensions), GDC2002. nvidia. 19 p. Shimpi, Anand Lal. 5.4. 2002. ATI Radeon 9700 Pro Delivering as Promised. 5.4. 2003. Anandtech. 23 p. Shimpi, Anand Lal. 2003. ATI s Radeon 9800, 9600 & 9200: Still Fighting Strong. 5.4. 2003. Anandtech. 12 p. Weinars, Lars. 2002a. Ati Takes Over 3D Technology Leadership With Radeon 9700. 5.4. 2003. Tom s Hardware Guide. 25 p. Weinars, Lars. 2002b. Ati Radeon 9700 PRO Pretender To The Throne. 5.4. 2003. Tom s Hardware Guide. 25 p. Weinand, Lars. 2003. Ati Strikes Again. 5.4. 2003. Tom s Hardware Guide. 24 p. Woo, Mason; Neider, Jackie; Davis, Tom; Shreiner, Dave. 1999. OpenGL Programming Guide. 3 rd edition. Reading, Massachusetts. Addison-Wesley. 730 p. pp 126. 12