Aktuality  |  Články  |  Recenze
Doporučení  |  Diskuze
Grafické karty a hry  |  Procesory
Storage a RAM
Monitory  |  Ostatní
Akumulátory, EV
Robotika, AI
Průzkum vesmíru
Digimanie  |  TV Freak  |  Svět mobilně

Nvidia Fermi - revoluce na poli grafických karet?

20.10.2009, Petr Štefek, článek
Nvidia Fermi - revoluce na poli grafických karet?
Nvidia nás záhy po uvedení nových Radeonů HD 5000 zahrnula prvními informacemi o chystané architektuře Fermi, která má ambice na to, aby se stala hnacím motorem pro segment herního hardware a také pro segment doposud jen oťukávaného High Performace Computingu.

Zpracovávání vláken a dispatch jednotky


V několika článcích jsme si již povídali o tom, že GPU jako taková jsou vhodná především pro zpracovávání mnoha instrukčních vláken najednou, což vychází především z jejich velkého počtu samostatných procesorů (známe je pod názvy stream procesory nebo nově CUDA Cores). Paralelní programování je tak alfou a omegou pro efektivní využití takto komplikovaných jader. Bežný procesor je schopen v současné době zpracovávat až 8 vláken nezávisle, ale i to je pro většinu aplikací nadbytečný luxus.

Grafická jádra dokáží zpracovávat až desetitisíce vláken najednou. Starší architektura G200 v tomto ohledu disponovala možnostmi zpracovávat až 30 720 vláken najednou. Nvidia nicméně pochopila, že takto velký počet najednou zpracovávaných vláken není potřebný a limitujícím faktorem bývá spíše sdílená paměť čipu pro jednotlivé procesory. Ta byla rapidně zvětšena na opravdu obřích 768 kB, což je v rámci GPU absolutně gigantická kapacita.



V čipech Nvidia (G200 a G80 nevyjímaje) jsou vlákna rozdělována do tzv. WARPů, které reprezentují 32 vláken. Ve starších čipech trvalo zpracování takovéhoto WARPu dva cykly, neboť v jednom cyklu bylo pro blok stream procesorů (SM) možné zpracovávat pouze 16 vláken. Nyní již FERMI zpracuje celý WARP během jediného cyklu. V minulých architekturách byla logika pro zpracovávání vláken poměrně neefektivní, neboť v případě, že vlákna byla odeslána do Special Function Unit (SFU), tak ostatní procesory jednoduše zahálely a musely počkat, až budou zpracována veškeré vlákna jednoho WARPu. To vše samozřejmě podlamovalo kolena případné efektivitě a tím pádem i výsledné rychlosti zpracování.

Fermi tohle vyrešilo poměrně elegantně, protože má v rámci jednoho SM bloku (32 procesorů) dvě dispatch (řízení zpracování vláken), kde každá z nich může odbavit polovinu WARPu (16 vláken). Navíc tato vlákna nemusí nutně pocházet ze stejného WARPu, což dále podstatně zefektivňuje zpracování.

Samotný blok procesorů (SM=32 procesorů) může zpracovávat rozdílný počet operací, který primárně závisí na tom, jakého jsou samotné výpočty typu (FP64, FP32, INT 32 atd.). Vše závisí na tom, kam vlákna putují na další zpracování.


Kernel


Kernel je v případě GPU hardware malý program nebo funkce, která běží nezávisle na ostatních operacích GPU. Starší hardware Nvidie (G80 a G200) měl poměrně podstatné omezení v tom, že současně mohl být vykonáván pouze jeden kernel. To není problém, když se jedná o zpracovávání grafiky, ale v případě nasazení v akceleraci klasických aplikací nám to může vrásky na čele opravdu nadělat. V případě akcelerací tzv. „general purpose“ aplikací se může stát, že jediný daný kernel není pro daný úkol dostatečně „široký“, což způsobí problém v částečném zahálení jednotlivých SM bloků s procesory.



FERMI dokáže současně provozovat několik kernelů a ty mohou být podstatně širší (větší) než v případě starších čipů G200. Výsledek je hlavně zkrácení času (až 10x rychleji) mezi přepínáním hardware do jednotlivých módů (grafika vs. General purpose computing atd.). Vývojáři plesají radostí, ale v čem vlastně toto vylepšení spočívá? Připomeňme si například PhysX, kde se karta musí postarat jednak o zpracovávání grafiky a současně i o akceleraci fyziky. Přepínání mezi kernely nyní usnadňuje tyto operace a co je hlavní, značně je zrychluje.
Doporučujeme náš velký přehled desktopových grafických čipů.