Gainward
Grafická pipeline III: Grafická karta
Další díl minisérie o grafické pipeline je věnován grafickým kartám. Dnes si ukážeme, co všechno se musí udát, aby grafická karta vyrenderovala jeden snímek počítačové hry. No a také se podívámen na to, k čemu jednotlivé hardwarové jednotky GPU vůbec jsou a k čemu slouží.
gpureport.cz  Pavel Šantrůček  12.07.2016

OBSAH:
1. Úvod          
4. Pipeline a grafická karta          
2. Pipeline - Geometrie          
5. Závěr (kam se podíváme příště)          
3. Pipeline - Resterizace          
 

Pipeline a grafická karta

Pojďme se nyní podívat, jak je grafická pipeline realizována přímo na grafické kartě. Vše se pokusím popsat na grafické kartě Radeon R9 290X společnosti AMD.

Frontend grafického čipu

Již víme, že moderní 3D API jako je DirectX 12 odesílá na grafickou kartu příkazy (úlohy) za pomocí několika příkazových front (Queue). Pomocí Graphics (Direct) Queue jsou zasílány úlohy grafické, pomocí Compute Queue úlohy výpočetní a fronta Copy Queue je pak určena pro operace kopírovací. Pro nás je důležité to, že pomocí těchto vícero front jsou příkazy na grafickou kartu zasílány paralelně a GPU by je tedy také paralelně mohlo zpracovávat. K tomu je ale potřeba, aby se o každou takovou frontu na straně GPU postaral také jeden samostatný a nezávislý engine. Microsoft toto řešení v DirectX 12 nazývá Multi-engine a v případě architektury GCN je vše realizováno následovně.

 

DirectX Multi-engine

 

O Graphics (Direct) Queue se stará engine s názvem GCP (Graphics Command Processor), o výpočetní fronty, kterých může být až 8, se starají ACE (Asynchronous Compute Engines) a nakonec o Copy Queue se stará DMA Engine. Každý engine pak pracuje autonomně, přijímá příkazy z přidružené příkazové fronty, plánuje a odesílá příkazy k exekuci na patřičných jednotkách grafické karty.

V případě předchůdců DirectX 12 jsou pak veškeré úlohy na GPU zasílány sériově pomocí jediné Graphics Queue, kterou má na starosti opět GCP.

Shader Engine

Půjdeme-li blokovým diagramem R9 290X trochu níže, můžeme zde vidět umístěné čtyři bloky s názvem Shader Engine (SE).

 

Shader Engine

 

Pokud se na obrázek SE podíváte trochu pečlivěji, jistě vám neujde, že se vlastně jedná o grafickou pipeline, kterou jsme si popsali v dnešním článku. Nepředbíhejme ale a pojďme se na Shader Engine podívat trochu z blízka.

Geometry Procesor

Na obrázku je Geometry Processor zobrazen jako jediná jednotka, ale věřte, že v sobě skrývá jednotek daleko více. Jsou zde umístěny především jednotky Input Assembleru a Testátoru, tedy naše dobře známé fixní jednotky z předchozích kapitol.

Compute Unit (CU)

Compute Units jsou vlastní výpočetní jednotky grafické karty, na kterých jsou spouštěny všechny druhy shaderů. Ať už se jedná o Vertex Shader, Geometry Shader, Pixel Shader nebo nějaké další výpočetní shadery, jejich exekuce je vždy svěřena právě jednotkám CU.

 

Compute Unit

 

V případě GCN každý Compute Unit obsahuje celkem 64 ALU (4x 16 SIMD) a jejich součástí jsou také čtyři Texture Mapping Units (TMU). Jednotky TMU jsou speciálními jednotkami zaměřené na práci s texturou (a 2D obrázky obecně), pracují ruku v ruce se shadery, kterým pro jejich potřeby dodávají ty správné hodnoty texelů (pixelů na textuře).

Render Backend (RB)

Jistě jste již někdy slyšeli o takzvaných ROPs (Raster Operator Units) jednotkách. Tyto jednotky mají na starosti (krom jiného) také operace, které jsme si dnes popsali v zastávce pipeline s názvem Output Merger. Zde se tedy provádí ono porovnání hloubky pixelu proti Z-bufferu (Depth/Stencil test) a tyto jednotky mají na starost také finální ukládání barev pixelů do Render Target (nejčastěji Back buffer). Každá ROP jednotka je schopna zapsat do Render Target barvu jednoho pixelu v jednom taktu frekvence GPU. RBE, jako AMD specifikum, může obstarat až 4 pixely za takt, nicméně těchto jednotek je zase 4x méně. Můžeme tedy s klidem říci, že 1x RBE je svým výkonem rovno 4x ROPs. Obsahuje-li například Shader Engine 4x RBE, pak výkon těchto jednotek je rovný 16 ROPs.

Opravdu tedy můžeme říci, že každý Shader Engine je vlastně samostatná a úplná jednotka grafické pipeline, kterou jsme si právě dnes popsali. Každý SE tak může na vstupu vzít jeden primitivní trojúhelník, rasterizovat ho do pixelů (fragmentů), určit barvu každého pixelu a na výstupu tyto pixely zapsat do Back Bufferu. Každého asi napadne, že pokud náš vzorový Radeon R9 290X disponuje takovýmito Shader Enginy čtyřmi, výkon bude také 4x vyšší. Jistě, ale to už se dostáváme k teoretickým výkonům a o těch bude řeč někdy jindy.

         
Předchozí kapitola   Další kapitola
         

SPONSORS & PARTNERS

Asus  Alza  MSI  Gigabyte
AMD  Sapphire  Gainward  Nvidia

Copyright (c) 2024 InfoTrade Powered by ASP.NET & MS SQL Server