Obsah
1. Grafické akcelerátory na pracovních stanicích
2. Alternativy ke sběrnicové topologii
5. Vector Floating-Point Processor
7. Struktura paměti využívané grafickým akcelerátorem Stellar GS2000
8. Obsah následující části seriálu
1. Grafické akcelerátory na pracovních stanicích
V předchozích částech tohoto seriálu jsme si popsali strukturu a funkci prvních typů grafických akcelerátorů určených pro osobní počítače, tj. pro platformu x86. Jednalo se o grafický akcelerátor Voodoo 1 určený pro připojení do sběrnice PCI (by specializován pouze pro vykreslování 3D grafiky) a poněkud modernější, i když komerčně méně úspěšný akcelerátor Intel 740, jenž s mikroprocesorem a operační pamětí komunikoval pomocí portu AGP. Osobní počítače založené na platformě x86 měly v dobách největšího rozšíření těchto grafických akcelerátorů poměrně jednoduchou architekturu, jenž je ve zjednodušené podobě vyobrazena na obrázku číslo 1. Na tomto schématu můžeme vidět, že čipová sada (rozdělená do dvou čipů nazývaných North Bridge a South Bridge, jejichž pojmenování vzešlo z jejich typického umístění na základní desce) umožňuje vzájemné propojení jednoho mikroprocesoru (u některých čipových sad maximálně dvou mikroprocesorů), paměťových modulů, ze kterých je sestavena operační paměť, slotu určeného pro připojení grafického akcelerátoru přes port AGP, interní sběrnice PCI pro ostatní karty umístěné v počítači, řadič rozhraní IDE (připojení pevných disků, CD-ROM…) atd.
Obrázek 1: Zjednodušené schéma relativně moderního osobního počítače s čipovou sadou rozdělenou na takzvaný North Bridge a South Bridge.
Schéma, a vlastně i celá architektura tohoto počítače, je uspořádáno takovým způsobem, že většinu činností, které počítač provádí, řídí centrální procesorová jednotka (mikroprocesor) na základě přerušení, které mu posílají jednotlivá zařízení (pevný disk vyvolá přerušení ve chvíli, kdy zapsal všechna předaná data, síťová karta vyvolá přerušení při příjmu rámce dat atd.). Pro architekturu osobních počítačů je typické použití interních sběrnic – první počítače IBM PC a posléze i PC XT a PC AT byly vybaveny pouze jedinou sběrnicí (ISA) a s příchodem počítačů vybavených sběrnicí PCI se začala používat dvousběrnicová architektura (původní pomalá sběrnice ISA byla řízena ze South Bridge spolu s ostatními „pomalými“ komunikačními cestami, některé funkce ISA jsou však dodnes v čipové sadě implementovány, přestože se na základní desce už žádný konektor pro zasunutí karet ISA nenachází). Sběrnice však představují, nezávisle na jejich bitové šířce a/nebo přenosové rychlosti, úzké hrdlo při přenosu dat mezi jednotlivými zařízeními, které se v počítači nachází. Z tohoto důvodu se u výkonných grafických stanic používala poněkud odlišná architektura, která toto úzké místo eliminovala.
Obrázek 2: Přídavná karta (konkrétně se jedná o zvukovou kartu AdLib Gold 1000) určená pro osmibitovou variantu sběrnice ISA, známé též pod označením PC-Bus. O řízení této karty i o přenosy dat se musel starat samotný mikroprocesor.
2. Alternativy ke sběrnicové topologii
Při návrhu výkonných grafických stanic SGI použili jejich konstruktéři architekturu odlišnou od počítačů PC. V grafických stanicích již není mikroprocesor centrálním prvkem počítače a zařízení se nepřipojují na společnou sběrnici. Namísto toho je jak mikroprocesor, tak i grafický akcelerátor, řadič disků, operační paměť či například síťové rozhraní představováno samostatným a na svém okolí do značné míry nezávislým výpočetním uzlem (vybaveným komunikačním rozhraním), který je k dalším zařízením připojen pomocí vhodně zvolené propojovací sítě se specificky navrženou topologií – může se jednat například o mřížku, torus, hyperkrychli atd. Toto řešení je sice po technické i finanční stránce poněkud náročnější (pro základní konfiguraci počítače, naopak se vzrůstajícím počtem uzlů může jít o řešení levnější), ale v mnoha dalších ohledech se ukazují jeho přednosti, především velká škálovatelnost, protože výkon jednotlivých zařízení není zpomalován ani centrální procesorovou jednotkou ani společnou sběrnicí.
Obrázek 3: Architektura moderní pracovní stanice rozšiřující „klasickou“ architekturu osobních počítačů, ve které se sice nachází trojice CPU (či výpočetních jader) s vyrovnávacími paměťmi první úrovně, ovšem jak operační paměť, tak i vyrovnávací paměti druhé úrovně jsou již pro všechny CPU společné, což tvůrce této architektury vedlo k nutnosti vytvoření velmi rychlých komunikačních kanálů mezi CPU, North Bridgem a operační pamětí. Netřeba dodávat, že škálovatelnost tohoto řešení je poměrně malá, řádově se jedná o jednotky CPU.
Díky tomu, že grafický akcelerátor je při použití výše zmíněné architektury postrádající centrální jednotku a jedinou (společnou) sběrnici, představován samostatně pracujícím uzlem, může si řídit většinu paměťových přenosových operací autonomně, bez přerušení běhu aplikací či operačního systému, což dále přispívá k velké rychlosti a především krátké době odezvy u grafických stanic, které tak sice mohou mít číselně méně výkonné procesory, ale ve skutečnosti je jejich pracovní výkon mnohem vyšší (výkon procesorů je vhodnější měřit ve FLOPSech a ne v MHz, i když ani porovnání FLOPS/MFLOPS/GFLOPS není vždy ta nejvhodnější metrika). Taktéž je možné grafický akcelerátor, který je na osobních počítačích (PC) představován jedinou kartou, rozdělit do několika uzlů (tj. samostatných zařízení) – texturovací jednotky, rasterizační jednotky, framebufferu atd. Pokud je i operační paměť umístěna ve více uzlech, může grafický akcelerátor načítat textury (resp. jednotlivé texely z textur) přímo z operační paměti bez zdržování procesoru, současně může rasterizační jednotka zapisovat data do framebufferu, procesor zpracovávat data posílaná pevným diskem atd.
Ukazuje se, že při datových přenosech mezi větším množstvím uzlů pomocí propojovací sítě, hraje rozhodující úlohu topologie této sítě a méně již její bitová šířka či rychlost, jak tomu bývá u společných sběrnic (ostatně postačuje si vzpomenout na všechny nevýhody sběrnicové topologie Ethernetu používajícího 10BASE2 (tj. řízení přístupu pomocí CSMA/CD), zejména při připojení většího množství počítačů, které síť aktivně využívaly). Z tohoto důvodu se u grafických stanic můžeme setkat s různými druhy použitých topologií propojovacích sítí, které mohou být buď pevně „zadrátované“ a neměnné (často se k tomuto účelu používá mřížka, krychle, hyperkrychle, torus, hypertorus atd., protože u těchto struktur lze zajistit jednoduché směrování dat), nebo se topologie naopak mohou v závislosti na potřebách běžících aplikací dynamicky měnit pomocí programovatelných přepínačů (to částečně odpovídá i architektuře Connection Machine, kde je rozdělení celého počítače do mnoha stovek až tisíců uzlů dovedeno do extrému).
Obrázek 4: Futuristický design slavného počítače Connection Machine 5.
3. Jednotka Stellar GS2000
U některých výkonnějších grafických stanic, například typu Power Iris od firmy Silicon Graphics Inc. (SGI, později známé pod jménem Silicon Graphics Interactive), jsou použity specializované grafické akcelerátory určené pro rychlý výpočet trojrozměrných scén popsaných pomocí hraniční reprezentace, tj. stejným způsobem jako scény vykreslované například již zmíněnými grafickými akcelerátory Voodoo 1 a Intel 740. Tyto akcelerátory (zejména některé jejich moduly, například jednotka pro výpočet geometrických transformací a jednotka pro aplikaci konvolučních filtrů a antialiasingu) však nemusí být použity pouze pro vykreslování obrázků, ale je možné pomocí nich urychlit i některé výpočty, které přímo s počítačovou grafikou nesouvisí (maticové a vektorové výpočty, zpracování signálů atd.). Tyto snahy se ostatně již objevily i u běžných grafických akcelerátorů pro počítače PC, které mohou být použity na některé specializovanější výpočty (viz další části tohoto seriálu).
Obrázek 5: Pracovní stanice Iris 3010.
Mezi jeden z nejzajímavějších typů grafických akcelerátorů pracovních stanic navržených firmou SGI patří i jednotka Stellar GS2000 spolu s jejím předchůdcem Stellar GS1000. Tyto grafické akcelerátory byly vytvořeny s ohledem na to, aby byl umožněn snadný přístup aplikací k jednotlivým výpočetním modulům, které jsou na grafickém akcelerátoru implementovány. V případě, že nějaká aplikace vykonává velké množství operací s maticemi a vektory, je tyto operace možné aplikovat ve vektorovém procesoru grafického akcelerátoru. Aplikace, která intenzivně pracuje s konvolučními filtry (typicky se jedná o zpracování či rozpoznávání obrazu, práce se zvukem apod.) může naopak využít post-processingovou jednotku. Na šestém obrázku je zobrazen blokový diagram grafického akcelerátoru Stellar GS2000. Jak je z obrázku patrné, je celý grafický akcelerátor rozdělen do několika bloků či výpočetních jednotek, které jsou mezi sebou propojeny pomocí sběrnic o poměrně značné bitové šířce. Popis jednotlivých bloků zobrazených na šestém obrázku najdete v následujících kapitolách.
Obrázek 6: Blokový diagram grafického akcelerátoru Stellar GS2000.
4. Multi-Stream Processor
Blok grafického akcelerátoru Stellar GS2000 nazvaný Multi-Stream Processor představuje výkonný procesor, který je navržen takovým způsobem, aby byl schopen provádět (vykonávat) tok instrukcí přicházejících až ze čtyř na sobě nezávislých zdrojů (někdy se můžeme setkat s označením display list pro programy – tok instrukcí, které tento procesor zpracovává, ovšem samotný termín display list je v počítačové grafice použit i na mnoha dalších místech pro označení mnohdy zcela odlišných technologií). Maximální výpočetní výkon zpracování každého instrukčního toku je roven 25 milionům instrukcí za sekundu. Instrukční toky sice mohou přicházet z různých procesů, to však není v praxi příliš obvyklé. V běžných případech se ovládá celý grafický akcelerátor pouze z jednoho běžícího procesu. Tento procesor může komunikovat s ostatními částmi grafického akcelerátoru pomocí sběrnice, jejíž datová šířka je rovna 512 bitům, což zaručuje, že se tato sběrnice nestane úzkým hrdlem celého systému.
Obrázek 7: Blok Multi-Stream Processor
5. Vector Floating-Point Processor
Druhým důležitým blokem tohoto grafického akcelerátoru je blok nazvaný Vector Floating-Point Processor. Tento blok provádí, jak již ostatně jeho název naznačuje, základní skalární a vektorové operace nad hodnotami, které jsou uloženy ve formátu pohyblivé řádové čárky (FP – Floating Point Format/Representation). Maximální výpočetní výkon tohoto procesoru dosahuje 40 milionů operací v pohyblivé řádové čárce za sekundu (40 MFLOPS), což je na dobu vzniku grafického akcelerátoru Stellar poměrně vysoká hodnota. Tento procesor je primárně určen pro provádění operací s barvami a zadávanými vrcholy polygonů spolu s jejich normálovými vektory. Všechny tyto údaje jsou v grafickém akcelerátoru reprezentovány jako čtveřice hodnot – vektory – barva: (r,g,b,a), vrchol polygonu: (x,y,z,w) atd. Nad vektory se provádí veškeré operace, zejména jejich normalizace (používáno především u normálových vektorů při výpočtu osvětlení i viditelnosti), lineární transformace (násobení vektoru transformační maticí), perspektivní projekce, skalární součin (výpočet osvětlení) atd.
Obrázek 8: Blok Floating-Point Processor
6. Rendering Processor
Třetím důležitým blokem (z hlediska renderingu se jedná o blok nejdůležitější, jehož funkce odpovídá funkcím prvních grafických akcelerátorů na PC) je blok nazvaný Rendering Processor, který provádí operace s jednotlivými polygony a vykreslovanými pixely. Pro tyto účely blok obsahuje 4×4 zpracovávající jednotky, jež pracují na principu SIMD (Single Instruction, Multiple Data, tj. jedna operace se provádí nad více objekty, například několika pixely současně). Rychlost vykreslování (renderingu) dosahuje cca 150 000 trojúhelníků za sekundu, přičemž tyto trojúhelníky mají pro účely měření výkonnosti plochu 100 pixelů, jsou vystínovány s využitím Gouraudova stínování a podrobeny testu na hloubku fragmentů (tj. pro každý fragment se před jeho zápisem do framebufferu zjistí, jaký údaj je uložený v paměti hloubky – Z-bufferu – a na základě tohoto testu dojde či nedojde k provedení zápisu).
Pokud přepočítáme rychlost vykreslování trojúhelníků na počet fragmentů zapsaných a přečtených z framebufferu, dojdeme k hodnotě cca 15–30 milionů fragmentů za sekundu. V případě, že se namísto Gouraudova stínování použije výpočetně složitější Phongovo stínování, klesá rychlost vykreslování na „pouhých“ 30 000 trojúhelníků za sekundu (plocha trojúhelníků je opět rovna cca 100 pixelům). Pozor při porovnávání výkonnosti s grafickými akcelerátory na PC, tam se mnohdy používají jiné – zpravidla jednodušší – podmínky, například se při renderingu vypne test na hloubku fragmentů, namísto Gouraudova stínování se povolí rychlejší konstantní stínování atd. (syntetické testy, používané například při porovnávání výkonnosti grafických akcelerátorů v herních časopisech, dávají mnohem věrohodnější výsledky, ty však není možné zpětně aplikovat na popisovaný akcelerátor Stellar GS2000).
Obrázek 9: Blok Rendering Processor
7. Struktura paměti využívané grafickým akcelerátorem Stellar GS2000
Grafický akcelerátor Stellar GS2000 využívá celkem tři paměťové oblasti. První z nich je rychlá vyrovnávací paměť (cache) o kapacitě 1MB, zvýrazněná na obrázku číslo 10 červenou barvou. Druhou oblastí je hlavní paměť (main memory) o konfigurovatelné kapacitě (zelené zvýraznění). V této paměti jsou uloženy zejména informace o geometrii vykreslovaných objektů (souřadnice jednotlivých vrcholů, normálové vektory polygonů či zprůměrované normálové vektory ve vrcholech) a data pro textury. Další oblastí paměti je celý framebuffer (modrá barva), který sdílí stejné paměťové moduly jako hlavní paměť. Struktura framebufferu je podobná struktuře popsané u grafických akcelerátorů Voodoo 1 či Intel 740 – celý framebuffer se v typické konfiguraci skládá z předního barvového bufferu, zadního barvového bufferu a paměti hloubky (Z-bufferu). Z framebufferu se při generování video signálu pro monitor čtou informace o barvách fragmentů z předního barvového bufferu (do zadního bufferu se současně vykresluje další snímek) do řadiče videa a odtud jsou přenášeny na připojený monitor.
Obrázek 10: Paměťové bloky využívané grafickým akcelerátorem Stellar GS2000.
Všechny výše popsané procesory jsou s paměťovými oblastmi spojeny pomocí komunikační struktury o datové šířce 512 bitů (výjimku zde představuje pouze vektorový procesor, u nějž je datová šířka zmenšena na 384 bitů, to je však způsobeno jinou bitovou šířkou použitých dat). Tato struktura byla firmou SGI nazvána DataPath a tvoří jádro celého grafického akcelerátoru. V této struktuře je možné ukládat celočíselné, reálné a vektorové hodnoty do sady registrů, které lze namapovat na jednotlivé procesory, popř. je mezi jednotlivými procesory sdílet (jedná se o obdobu mailboxů).
8. Obsah následující části seriálu
V následující části tohoto seriálu si popíšeme další technologie navržené firmou SGI, které se teprve postupně začínají objevovat i na platformě x86. Jedná se zejména o (patentovanou) architekturu NUMA (Non-Uniform Memory Access), která zajišťuje souběžnou práci velkého množství procesorů aniž by docházelo k velkému množství kolizí při přístupu těchto procesorů do operační paměti. Právě nutnost souběžného přístupu do operační paměti a tím způsobené kolize (procesory na sebe musí čekat) poměrně výrazným způsobem omezuje počet procesorů (či procesorových jader) při použití symetrického multiprocessingu – SMP.
Obrázek 11: Výrobky firmy Silicon Graphics po dlouhou dobu udávaly směr vývoje profesionální počítačové grafiky.
9. Odkazy na Internetu
- Northbridge (computing)
http://en.wikipedia.org/wiki/Northbridge_(computing) - Southbridge (computing)
http://en.wikipedia.org/wiki/Southbridge_(computing) - Carrier sense multiple access with collision detection
http://en.wikipedia.org/wiki/Carrier_sense_multiple_access_with_collision_detection - Intel i740
http://en.wikipedia.org/wiki/Intel740 - Intel i740 Datasheet
ftp://download.intel.com/support/graphics/intel740/29061902.pdf - Intel740™ Graphics Accelerator P854 Hardware
ftp://download.intel.com/support/graphics/intel740/29062202.pdf - S3 Savage
http://en.wikipedia.org/wiki/S3_Savage - Savage (S3)
http://www.economy-point.org/s/savage-s3.html - 3dfx Interactive
http://en.wikipedia.org/wiki/3dfx_Voodoo_Graphics - Intel 860@cpu-collection
http://www.cpu-collection.de/?l0=co&l1=Intel&l2=i860 - S3 Graphics
http://www.s3graphics.com/en/index.aspx - TSENG ET6000 Performance Page
http://dani75.tripod.com/TSENG.htm - Tseng Labs Ships ET6000 Advanced Graphics Chip, Announces Additional Manufacturing Sources
http://www.encyclopedia.com/doc/1G1-18088868.html - CyberMax chooses Tseng Labs' ET6000 Graphics and Video Controller for Max and ProMax Series PCs
http://findarticles.com/p/articles/mi_m0EIN/is_1996_Oct_9/ai_18754932/ - Intel i860
http://en.wikipedia.org/wiki/Intel_860 - Intel i860 64-Bit Microprocessor
http://www.microprocessor.sscc.ru/i860.html - 25 Microchips That Shook the World
http://www.synbio.org.uk/scientific-computing-news/1351.html - Sprite (computer graphics)
http://en.wikipedia.org/wiki/Sprite_(computer_graphics) - Sprite (počítačová grafika)
http://cs.wikipedia.org/wiki/Sprite_(počítačová_grafika) - Wikipedia: Video Display Controller
http://en.wikipedia.org/wiki/Video_Display_Controller - 3dfx Voodoo1 PCI
http://www.v3info.de/english/html/v1.shtml - Glide 2.2 Programming Guide
http://www.gamers.org/dEngine/xf3D/glide/glidepgm.htm - Glide API
http://en.wikipedia.org/wiki/Glide_API