Grafické karty a grafické akcelerátory (20)

20. 7. 2005
Doba čtení: 10 minut

Sdílet

V dnešním pokračování seriálu o grafických kartách a grafických akcelerátorech si popíšeme funkce programovatelných 3D grafických akcelerátorů a grafických akcelerátorů určených pro komprimaci a dekomprimaci videa.

Obsah

1. Akcelerační karty určené pro komprimaci a dekomprimaci videa
2. Programovatelné grafické akcelerátory
3. Funkce programovatelných grafických akcelerátorů
4. Význam a funkce bloků programovatelného grafického akcelerátoru
5. Obsah dalšího pokračování tohoto seriálu

1. Akcelerační karty určené pro komprimaci a dekomprimaci videa

Ke grafickým akcelerátorům můžeme přiřadit i specializované číslicové obvody, které jsou určené pro komprimaci a dekomprimaci videa. Tyto obvody jsou buď součástí profesionálních akceleračních karet určených pro práci s videem, nebo jsou integrovány přímo na GPU grafických karet. V minulosti byla využívána především první možnost (jedná se například o výrobky firmy Optivision), v současné době se však díky vyšší integraci číslicových obvodů využívá zejména možnost druhá. Typickým příkladem grafických karet, které podporují (samozřejmě mimo dalších funkcí) i práci s videem, jsou grafické karty ATI All In Wonder.

Obecně lze říci, že karty pro práci s videem pracují s video daty komprimovanými většinou podle normy MPEG1MPEG4. Jednodušší karty však tyto formáty nepodporují, protože pracují s jinými – převážně jednoduššími – metodami komprimace video záznamu, například se sérií statických obrázků ve formátu JFIF. Výsledkem komprimace je formát nazývaný M-JPEG (Motion JPEG).

Mezi dva důvody, které vedou k použití specializovaného čipu pro zpracování videa, patří především:

  1. Datový tok nekomprimovaných video dat je tak velký, že v případě zpracování videa v reálném čase (nebo i zobrazování videa) s pomocí mikroprocesoru počítače by nebylo vůbec možné či efektivní přenášet tato data po sběrnicích. Proto se používají obvody, které dokáží provést komprimaci a dekomprimaci video dat v reálném čase. Po sběrnici se poté přenášejí pouze zkomprimovaná video data, která mají mnohem menší velikost než data nekomprimovaná.
  2. Dekomprimace a zejména komprimace video dat je náročná na výpočetní výkon, proto i dnešní mikroprocesory neumožňují komprimovat video v reálném čase, tj. v době přijetí video dat například z kamery. Především vysoké rozlišení obrazu (HDTV) a pokročilé metody komprimace (MPEG4) jsou výpočetně značně náročné. Z tohoto důvodu se opět používají specializované čipy, které komprimaci a dekomprimaci video dat poskytují v reálném čase.

Akcelerační karty pro práci s videem rozdělujeme podle jejich vlastností do několika skupin:

  1. Do první skupiny patří specializované karty, které jsou určeny pouze pro vlastní komprimaci či dekomprimaci videa. Data jsou do těchto karet přenášena po interní sběrnici počítače. Alternativně mohou být tyto karty spojeny s grafickou kartou pomocí takzvaného Feature konektoru, přes který je možné slučovat video signál s běžnou počítačovou grafikou zobrazovanou pomocí grafické karty. Slučování se provádí pomocí klíčové barvy (Key Color), jejíž přítomnost v rastrovém obrazu specifikuje pixely, které se mohou překreslit, tj. smíchat s video signálem. Za klíčovou barvu je obvykle volena sytě fialová, která se v běžných obrázcích nevyskytuje.
  2. Do druhé skupiny patří specializované karty, které jsou vybaveny obvody pro vstup videa z externích zdrojů, popř. i pro výstup videa. Pokud je jedním z podporovaných vstupů i vstup z televizní antény, hovoříme o televizních kartách. Tyto karty jsou již komplikovanější, protože obsahují veškerou elektroniku potřebnou pro kódování a dekódování video signálu (tj. A/D a D/A převodníky, předzesilovače, tunery, obvody pro zpracování zvuku apod.). Novější karty z této skupiny většinou podporují i vstup a výstup dat přes digitální rozhraní IEEE 1394 (FireWire).
  3. Do třetí skupiny patří grafické karty, které umožňují jak zobrazování běžné počítačové grafiky, tak i práci s videem. Tyto karty buď obsahují více specializovaných čipů (jeden pro grafiku, druhý pro video), nebo mají instalován jeden čip, který obsahuje obvody pro obě tyto oblasti. Vývojem kombinovaných grafických karet pro práci s videem i trojrozměrnou grafikou, se zabývá především firma ATI se svými grafickými akcelerátory ATI All In Wonder a ATI Rage Pro. Některé verze těchto karet obsahují i televizní tuner a umožňují dokonce beze ztráty grafického výkonu klíčovat televizní signál spolu s běžnou grafikou. Podporu pro dekódování videa ve formátu MPEG 2 mají i některé grafické čipy firmy S3. Na následujícím obrázku je zobrazeno schéma grafické karty z této skupiny založené na čipu Trio64V+ (V+ v označení tohoto čipu znamená Video).
