Hlavní navigace

3D akcelerátory a jejich první generace

31. 12. 2009
Doba čtení: 12 minut

Sdílet

V dnešní části seriálu o architekturách počítačů se budeme zabývat grafickými akcelerátory určenými pro vykreslování trojrozměrných scén reprezentovaných pomocí plošných otexturovaných polygonů. Vývoj grafických akcelerátorů prošel na počítačích PC několika fázemi. Dnes bude popsána jejich první generace.

Obsah

1. Grafické akcelerátory určené pro vykreslování trojrozměrných scén

2. Základní operace prováděné 3D akcelerátory

3. GPU, OpenGL a Direct3D

4. Mikroprocesor Intel i860 – Cray on a Chip?

5. Podpora grafických operací mikroprocesorem Intel i860

6. Grafický akcelerátor Voodoo 1

7. Grafické operace podporované akcelerátorem Voodoo 1

8. Obsah dalšího pokračování seriálu

9. Odkazy na Internetu

1. Grafické akcelerátory určené pro vykreslování trojrozměrných scén

V předchozí části seriálu o architekturách počítačů jsme se zabývali především popisem grafických akcelerátorů určených pro urychlení práce s plošnou (2D) grafikou, popř. pro rychlou dekomprimaci (a v některých případech i komprimaci) videa. Tyto grafické akcelerátory sice nabízely dostatek funkcí pro běžná (neherní) PC, ovšem před cca deseti lety se ve velké míře rozšířily grafické karty a grafické čipy podporující vykreslování 3D scén, které postupně nahradily 2D akcelerátory (na tento trend zareagovali i vývojáři grafických částí operačních systémů, ale to je již téma na některé z dalších pokračování tohoto seriálu). V současné době tedy patří mezi nejčastěji používané grafické akcelerátory takové systémy, které umožňují rychlé vykreslení prostorových těles popsaných pomocí hraniční reprezentace (boundary representation, B-rep). Tělesa jsou v hraniční reprezentaci popsána svým povrchem rozděleným většinou na plošné konvexní polygony.

pc93

Obrázek 1: Vykreslovací řetězec používaný grafickými akcelerátory při zpracovávání trojrozměrných scén. Do vykreslovacího řetězce vstupují dva typy dat – informace o vrcholech polygonů (trojúhelníků, plošných čtyřúhelníků atd.) a rastrová data, většinou bitmapy (znaky v rastrové podobě, bitové masky, sprity, kurzory myši) a především textury nanášené na vykreslované polygony.

Postupný vývoj čipů určených pro 3D akceleraci je naznačen v následující tabulce. Jsou v ní vypsány některé čipy (i860 je dokonce samostatně pracující mikroprocesor), na které zhruba na přelomu tisíciletí navázaly výkonnější 3D akcelerátory druhé generace, kterými se budeme zabývat později.

Akcelerátor/čip Rok vydání
Intel i860 1989
Voodoo I Graphics PCI 1996
S3 Savage 3D 1998
Intel i740 1998

2. Základní operace prováděné 3D akcelerátory

Zjednodušeně je možné říci, že základní operací, kterou musí tyto 3D grafické akcelerátory provádět, je zobrazení vyplněných trojúhelníků s korektním řešením jejich vzájemného překryvu podle vzdálenosti od pozorovatele (kamery). Tato základní operace však musí být pro reálné použití (především v počítačových hrách) v několika směrech rozšířena, protože trojúhelník může být osvětlený jedním či několika světelnými zdroji nebo může být pokrytý texturou, popř. obojím (k tomu ještě připočítejme možnost vykreslení poloprůhledných trojúhelníků, které vyžaduje poněkud obtížnější přípravu 3D scény před jejím vykreslením). Dále může být povrch prostorových těles reprezentovaný polygony s větším počtem vrcholů, takže je – v případech, kdy se jedná o polygony nekonvexní – zapotřebí provádět výpočetně náročnou tesselaci obecných polygonů na jednodušší trojúhelníky. V neposlední řadě je žádoucí provádět pokročilejší operace s vykreslovanými tělesy (resp. s jejich povrchem), například postupné skrývání objektů v mlze (fog), bilineární či trilineární filtraci textur (především při použití mipmappingu) nebo provádění antialiasingu při vykreslování (supersampling, adaptive antialiasing).

