Dual Warp Scheduler
Kapitoly článků
SM ve Fermi obsahuje dva warp plánovače a dvě instruknčí dispatch jednotky, což umožňuje zpracovávat dva warpy najednou. Duální plánovač vybere dva warpy, vezme jednu instrukci z každého warpu a přiřadí je skupině šestnácti jader, šestnácti load/store jednotkám nebo čtyřem SFU (speciální funkční jednotky). Protože jsou warpu vykonávány okamžitě, plánovač ve Fermi nepotřebuje provádět kontrolu závislostí uvnitř toku instrukcí. Tento duální model tak umožňuje dosahovat na Fermi téměř maximální výkon dostupný na daném hardwaru.
A nyní ta dobrá zpráva: většina instrukcí může být řešena touto duální cestou: dvě integer instrukce, nebo dvě floating instrukce, nebo mix integer a floating, načítání, uchovávání a SFU instrukce, vše může být zpracováváno současně.
64kB konfigurovatelná sdílená paměť a L1 cache
Další architektonická inovace se týká malé ale rychlé části paměti sídlící velmi blízko samotným výpočetním jednotkám. Sdílená paměť umožňuje threadům v daném bloku sdílet vzájemně data, čímž šetří nutné datové přenosy jinak realizované "vzdálenějšími" částmi GPU a snižují tak provoz na jednotlivých vnitřních sběrnicích. Sdílená paměť je dle Nvidie klíčem k navýšení výkonu mnoha high-performance CUDA aplikací.
G80 (GeForce 8800) a GT200 (GeForce GTX) měly 16kB sdílenou paměť na každý SM, Fermi jí má rovnou 64 kB a ta může být nakonfigurována jako 48kB sdílená paměť plus 16kB L1 cache, nebo naopak 16kB sdílená plus 48kB L1 cache. Pro existující aplikace výrazně sdílenou paměť využívající tak Fermi dosahuje trojnásobného nárůstu využití této paměti, což zvyšuje rychlost běhu těchto aplikací.
Pro existující aplikace pak lze upravit jejich kód správy sdílené paměti tak, aby efektivně využíval cache a přitom měl stále k dispozici očekávaných oněch nejméně 16kB sdílené paměti. A nakonec aplikace, jejichž autoři do kódu nezakomponovali využití sdílené paměti, budou automaticky těžit z L1 cache.
Takto pak vypadá celkové srovnání parametrů Fermi se staršími generacemi.