GFX 20a

Schéma grafické karty s podporou přehrávání videa osazené čipem S3 Trio64V+

V souvislosti s tématem tohoto článku je pro nás zajímavý zejména způsob současného zobrazení videa s běžnou počítačovou grafikou, tj. s grafikou vykreslovanou v rámci grafického uživatelského rozhraní (GUI) operačním systémem a běžícími programy. Tohoto současného zobrazení je dosaženo mícháním signálů ze zdroje videa a z grafického čipu. Funkce míchání je většinou ovlivněna klíčovou barvou, kterou je v grafickém uživatelském rozhraní vyplněna oblast, jež má být překreslena videem. Z toho vyplývá, že oblast nemusí být nutně obdélníková, čehož lze využít například při zobrazování titulků.

Podmínkou pro úspěšné míchání jsou shodné průběhy synchronizačních signálů, tj. signálů pro zatemnění paprsku po vykreslení každého řádku (scanline) a po vykreslení celého snímku (frame).

2. Programovatelné grafické akcelerátory

V předchozím textu byl stručně popsán postupný vývoj grafických akcelerátorů od těch nejjednodušších, které podporovaly pouze práci s plošnými rastrovými či vektorovými obrazci, až po grafické akcelerátory vhodné pro vykreslování trojrozměrné grafiky a komprimaci i dekomprimaci vi­dea.

Všechny popsané typy grafických akcelerátorů byly sice co do rozsahu i typu poskytovaných funkcí značně rozdílné, měly však jednu společnou vlastnost: ke komunikaci s nimi sloužila určitá programátorská rozhraní (API) poskytující neměnnou sadu funkcí, kterou bylo možné programově využít. Nebylo však možné funkčnost grafických akcelerátorů libovolně programově měnit či rozšiřovat jejich schopnosti.

S postupujícím vývojem grafických akcelerátorů se začala kromě jejich hrubého výpočetního výkonu zvyšovat i jejich flexibilita, která se projevila zejména možností programování grafického zobrazovacího řetězce. Již první grafické akcelerátory se zabudovanými grafickými procesory (GPU – Graphics Processing Unit) obsahovaly podporu pro programování, i když tato podpora byla velmi omezená jak repertoárem poskytovaných operací, tak maximálního počtu instrukcí, které bylo možné pro aplikaci grafických operací využít.

První generace programovatelných grafických procesorů obsahovala operace pro úpravu vykreslovaných pixelů popř. texelů načítaných z textury. Mezi tento typ grafických akcelerátorů patří čipy nVidia GeForce 1 a nVidia GeForce 2, které obsahovaly takzvané register-combiners, pomocí nichž bylo možné naprogramovat jednodušší rastrové operace prováděné se zapisovanými fragmenty.