pc93

Obrázek 2: Slavná Utažská čajová konvice (Utah teapot) vykreslená pomocí grafického akcelerátoru. Povrch konvice byl před provedením vykreslování programově převeden ze spline ploch na síť trojúhelníků. Pro každý vrchol trojúhelníku bylo vypočtena jeho barva pomocí Phongova osvětlovacího modelu a trojúhelníky byly následně vykresleny s využitím Gouraudova stínování, které interpoluje barvu v každém bodě povrchu trojúhelníku na základě pozice tohoto bodu oproti vrcholům trojúhelníku. Algoritmus Gouraudova stínování je tak jednoduchý, že ho bylo možné relativně snadno implementovat i v první generaci 3D grafických akcelerátorů.

3. GPU, OpenGL a Direct3D

První generace grafických akcelerátorů dostupná pro počítače PC sice nedokázala provádět veškeré výše zmíněné operace, ovšem grafické subsystémy se neustále zrychlují a zdokonalují, čímž je umožněna aplikace stále většího množství grafických algoritmů přímo na čipech grafického akcelerátoru. To je důležité zejména v situacích, kdy se kromě vlastního zobrazování používají i další výpočty nad vykreslovanou scénou, například fyzikální simulace či výpočet trajektorie a případných kolizí pohybujících se těles. V tomto případě je vhodné ponechat co nejvíce výpočetního výkonu mikroprocesoru pro výpočet simulací a veškeré grafické algoritmy či co jejich největší část provádět na specializovaném zařízení – grafickém procesoru GPU (Graphics Processor Unit), který se stává nedílnou součástí prakticky všech grafických čipů a některé jeho vlastnosti (především paralelní zpracování dat, hluboké zřetězení operací – pipelining) předurčují GPU i k tomu, že se pomocí nich provádí i další (negrafické) algoritmy.

pc93

Obrázek 3: Utah teapot zobrazený s odlesky způsobenými odrazem světelných paprsků od jeho povrchu. Tento efekt některé grafické akcelerátory z první generace nedokázaly vytvořit (neobsahovaly jednotku pro výpočet osvětlovacího modelu), proto se musely odlesky předpočítat (a uložit například formou textury, která modulovala texturu základní). Moderní grafické akcelerátory již mají implementován celý osvětlovací model, tedy i výpočet odlesků.

Za zmínku stojí také skutečnost, že téměř všechny postupy, které jsou dnes implementovány na popisovaných grafických akcelerátorech, je možné vyjádřit či popsat pomocí funkcí dvou v současnosti nejpoužívanějších rozhraní pro 3D grafiku: OpenGL a Direct3D (v minulosti bylo pro akcelerátory s čipy firmy 3dfx vyvinuto i poměrně populární rozhraní GLIDE, které dokázalo využít i takové vlastnosti grafických akcelerátorů, které nebyly v tehdejších verzích OpenGL a vznikajícího DirectX dostupné). Unifikované rozhraní je výhodné především pro programátory aplikací, kteří mohou jednotně vytvářet aplikace, které budou funkční na téměř všech grafických akcelerátorech této kategorie. Pokud není nějaký grafický efekt či trik přímo implementován na akcelerátoru (například skrývání objektů v mlze), je zvolen jeho (obecně pomalejší) programový výpočet nebo se efekt vůbec neaplikuje. Pěkným příkladem je například takzvaný bump mapping, který je možné vynechat za cenu vizuálního „vyrovnání“ původně nerovných povrchů.

pc93

Obrázek 4: Trojrozměrná scéna vykreslená s využitím efektu mlhy (fog), který byl ve své nejjednodušší podobě implementován již na prvních grafických 3D akcelerátorech pro PC vybavených čipy 3dfx (Voodoo Graphics PCI).

4. Mikroprocesor Intel i860 – Cray on a Chip?

