Přehled architektury Fermi
Kapitoly článků
První GPU implementující Fermi architekturu, tedy ono GPU "DirectX 11 generace" dosud známé jako "GT300" obsahuje rovné tři miliardy tranzistorů (!) vyráběných 40nm procesem u TSMC. To je jen tak mimochodem o téměř 40 % více než má Radeon HD 5870 a valná část nárůstu samozřejmě padá na větší L1/L2 cache v GPU Nvidie.
Výpočetní část mají na starost CUDA jádra o celkovém počtu 512 (+113 % oproti GT200b). Ta jsou organizována v 16 streaming multiprocessorech po 32 jádrech na každý. GPU má šest 64bitových paměťových oblastí, tedy 384bitové paměťové rozhraní. Podporuje přitom až 6 GB (!) GDDR5 pamětí. GPU komunikuje se systémem pochopitelně po PCI Express sběrnici. Hlavní globální plánovač GigaThread distribuuje bloky threadů podřízeným plánovačům jednotlivých streaming multiprocessorů (dále jen SM).
Schéma ukazuje rozložení prvků v GPU. Modrá část vlevo obsahuje GigaThread plánovač, PCI Express rozhraní a část paměťového subsystému, pravá část zbývající díl paměťového subsystému. Zelené bloky různých odstínů jsou výpočetní části, na které se podíváme podrobněji, ty mají společnou L2 cache.
Streaming Multiprocessory
Nové GPU ponese již zmíněných 512 výpočetních CUDA jader třetí generace. Dle Nvidie přináší tato generace několik inovací, které z ní činí nejen nejvýkonnější řešení, ale také nejvíce programovatelné a nejefektivnější. To pochopitelně zhodnotíme až po uvedení Fermi na trh.
Každý CUDA procesor (jádro) obsahuje po jedné aritmeticko-logické jednotce pracující s pevnou desetinnou čárkou (Integer ALU - Arithmetic Logic Unit) a jednotce pro práci s plovoucí čárkou (FPU - Floating Point Unit). Předchozí generace GPU zvládaly IEE 754-1985, tato nová umí IEEE 754-2008 standard FPU, tedy onu double-precision (totéž pochopitelně umí HD 5800), poskytujíce fused multiply-add (FMA) instrukce jak pro single, tak double-precision aritmetiku. FMA vylepšuje multiply-add (MAD) instrukce prováděním násobení (multiplication) a sčítání (addition) společně s jediným finálním zaokrouhlovacím krokem beze ztráty přesnosti výpočtu při sčítání. FMA je též přesnější při provádění operací odděleně.
Double-precision FMA je implementováno již v GT200, avšak výrazně méně efektivní cestou (viz. graf). Nově navržená integer ALU je optimalizována pro 64bit a extended přesnost operací a podporuje operace aritmetické, posuvné, logické, porovnávací, převodní a přesouvací.
Každý SM blok obsahuje 16 load/store jednotek. Ty umožňují výpočty šestnácti zdrojových a cílových adres pro výpočetní vlákna v jediném taktu. Příslušná data na každé adrese jsou načítána/uchovávána pro cache nebo DRAM (jak jsme si výše psali: konfigurovatelné).
Special Function Units (SFU - speciální funkční jednotky) jsou celkem čtyři pro každý SM a spouštějí transcendentní funkce jako sínus, cosínus, reciproční a kvadratické. Každá SFU zvládne jednu instrukci pro dané výpočetní vlákno za takt; war se spouští každých osm taktů. SFU pipeline je oddělena od dispatch jednotky, což umožňuje této jednotce zaměstnávat jiné výpočetní jednotky zatímco je SFU obsazena nějakým výpočtem.