Obsah
1. Výkonné grafické subsystémy na pracovních stanicích
2. Jednotka Stellar GS2000
3. Výkonné bloky jednotky Stellar GS2000
4. Paměťové oblasti používané na Stellar GS2000
5. Architektura NUMA a servery Origin 200/2000
6. Topologie sítě u serverů Origin 200/2000
7. Obsah dalšího pokračování tohoto seriálu
1. Výkonné grafické subsystémy na pracovních stanicích
U výkonných pracovních stanic se řeší (resp. v některých dále popisovaných případech spíše řešila) problematika rychlého vykreslování trojrozměrných scén poněkud odlišným způsobem než u běžných osobních počítačů řady IBM PC. Zatímco u osobních počítačů jsou grafické akcelerátory pouze jedněmi z mnoha zařízení připojených na sběrnici PCI či port AGP a jsou kompletně ovládány centrální procesorovou jednotkou počítače (samozřejmě kromě bus-master přenosu), u grafických stanic je použita poněkud odlišná filozofie: grafický akcelerátor je, podobně jako centrální procesorová jednotka a například i řadič disků a operačních pamětí, samostatný a na svém okolí do značné míry nezávislý výpočetní uzel, který je k dalším zařízením připojen pomocí vhodně naprojektované propojovací sítě se specificky navrženou topologií.
Toto řešení je výhodné zejména díky velké škálovatelnosti, protože výkon jednotlivých zařízení není zpomalován ani centrální procesorovou jednotkou (CPU), ani společnou sběrnicí, která je u počítačů řady IBM PC snad již napořád úzkým hrdlem celého systému (viz postupný vývoj sběrnic na PC). Díky faktu, že grafický akcelerátor je samostatná jednotka, 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).
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 sítě a menší již její bitová šířka či rychlost, jak tomu bývá u společných sběrnic. Proto se u grafických stanic setkáváme s různými druhy použitých topologií propojovacích sítí, které mohou být buď pevně zadané a neměnné (často se k tomuto účelu používá mřížka, krychle, hyperkrychle, torus, hypertorus atd.), 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).
V dalších kapitolách si popíšeme zajímavá řešení grafických akcelerátorů, která byla či jsou na současných grafických stanicích použita.
2. 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, dnes 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. 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 nesouvisejí. Tyto snahy se ostatně objevují i u běžných grafických akcelerátorů pro počítače PC, které mohou být už dnes použity na některé specializovanější výpočty.
Jedním z typů grafických akcelerátorů pracovních stanic od SGI je i jednotka Stellar GS2000 spolu se svým předchůdcem Stellar GS1000. Tyto grafické akcelerátory byly vytvořeny tak, aby byl umožněn přístup aplikací k jednotlivým výpočetním modulům, které jsou na grafickém akcelerátoru implementovány.
Pokud tedy 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 rozpoznávání obrazu, práce se zvukem apod.), může naopak využít post-processingovou jednotku.
Na následující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. Následuje popis jednotlivých bloků zobrazených na prvním obrázku.
Obrázek 1: Blokový diagram grafického akcelerátoru Stellar GS2000
3. Výkonné bloky jednotky Stellar GS2000
Blok Multi-Stream Processor představuje výkonný procesor, který může provádět (vykonávat) instrukce přicházející ze čtyřech nezávislých instrukčních toků. 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.
Blok Vector Floating-Point Processor provádí základní skalární a vektorové operace nad hodnotami, které jsou uloženy v reprezentaci s pohyblivou řádovou čárkou. Maximální výpočetní výkon tohoto procesoru dosahuje 40 milionů operací v pohyblivé řádové čárce za sekundu (40 MFLOPS). Tento procesor je primárně určen pro provádění operací s barvami a zadávanými vrcholy spolu s jejich normálami. Všechny tyto údaje jsou v grafickém akcelerátoru reprezentovány jako čtveřice hodnot (vektory), s nimiž se provádí veškeré operace, zejména normalizace, transformace (násobení vektoru maticí) a perspektivní projekce (zde můžeme vidět souvislost s minule popsaným programovacím jazykem Cg).
Rendering Processor provádí operace s jednotlivými polygony a vykreslovanými pixely. Pro tyto účely obsahuje 4×4 zpracovávající jednotky, které pracují na principu SIMD (Single Instruction, Multiple Data, tj. jedna operace se provádí nad více objekty, například pixely). Rychlost vykreslování tohoto grafického akcelerátoru dosahuje 150 000 trojúhelníků za sekundu, přičemž tyto trojúhelníky mají pro účely měření plochu cca 100 pixelů, jsou vystínovány Gouraudovým stínováním a podrobeny testu na hloubky fragmentů (pozor na porovnání s grafickými akcelerátory na PC, tam se používají jiné, jednodušší podmínky). V případě, že se mí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.
4. Paměťové oblasti používané na Stellar GS2000
Tento grafický akcelerátor využívá celkem tři paměťové oblasti. První z nich je rychlá cache paměť o kapacitě 1 MB. Druhou oblastí je hlavní paměť (main memory) o proměnné kapacitě. V této paměti jsou uložena zejména geometrická data (vrcholy, normály plošek, normály vrcholů) a data pro textury. Další oblastí paměti je celý framebuffer (framebuffer přitom sdílí stejné paměťové moduly jako hlavní paměť). Z framebufferu se čtou informace o barvách z předního barvového bufferu do řadiče videa a jsou odtud zobrazovány na připojený monitor.
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 je nazývá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.
Výše popsaná architektura grafického akcelerátoru je i pro budoucnost zajímavá především použitou bitovou šířkou datových toků a propojovací strukturou DataPath, pomocí níž lze celý datový tok programově řídit.
5. Architektura NUMA a servery Origin 200/2000
Výše uvedená firma Silicon Graphics Inc. (SGI) je i předním výrobcem výpočetních systémů postavených na architektuře NUMA. Název této architektury pochází z celého označení Non-Uniform Memory Access, které naznačuje, jakým způsobem je provedeno vzájemné uspořádání procesorů a operační paměti.
Architektura NUMA byla vytvořena za účelem propojení velkého množství procesorů, které mezi sebou musí určitým způsobem sdílet data. Při malém množství procesorů je možné použít takzvaný symetrický multiprocessing – SMP, kdy existuje pouze jedna hlavní paměť a procesory na tuto paměť přistupují přes vhodnou propojovací strukturu, která obsahuje i arbitr. (Na bázi SMP jsou vystavěny i víceprocesorové osobní počítače a jednodušší servery. Vždy se však jedná o propojení dvojic, maximálně čtveřic procesorů.) Blokové schéma architektury SMP je naznačeno na dalším obrázku.
Obrázek 2: Blokové schéma architektury SMP
Architektura SMP je poměrně jednoduchá, proto je také snadná její implementace. Potíže však nastávají při připojení více procesorů. Už při čtyřech současně běžících procesorech se ukazuje, že propojovací struktura se stává úzkým hrdlem této architektury, protože i přes mnohdy velikou kapacitu pamětí cache nastávají kolize při přístupu do hlavní paměti, kdy na sebe jednotlivé procesory musí čekat (blíže viz Amdahlův zákon).
Tuto vážnou nevýhodu odstraňuje architektura NUMA, která zavádí místo jednoduché lineární propojovací struktury složitější topologie, jako jsou mřížka, krychle, hyperkrychle, torus nebo hypertorus. V uzlech této topologické sítě se nacházejí jednotlivé procesory, operační paměť (je zde použito obecnější schéma DSM – Distributed Shared Memory – distribuovaná sdílená paměť, takže operační paměť je rozdělena mezi jednotlivé uzly) a další zařízení, mimo jiné i grafický akcelerátor či grafické akcelerátory. Ty jsou z tohoto hlediska zcela rovnocenné procesorům, na rozdíl od architektury PC.
U serverů Origin 200/2000 je použita mírná modifikace uzlů, ve kterých je místo jednoho procesoru zapojena vždy dvojice procesorů. Ke každému procesoru přináleží i několik cache pamětí – instrukční cache paměť (na třetím obrázku je označena symbolem I-c), datová cache paměť (na obrázku je označena symbolem D-c) a část sdílené paměti (označena symbolem S-cache). Blokové schéma jednoho uzlu použitého u serverů Origin je zobrazeno na následujícím obrázku.
Obrázek 3: Jeden uzel serveru Origin 200/2000
6. Topologie sítě u serverů Origin 200/2000
U serverů Origin 200/2000 se pro propojování jednotlivých uzlů používá topologie sítě založená na hyperkrychli (hypercube). Hyperkrychle vzniká zobecněním plošného čtverce či prostorové krychle do obecně libovolného počtu dimenzí. Ve vrcholu plošného čtverce se stýkají dvě hrany, ve vrcholu třírozměrné krychle tři hrany, ve vrcholu hyperkrychle ve čtyřech dimenzích čtyři hrany atd. Podle počtu uzlů je vhodně zvolena dimenze hyperkrychle (1–7), která se v běžných případech pohybuje od dvou do 128 uzlů. Tento počet sice nepředstavuje teoretické maximum, ale s dalším přidáváním uzlů se poměrně značným způsobem zvyšuje počet hran, které se stýkají v jednom vrcholu hyperkrychle, čímž se také prodlužuje doba předávání dat mezi jednotlivými uzly (složité routování dat).
Na dalším obrázku je ukázána propojovací topologie hyperkrychle pro několik základních konfigurací serverů Origin 200/2000. Každý uzel na obrázku přitom obsahuje dva procesory se svými cache paměťmi.
Velkou výhodou použité propojovací topologie a návrhu uzlů u serverů Origin je vysoká škálovatelnost, která umožňuje efektivní použití až několika set procesorů. Tyto procesory se mohou využít například pro vykreslování trojrozměrných scén metodou raytracingu, neboť tato metoda je takřka ideálně paralelizovatelná (samozřejmě až na rostoucí paměťovou složitost). Další často používanou možností je připojení několika grafických akcelerátorů pro urychlení vykreslování trojrozměrné grafiky v hraniční reprezentaci.
Obrázek 4: Propojovací topologie hyperkrychle použité u serverů Origin 200/2000
7. Obsah dalšího pokračování tohoto seriálu
I v dalším pokračování tohoto seriálu se budeme zabývat hi-end počítačovou grafikou. Popíšeme si totiž zajímavou architekturu Onyx2 – Infinite Reality.