Ještě před popisem grafických akcelerátorů reálně používaných na počítačích PC se zmiňme a zajímavém (i když komerčně neúspěšném) projektu firmy Intel, který se v několika ohledech podobá již popsané architektuře TIGA, i když samotná interní struktura obou čipů byla odlišná. Firma Intel navrhla a následně na konci roku 1989 představila nový typ mikroprocesoru s architekturou RISC a instrukční sadou typu VLIW (v jednom instrukčním slově je zakódováno větší množství operací, každá z nich určená pro jinou jednotku na čipu), který nazvala Intel i860 a v propagačních materiálech poněkud nadneseně označovala sloganem „Cray on a Chip“. Jednalo se v podstatě o výkonný signálový procesor (DSP – Digital Signal Processor) podporující celočíselné i základní FP operace, který byl navíc vybavený jednotkou specializovanou pro provádění grafických operací použitelných například při vyplňování trojúhelníků, vykreslování poloprůhledných ploch atd.

pc93

Obrázek 5: Mikroprocesor Intel i860.

Mikroprocesor i860 obsahoval 32 třicetidvou­bitových registrů určených pro provádění běžných celočíselných aritmetických i logických operací a dále pak 16 registrů o šířce 64 bitů (rozdělitelných na 32 třicetidvou­bitových registrů) použitelných pro operace prováděné s hodnotami uloženými ve formátu plovoucí řádové tečky (čárky). Kromě klasické aritmeticko-logické jednotky (ALU) tento procesor obsahoval i dvě specializované jednotky, které dohromady můžeme označit jako zjednodušený, ale o to rychlejší matematický koprocesor. První z těchto jednotek byl FP adder, s jehož pomocí bylo možné provádět součty, rozdíly, porovnání a konverze čísel uložených v systému plovoucí řádové tečky. Druhá jednotka nazvaná FP multiplier sloužila k součinu dvou čísel a taktéž k výpočtu převrácené hodnoty. Všechny tři základní jednotky, tj. ALU, FP adder a FP multiplier pracovaly paralelně, přičemž paralelismus byl podporován přímo v instrukční sadě (viz výše uvedená zmínka o instrukční sadě typu VLIW – Very Long Instruction Word).

pc93

Obrázek 6: Při výpočtu mlhy (viz předchozí obrázky) je nutné provést pro každý vykreslovaný fragment (fragment je, zjednodušeně řečeno, entita nesoucí informaci o jednom pixelu doplněnou o další atributy, například hloubku/vzdálenost fragmentu od pozorovatele) smíchání původní barvy fragmentu s barvou mlhy, přičemž poměr mezi původní barvou a barvou mlhy je určen na základě vzdálenosti fragmentu od pozorovatele a hustoty mlhy. Tuto operaci lze na mikroprocesoru Intel i860 implementovat poměrně snadno, především při použití jeho „grafických“ operací.

5. Podpora grafických operací mikroprocesorem Intel i860

Vraťme se však k podpoře grafických operací mikroprocesorem Intel i860. Tyto operace byly implementovány přímo v jeho instrukční sadě – kromě běžných instrukcí určených pro provádění operací s operandy reprezentovanými v systému pevné i pohyblivé řádové čárky (fixed point, floating point) rozpoznával mikroprocesor deset instrukcí provádějících grafické operace. Jednalo se například o operace umožňující práci s pixely (čtení, zápis, konverze z různých formátů, míchání barev) či práci se Z-bufferem (testování hodnoty uložené v registru oproti hodnotě uložené v Z-bufferu). Nejednalo se tedy o stejné operace, jaké můžeme najít na moderních grafických akcelerátorech, ale o určitou podporu pro vykreslovací (renderovací) algoritmy, které mohly s výhodou využít možnosti souběžného zpracování několika operací mikroprocesorem (tento typ paralelismu byl přímo řízený překladačem, na rozdíl od dnešních superskalárních procesorů vybavených obvody, které instrukce samy rozdělují mezi jednotlivé jednotky).

pc93

Obrázek 7: Operace s fragmenty prováděné při rasterizaci trojúhelníků či obecnějších konvexních polygonů na grafickém akcelerátoru. Naznačené operace s fragmenty je možné poměrně snadno programově implementovat i na mikroprocesoru Intel i860 s využitím specializovaných grafických instrukcí.