V dalším textu budou popsány moderní programovatelné grafické akcelerátory, které již nabízí mnohem větší flexibilitu programování. Pokud se v textu zmiňuji o moderních grafických akcelerátorech, myslím tím právě tuto kategorii grafických čipů. Možnosti vektorových i rastrových bloků grafických procesorů byly rozšířeny k plné programovatelnosti pomocí programů, které lze do konkrétního grafického procesoru nahrávat i za běhu aplikace. Podle typu zpracovávaných dat je možné rozlišit dvě programovatelné jednotky grafických karet: vertexový procesor (vertex shader) a rasterizační procesor (pixel shader, fragment shader).

3. Funkce programovatelných grafických akcelerátorů

Funkce moderního grafického akcelerátoru, který je programovatelný, je možné rozdělit na dvě již zmiňované části. První část tvoří jednotka, která se zabývá transformací geometrických (vektorových) souřadnic. Druhou část tvoří jednotka provádějící rasterizaci, tedy vlastní vykreslování fragmentů.

Každá část může pracovat ve dvou režimech: v režimu programovatelném, kdy se grafický procesor ovládá pomocí externě nahraného programu, nebo v režimu pevném, který je předem nastavený výrobcem grafického akcelerátoru. Pevný režim pracuje podle nastavení programátorského rozhraní (API), které je k ovládání grafického akcelerátoru použito – v dnešní době se jedná především o rozhraní specifikované v grafických knihovnách OpenGL a DirectX.

Obě varianty práce s grafickým akcelerátorem se v současnosti v rámci jedné aplikace kombinují, a tak vhodně doplňují. V některých případech není zapotřebí využívat programovatelných možností, stačí nám „pouze“ prostředky poskytované programátorským rozhraním grafického akcelerátoru.

Tento dvojí přístup při práci s grafickým akcelerátorem však může přinášet nežádoucí komplikace, které se týkají zejména způsob přepínání kontextu mezi pevným a programovatelným režimem. Proto bude nejspíše tento přístup v budoucnu opuštěn, zejména u profesionálních aplikací. Jedním z důvodů je také možnost naprogramování základních transformací a rasterizací úsporněji a rychleji, než kdyby se tyto operace prováděly pomocí standardního vykreslovacího řetězce.

Některé grafické akcelerátory (například čipy ATI Radeon 8500) podporují dva módy činnosti. Část grafického čipu je určena pro práci v nenaprogramo­vatelném módu, zatímco další část pracuje v programovatelném módu. U novější generace akcelerátorů s čipy ATI Radeon je podporován pouze programovatelný režim činnosti a standardní transformační a rasterizační operace jsou interně převedeny na program pro vertex či pixel shader.

Na dalším obrázku je zobrazeno blokové schéma moderního grafického akcelerátoru s naznačením datových toků a rozložením dat ve video paměti, tj. paměti umístěné přímo na grafickém akcelerátoru.

GFX 20b

Blokové schéma programovatelného grafického akcelerátoru

Význam a funkce jednotlivých výrazů a zkratek použitých při popisu bloků na obrázku jsou uvedeny v další kapitole.

bitcoin_skoleni

