Paměťový subsystém
Kapitoly článků
Parallel DataCache s konfigurovatelnou L1 a unifikovanou L2 cache
Na stovkách dosud vytvořených GPU aplikací z různých oblastí se Nvidia dle vlastních slov naučila, že zatímco sdílená paměť pomáhá řešit mnoho problémů, jindy je naopak vhodná spíše vyrovnávací paměť a jindy zase kombinace obojího. Optimální architektura tedy musí být schopna nabídnou obojí a tak je tomu v případě Fermi, jak jsme si uveldi výše.
Zopakujme si, že každý blok SM ve Fermi má k dispozici 64 kB vysokorychlostní paměti konfigurovatelné jako 48 kB sdílené a 16 kB vyrovnávací paměti, nebo naopak.
V obou konfiguracích pomáhá část vyhrazená jako L1 cache s výkonem „kešováním“ dočasných registrů u komplexních programů. V předchozí generaci se toto realizovalo ve výrazně pomalejší DRAM, což velmi zvyšovalo latence. Fermi dále obsahuje 768 kB L2 cache, která obstarává veškeré požadavky na načítání, ukládání a texturování. L2 cache je společná pro všechny SM, tudíž je efektivní cestou pro sdílení dat mezi jednotlivými SM v GPU. Z této hierarchie vyrovnávacích pamětí těží algoritmy pro adresování dat, které není známo dopředu, jako například řešení fyziky, raytracing, násobení matic atd., stejně jako některé specifické typy kernelů (filter, convolution).
Popora ECC pamětí
Fermi je prvním GPU od Nvidie, které přinese podporu ECC pamětí (error checking and correction). ECC si, jak jsme uvedli výše, vyžádali uživatelé v rámci lepší datové integrity ve výpočetních prostředích velmi velkých rozměrů, je žádáno mimo jiné v oblatech, kde se GPU nasazují pro medicínské zobrazování a clustery. Fermi architektura chrání integritu dat pomocí ECC na úrovni registrů, sdílených pamětí, L1 a L2 cache a DRAM pamětí.
Fast Atomic Memory Operations
Atomické paměťové operace hrají v paralelním programování významnou roli, umožňují souběžným threadům korektně vykonávat operace čtení/modifikace/zápisu nad sdílenými datovými strukturami. Atomické operace jako add, min, max a compare-and-swap jsou atomickými v tom smyslu, že čtení/modifikace/zápis jsou prováděny bez přerušení jinými thready. Atomické paměťové operace jsou široce využívány pro třídění, redukční operace, paralelní budování datových struktur atd. Díky kombinaci více atomických jednotek v hardware a přidání L2 cache je vykonávání těchto operací na Fermi výrazně rychlejší. Atomické operace vůči dané adrese vykonává Fermi až 20× rychleji než GT200, operace do kontinuálních paměťových oblastí až 7,5× rychleji.