Diit.cz - Novinky a informace o hardware, software a internetu

Jak Fermi realizuje inerně výpočty

Nvidia Fermi logo (jako)
Kalifornská Nvidia právě v tuto chvíli oficiálně uvolňuje informace o chystané nové (nejen DirectX 11) generaci GPU, o které jsme doposud psali jako o GT300. Její krycí jméno je Fermi a rovnou si řekněme: jde o malou revoluci ve stylu, s jakým přišlo GPU G80 na GeForce 8800. Pojďme se tedy společně podívat, co Nvidia právě ve svých laboratořích a ve spolupráci s TSMC usilovně finišuje, co hodlá postavit proti Radeonům a FireGL/FireStream kartám generace HD 5800 a čím hodlá zatopit pod kotlem nejen AMD, ale i Intelu. Architektura nové generace Nvidia čeká na své představení…

Zastavme se krátce u oněch kernelů. CUDA je architektura umožňující spouštět na GPU programy psané v C, C++, OpenCL, DirectCompute, dále třeba též ve Fortranu. Hlavní program volá kernely, které jsou vykonávány paralelně skrze paralelní thready (vlákna) v GPU. Paralelismus může organizovat buď sám programátor, nebo to nechá na systému, do jednotlivých bloků a větších celků obsahujících několik bloků. Každý thread v bloku spouští instanci kernelu a má příslušné ID v bloku, programovém čítači, registrech, privátní paměti, na vstupech a výstupech.

Vlastní blok několika threadů je tak ve skutečnosti sada současně vykonávaných vláken, která mohou vzájemně spolupracovat skrze synchronizační bariéru a sdílenou paměť. Blok threadů ve Fermi zvládá současně až 1 536 těchto souběžně běžících vláken. Kdyby synchronizační bariéra chyběla, vedlo by to často k „záhadným pádům“, protože jedno jádro (zde thread/blok) by mělo v paměti jiná data než druhé atd.

Nvidia představila Fermi: hiearchie

Vyšší celek zvaný grid obsahující několik bloků spouští vždy stejný kernel, čte vstupy z globální paměti, zapisuje výsledky do globální paměti a provádí synchronizaci mezi závislými kernelovými voláními. V paralelním modelu CUDA má každý thread vlastní privátní paměťový prostor používaný pro registry, volání funkcí a automatické proměnné v C. Každý blok má vlastní sdílený paměťový prostor používaný pro mezithreadovou komunikaci, sdílení dat a výsledků výpočtů. Grid pak sdílí výsledky v rámci globální paměti poté co proběhne globální synchronizace nad kernely.

Hardware Execution

CUDA mapuje požadovanou hiearchii threadů do hiearchie stream processorů v GPU. GPU spouští jeden nebo více kernel gridů, streaming multiprocessor jako dílčí prvek spouští jeden nebo více bloků threadů a CUDA jádra a další vykonávací jednotky v streaming multiprocessoru vykonávají příslušené thready. Streaming multiprocessor vykonává thready ve skupinách po 32, celek se nazývá warp. Zatímco programátoři mohou tyto warpy a jejich vykonávání ignorovat a programovat pouze v jednom výpočetním vlákně, byla by to škoda, neboť s touto paralelizací získávají potenciál pro výrazný nárůst zpracování požadovaných úloh.

David "David Ježek" Ježek

Bývalý zdejší redaktor (2005-2017), nyní diskusní rejpal.

více článků, blogů a informací o autorovi

Diskuse ke článku Nvidia představila novou architekturu Fermi

Neděle, 4 Říjen 2009 - 09:01 | mukade | ja som zvedavy na larrabee, ci zamuti stojate...
Pátek, 2 Říjen 2009 - 12:00 | Anonym | Charlie Demerjan pátrá, radí, informuje: http://...
Pátek, 2 Říjen 2009 - 08:38 | Anonym | ba te prezentaci byla ukazovana jenom maketa...
Pátek, 2 Říjen 2009 - 08:26 | Anonym | až to uvidím tak to posoudím, ale marketing maj...
Pátek, 2 Říjen 2009 - 08:25 | Mad MaxII | >>David: Omluva, vy jste to nikde...
Pátek, 2 Říjen 2009 - 07:43 | Mad MaxII | >>David: Pane redaktore, s tim ze...
Čtvrtek, 1 Říjen 2009 - 22:23 | Anonym | Neklesly akcie nVidie protože pořád hlásala, že...
Čtvrtek, 1 Říjen 2009 - 21:27 | qee | Bezva článek, díky. Jinak bych si tipnul, že...
Čtvrtek, 1 Říjen 2009 - 20:12 | Anonym | Fermi ma vela veci ktore sa budu dat pouzit v...
Čtvrtek, 1 Říjen 2009 - 19:51 | Anonym | Osobně si myslím, že hardwarově nebude mezi...

Zobrazit diskusi