Aby byla rychlost provádění grafických operací dostatečná, prováděly se operace vždy nad větším množstvím dat, například nad čtveřicí či osmicí pixelů, jejichž hodnoty byly uložené v registrech původně určených pro operace s plovoucí řádovou tečkou (FP). Tato technologie byla později po několika úpravách představena i na platformě x86 pod jménem MMX. Výkonnost grafických operací byla na dobu vzniku mikroprocesoru poměrně uspokojivá: mikroprocesor například dokázal zkonvertovat a následně vystínovat Gouraudovým stínováním až 50 000 trojúhelníků za sekundu, přičemž se počítá s tím, že plocha každého trojúhelníku je průměrně 100 pixelů. Jediný problém, který částečně zapříčinil neúspěch celého mikroprocesoru i860, spočíval v tom, že optimalizaci kódu musel provádět buď přímo programátor v assembleru (nepoužitelné na větší projekty) nebo překladač; ovšem kvalita tehdejších překladačů nebyla tak dobrá do té míry, aby se využila celá výpočetní síla tohoto mikroprocesoru (viz následující tabulka s teoretickými hodnotami).

Mikroprocesor Hodinová frekvence Výpočetní výkon
i860 40 MHz 80 MFLOPS (single precision)
i860 40 MHz 60 MFLOPS (double precision)
i860XR 40 MHz 80 MFLOPS (double precision)
i860XR 40 MHz 42 SPECmark

6. Grafický akcelerátor Voodoo 1

Při popisu první generace grafických akcelerátorů určených pro osobní počítače PC samozřejmě nesmíme zapomenout na slavný grafický akcelerátor Voodoo 1, který se záhy po svém uvedení na trh stal po dobu cca 1,5 roku ikonou akcelerované 3D grafiky. Tento grafický akcelerátor se do počítače připojoval přes sběrnici PCI. Jednalo se přitom – což je možná z dnešního pohledu neobvyklé, ale z obchodního hlediska velmi dobré řešení – o doplněk ke grafické kartě, což v praxi znamenalo, že pro běžnou práci s počítačem (textové i grafické režimy) se využívalo funkcí grafické karty (VGA, SVGA atd.) a teprve při práci s trojrozměrnými scénami se výstup z grafické karty zakázal a její funkci převzal grafický akcelerátor Voodoo 1, který tak nemusel obsahovat VGA BIOS, zaručovat kompatibilitu s VGA ani další funkce očekávané od běžné 2D grafické karty. Tvůrci Voodoo 1 tak mohli své čipy optimalizovat pouze pro 3D grafiku.

pc93

Obrázek 8: Grafický akcelerátor Voodoo 1. Na plošném spoji můžeme vidět dvojici čipů tvořících srdce grafického akcelerátoru – FBI a TMU. Po levé straně se nachází dvojice patnáctipinových konektorů. Jeden z konektorů sloužil k propojení mezi grafickou kartou a grafickým akcelerátorem, druhý konektor pak k připojení monitoru.

7. Grafické operace podporované akcelerátorem Voodoo 1

Akcelerátor Voodoo 1 obsahoval dvojici patnáctipinových konektorů D-sub. Na první konektor se pomocí krátkého kabelu připojoval výstup z grafické karty (karta si tedy „myslela“, že posílá video signál na monitor, ve skutečnosti ho však předávala do grafického akcelerátoru). Na konektor druhý se buď posílal signál z grafické karty (přemostění) nebo naopak signál generovaný přímo grafickým akcelerátorem (některé karty Voodoo 1 pro přepínání video signálu používaly relé, které slyšitelně „cvakalo“ při spuštění 3D akcelerace). O vykreslování 3D scén se starala dvojice specializovaných čipů nazvaných FBI a TMU. Čip FBI neboli Pixelfx zajišťoval komunikaci s počítačem, přístup do lineárního framebufferu (obrazové paměti), implementoval Gouraudovo stínování (pomocí interpolátorů), funkci Z-bufferu (paměti hloubky), ditheringu obrazu a taktéž výpočet efektu mlhy. Naproti tomu čip TMU neboli Texelfx sloužil pro mapování textur, bilineární a trilineární filtraci textur a mipmapping.