4. Význam a funkce bloků programovatelného grafického akcelerátoru

  1. CPU – centrální řídicí jednotka počítače (procesor, mikroprocesor), ve kterém je programovatelný grafický akcelerátor využíván. CPU řídí veškerou komunikaci mezi systémovou pamětí (operační pamětí) a grafickým akcelerátorem. Vlastní přenos dat je většinou založen na DMA (DMA – Direct Memory Access, přímý přístup řadiče či zařízení do paměti bez zásahů CPU) a u dnešních počítačů typu PC probíhá buď přes sběrnici PCI, port AGP, nebo PCI Express.
  2. System memory – systémová paměť. Tato paměť představuje primární zdroj všech dat (jak geometrie těles a světel, tak i rastrových dat pro textury) před přenesením do grafického akcelerátoru. Grafické akcelerátory používané na počítačích typu PC nemají možnost načítání potřebných dat z jiných zdrojů, například pevných disků. Tento poměrně závažný nedostatek je zapříčiněn dnes již překonanou sběrnicovou architekturou počítačů PC.
  3. Video memory – paměť, která je umístěna na grafickém akcelerátoru a slouží k několika účelům: uložení geometrických dat těles a světel, uložení příkazů pro grafický procesor, uložení rastrových dat textur a konečně jako framebuffer, tj. paměť pro ukládání fragmentů.
  4. Geometry – v tomto bloku video paměti jsou uložena geometrická data těles obsažených ve vykreslované scéně nebo těles uložených v display-listech. Tato část video paměti se proto také nazývá vertex-buffer. Z tohoto bloku se při vykreslování posílají geometrické informace do grafického čipu, kde jsou dále transformovány a rasterizovány.
  5. Commands – v tomto bloku video paměti jsou uloženy programy pro vertex shader a pixel shader. Programů zde může být uloženo více a grafický procesor se mezi nimi může při vykreslování různých grafických efektů přepínat. Délka jednotlivých programů je omezena architekturou grafického procesoru. V současné době je možné pracovat s programy, které mají délku řádově desítky až stovky instrukcí.
  6. Textures – část video paměti, která slouží k uložení rastrových textur použitých ve scéně. Pokud je kapacita video paměti pro uložení textur nedostatečná, je možné textury při vykreslování postupně přenášet z operační paměti počítače, ovšem za cenu velké degradace rychlosti vykreslování.
  7. Framebuffer – do této oblasti video paměti ukládá grafický procesor jednotlivé vykreslované fragmenty. Část této paměti, která se nazývá barvový buffer (color buffer), může být vykreslena na obrazovku. Další části (například depth buffer či stencil buffer) nejsou pro uživatele přímo viditelné, ale slouží k realizaci různých grafických algoritmů.
  8. Vertex Shading – blok, ve kterém se pomocí vertex shaderu provádí transformace geometrických dat (mezi geometrická data patří pozice vrcholů v prostoru, normály plošek, pozice i orientace světel a souřadnice v textuře) podle zadaného programu. Standardní program provádí pohledovou transformaci, perspektivní projekci a následnou transformaci do obrazovkových souřadnic. Pro souřadnice do textury je použita samostatná jednotka pro provádění transformací.
  9. Pre T&L Cache – oblast paměti umístěné na grafickém procesoru, do níž se ukládají často používané geometrické informace, které vstupují do vertex shaderu. Tato paměť může pojmout řádově desítky údajů o zpracovávaných vrcholech. Organizace této paměti a způsob jejího využití je obdobný cache pamětem používaným u obecných mikroprocesorů.
  10. Post T&L Cache – oblast paměti na grafickém procesoru, do které se ukládají geometrické informace již zpracované vertex shaderem, tj. po aplikaci naprogramovaných transformací. Pokud přijde požadavek na transformaci již zpracovaných informací, výpočet transformací již znovu neprobíhá, ale načte se právě z této paměti.
  11. Texture Cache – paměť, ve které jsou uloženy často používané textury či jejich části. Hlavním úkolem této paměti je co nejvíce eliminovat poměrně zdlouhavé čtení rastrových dat z video paměti.
  12. Triangle setup – pokud vykreslovaná oblast nemá tvar trojúhelníku (například vlivem ořezání tělesem záběru či ořezávacími rovinami), musí se provést tesselace, tj. opětovné rozložení složitějšího polygonu na trojúhelníky. Tesselace je prováděná právě v tomto modulu, na jehož výstup jsou posílány vždy nedegenerované trojúhelníky.
  13. Rasterization – rasterizační procesor. Na vstupu tohoto procesoru jsou transformovaná geometrická data posílaná modulem Triangle setup, na výstupu fragmenty reprezentující vykreslovaný trojúhelník.
  14. Fragment shading and Raster Operations – modul provádějící obarvení fragmentů. Vstupem jsou fragmenty reprezentující vykreslovaný trojúhelník a rastrová data textury, výstupem je obraz pokrytý texturou, který je posléze uložen do framebufferu. Při některých operacích (například blendingu či testu hloubky fragmentů) se z framebufferu jednotlivé fragmenty také mohou číst, tj. datový tok mezi popisovaným modulem a framebufferem je oboustranný.

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

V dalším pokračování tohoto seriálu budou podrobně popsány vertex a pixel shadery spolu s operacemi, které je možné pomocí nich provádět.

Autor článku

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