Video paměť složená z modulů EDO DRAM, měla kapacitu 4 MB, přičemž byla rozdělena na dvě poloviny. První 2 MB sloužily pro framebuffer, tj. pro uložení rastrového obrazu a „zadní“ buffer (při použití double bufferingu), ale i pro paměť hloubky (Z-buffer). Tato paměťová kapacita umožňovala použití double bufferingu pro rozlišení 640×480 pixelů při použití 16bitové barevné hloubky a 16bitového Z-bufferu (informace v něm mohly být uloženy buď jako celá čísla nebo hodnoty v pohyblivé řádové čárce představující převrácenou hodnotu vzdálenosti fragmentů od pozorovatele, důvod si vysvětlíme příště). Potřebná kapacita video paměti je v tomto případě rovna: 640×480×2×3=1843200 bajtů (konstanta 3 znamená přední buffer + zadní buffer + Z-buffer, konstanta 2 samozřejmě 16 bitů na pixel či fragment). Druhé 2 MB video paměti byly určeny pro uložení textur a jejich zpracování čipem TMU.

Podrobnější informace o tomto (z hlediska vývoje 3D grafiky) významném grafickém akcelerátoru si uvedeme v následující části seriálu.

8. Obsah dalšího pokračování seriálu

V následující části seriálu o architekturách počítačů si podrobněji popíšeme vnitřní strukturu a funkci dalších grafických akcelerátorů. Především se budeme zabývat čipem Intel i740, který jako první nabídl uživatelům grafický akcelerátor určený pro sběrnici AGP se všemi výhodami, které tato sběrnice nabízí (Intel měl v tomto ohledu nad ostatními výrobci grafických akcelerátorů výhodu, protože kromě detailní znalosti AGP tento grafický čip přizpůsobil svému čipsetu i440). Jedná se především o možnost uložení textur přímo v operační paměti počítače s tím, že grafický akcelerátor může automaticky načítat ty části textur, které potřebuje při vykreslování celé trojrozměrné scény, z operační paměti bez nutnosti meziuložení textur v paměti texturovací. Tento způsob práce grafického akcelerátoru je sice pomalejší než přímé použití video paměti (zde speciálně texturovací paměti), ovšem umožňuje poměrně výrazné snížení ceny celého grafického akcelerátoru. Právě z tohoto důvodu byly grafické akcelerátory vybavené čipem Intel i740 i přes nižší grafický výkon v našich krajinách velmi oblíbené.

root_podpora

pc93

Obrázek 9: Grafická karta osazená čipem Intel i740.

9. Odkazy na Internetu

  1. 25 Microchips That Shook the World
    http://www.synbio.org.uk/…ws/1351.html
  2. Sprite (computer graphics)
    http://en.wikipedia.org/wiki/Sprite_(computer_grap­hics)
  3. Sprite (počítačová grafika)
    http://cs.wikipedia.org/wiki/Sprite_(počítačová_gra­fika)
  4. Wikipedia: Video Display Controller
    http://en.wikipedia.org/…y_Controller
  5. 3dfx Voodoo1 PCI
    http://www.v3info.de/…tml/v1.shtml
  6. Glide 2.2 Programming Guide
    http://www.gamers.org/…glidepgm.htm
  7. Glide API
    http://en.wikipedia.org/wiki/Glide_API
  8. S3 Graphics
    http://www.s3graphics.com/en/index.aspx
  9. TSENG ET6000 Performance Page
    http://dani75.tripod.com/TSENG.htm
  10. Tseng Labs Ships ET6000 Advanced Graphics Chip, Announces Additional Manufacturing Sources
     http://www.encyclopedia.com/…8088868.html
  11. CyberMax chooses Tseng Labs' ET6000 Graphics and Video Controller for Max and ProMax Series PCs
     http://findarticles.com/…ai_18754932/
  12. Intel i860
    http://en.wikipedia.org/wiki/Intel_860
  13. Intel i860 64-Bit Microprocessor
    http://www.microprocessor.sscc.ru/i860.html
  14. S3 Savage
    http://en.wikipedia.org/wiki/S3_Savage
  15. Savage (S3)
    http://www.economy-point.org/…vage-s3.html
  16. Intel i740
    http://en.wikipedia.org/wiki/Intel740
  17. Intel i740 Datasheet
    ftp://download.intel.com/…29061902.pdf
  18. Intel740™ Graphics Accelerator P854 Hardware
    ftp://download.intel.com/…29062202.pdf
  19. 3dfx Interactive
    http://en.wikipedia.org/…doo_Graphics
  20. Intel 860@cpu-collection
    http://www.cpu-collection.de/?…

Byl pro vás článek přínosný?

Autor článku

Vystudoval VUT FIT a v současné době pracuje na projektech vytvářených v jazycích Python a Go.