Fermi (mikroarkitektur) - Fermi (microarchitecture)

Nvidia Fermi
Utgivningsdatum April 2010
Tillverkningsprocess 40 nm och 28 nm
Historia
Företrädare Tesla 2.0
Efterträdare Kepler

Fermi är kodnamnet för en grafikprocessorenhet (GPU) mikroarkitektur som utvecklats av Nvidia , som först släpptes till detaljhandeln i april 2010, som efterträdare till Tesla mikroarkitektur. Det var den primära mikroarkitekturen som användes i GeForce 400 -serien och GeForce 500 -serien . Den följdes av Kepler och användes tillsammans med Kepler i GeForce 600 -serien , GeForce 700 -serien och GeForce 800 -serien , i de två senare bara i mobila GPU: er. På arbetsstationsmarknaden fann Fermi användning i Quadro x000 -serien, Quadro NVS -modeller samt i Nvidia Tesla -datormoduler. Alla stationära Fermi -GPU: er tillverkades i 40 nm, mobila Fermi -GPU: er i 40 nm och 28 nm. Fermi är den äldsta mikroarkitekturen från NVIDIA som fick stöd för Microsofts rendering API Direct3D 12 feature_level 11.

Arkitekturen är uppkallad efter Enrico Fermi , en italiensk fysiker.

Översikt

Fig. 1. NVIDIA Fermi
-arkitekturkonvention i figurer: orange - schemaläggning och utskick; grönt - utförande; ljusblå -register och cacher.
Die shot av GF100 GPU som finns inuti GeForce GTX 470 -kort

Fermi Graphic Processing Units ( GPU: er ) har 3,0 miljarder transistorer och en schematisk skiss i figur 1.

  • Streaming Multiprocessor (SM): består av 32 CUDA -kärnor (se Streaming Multiprocessor och CUDA core -sektioner).
  • GigaThread global schemaläggare: distribuerar trådblock till SM -trådschemaläggare och hanterar kontextbyten mellan trådar under körning (se avsnittet Warp Scheduling).
  • Värdgränssnitt: ansluter GPU: n till processorn via en PCI-Express v2-buss (toppöverföringshastighet på 8 GB/s).
  • DRAM: stöds upp till 6 GB GDDR5 DRAM-minne tack vare 64-bitars adresseringsfunktion (se avsnittet Memory Architecture).
  • Klockfrekvens: 1,5 GHz (släpps inte av NVIDIA, men uppskattas av Insight 64).
  • Topprestanda: 1,5 TFlops.
  • Global minnesklocka: 2 GHz.
  • DRAM bandbredd : 192GB / s.

Streaming multiprocessor

Varje SM har 32 enkla CUDA-kärnor, 16 laddnings-/lagringsenheter, fyra specialfunktionsenheter (SFU: er), ett 64KB block med hög hastighet på chip (se avsnittet L1+Delat minne) och ett gränssnitt till L2-cachen ( se avsnittet L2 Cache).

Ladda/lagra enheter

Låt käll- och destinationsadresser beräknas för 16 trådar per klocka. Ladda och lagra data från/till cacheminnet eller DRAM .

Specialfunktionsenheter (SFU: er)

Utför transcendentala instruktioner som synd, cosinus, ömsesidig och kvadratrot. Varje SFU utför en instruktion per tråd, per klocka; en varp kör över åtta klockor. SFU -rörledningen är frikopplad från avsändarenheten, vilket gör att avsändarenheten kan utfärda till andra exekveringsenheter medan SFU är upptagen.

CUDA -kärna

Integer Arithmetic Logic Unit (ALU) : Stöder full 32-bitars precision för alla instruktioner, i överensstämmelse med standardkrav för programmeringsspråk. Det är också optimerat för att effektivt stödja 64-bitars och utökad precision.

Floating Point Unit (FPU)

Implementerar den nya IEEE 754-2008-standarden för flytande punkter, som ger den sammanslagna multiply-add (FMA) -instruktionen för både enkel och dubbel precision aritmetik. Upp till 16 dubbla precisionssmältade multiply-add-operationer kan utföras per SM, per klocka.

Säkrad multiplicera-lägg till

Fused multiply-add (FMA) utför multiplikation och addition (dvs A*B+C) med ett enda sista avrundningssteg, utan förlust av precision i tillägget. FMA är mer exakt än att utföra operationerna separat.

Varp schemaläggning

Fermi-arkitekturen använder en två-nivå, distribuerad trådschemaläggare .

Varje SM kan utfärda instruktioner som förbrukar två av de fyra gröna exekveringskolumnerna som visas i schematisk bild 1. Till exempel kan SM blanda 16 operationer från de 16 första kolumnkärnorna med 16 operationer från de 16 andra kolumnkärnorna eller 16 operationer från last-/lagringsenheterna med fyra från SFU: er eller andra kombinationer som programmet anger.

Observera att 64-bitars flytande punktoperationer förbrukar båda de två första körningskolumnerna. Detta innebär att en SM kan utfärda upp till 32 enkel-precision (32-bitars) flytande punktoperationer eller 16 dubbel-precision (64-bitars) flytande punktoperationer åt gången.

GigaThread -motor

GigaThread -motorn schemalägger trådblock till olika SM

Dual Warp Schemaläggare

På SM -nivå distribuerar varje varp -schemaläggare varp med 32 trådar till sina exekveringsenheter. Trådar schemaläggs i grupper om 32 trådar som kallas varp. Varje SM har två varp -schemaläggare och två instruktionssändningsenheter, så att två varp kan utfärdas och köras samtidigt. Den dubbla varp -schemaläggaren väljer två varp och ger en instruktion från varje varp till en grupp med 16 kärnor, 16 last-/lagringsenheter eller 4 SFU: er. De flesta instruktioner kan utfärdas två gånger; två heltalsinstruktioner, två flytande instruktioner eller en blandning av heltal, flytpunkt, last, lagring och SFU -instruktioner kan utfärdas samtidigt. Dubbla precisionsinstruktioner stöder inte dubbel sändning med någon annan operation.

Prestanda

Den teoretiska enprecisionskraften hos en Fermi-GPU i GFLOPS beräknas som 2 (operationer per FMA-instruktion per CUDA-kärna per cykel) × antal CUDA-kärnor × skuggklockhastighet (i GHz). Observera att den tidigare generationen Tesla kan dubbla utfärda MAD+MUL till CUDA-kärnor och SFU: er parallellt, men Fermi förlorade denna förmåga eftersom den bara kan utfärda 32 instruktioner per cykel per SM vilket håller bara sina 32 CUDA-kärnor fullt utnyttjade. Därför är det inte möjligt att utnyttja SFU: erna för att nå mer än 2 operationer per CUDA -kärna per cykel.

Den teoretiska dubbelprecisionskraften hos en Fermi GPU är 1/2 av den enda precisionsprestandan på GF100/110. Men i praktiken är denna dubbelprecisionskraft endast tillgänglig på professionella Quadro- och Tesla- kort, medan konsumentens GeForce- kort är begränsade till 1/8.

Minne

L1 -cache per SM och enhetlig L2 -cache som tjänar alla operationer (laddning, lagring och textur).

Register

Varje SM har 32K 32-bitars register. Varje tråd har tillgång till sina egna register och inte till andra trådar. Det maximala antalet register som kan användas av en CUDA -kärna är 63. Antalet tillgängliga register försämras graciöst från 63 till 21 när arbetsbelastningen (och därmed resurskraven) ökar med antalet trådar. Registren har en mycket hög bandbredd: cirka 8 000 GB/s.

L1+Delat minne

On-chip-minne som kan användas antingen för att cacha data för enskilda trådar (registrera spill/L1-cache) och/eller för att dela data mellan flera trådar (delat minne). Detta 64 KB -minne kan konfigureras som antingen 48 KB delat minne med 16 KB L1 -cache eller 16 KB delat minne med 48 KB L1 -cache. Delat minne gör det möjligt för trådar inom samma trådblock att samarbeta, underlättar omfattande återanvändning av on-chip-data och reducerar trafik från chip mycket. Delat minne är tillgängligt för trådarna i samma trådblock. Det ger åtkomst med låg latens (10-20 cykler) och mycket hög bandbredd (1600 GB/s) till måttliga datamängder (t.ex. mellanresultat i en serie beräkningar, en rad eller kolumn med data för matrisoperationer, en rad video etc.). David Patterson säger att detta delade minne använder tanken på lokal skrapa

Lokalt minne

Lokalt minne är tänkt som en minnesplats som används för att hålla "spillda" register. Registrering av spill uppstår när ett trådblock kräver mer registerlagring än vad som är tillgängligt på en SM. Lokalt minne används endast för vissa automatiska variabler (som deklareras i enhetskoden utan någon av __enheter__, __delade__ eller __konstant__ kvalificeringarna). Generellt finns en automatisk variabel i ett register förutom följande: (1) Arrayer som kompilatorn inte kan bestämma indexeras med konstanta kvantiteter; (2) Stora strukturer eller matriser som skulle förbruka för mycket registerutrymme; Varje variabel kompilatorn beslutar att spilla till lokalt minne när en kärna använder fler register än vad som är tillgängligt på SM.

L2 Cache

768 kB enhetlig L2 -cache, delad bland de 16 SM, som servar all laddning och lagring från/till globalt minne, inklusive kopior till/från CPU -värd, och även texturförfrågningar. Delsystemet L2 -cache implementerar också atomoperationer som används för att hantera åtkomst till data som måste delas över trådblock eller till och med kärnor.

Globalt minne

Tillgänglig för alla trådar samt värd (CPU). Hög latens (400-800 cykler).

Videodekomprimering/komprimering

Se Nvidia NVDEC (tidigare kallat NVCUVID) samt Nvidia PureVideo .

Den Nvidia NVENC tekniken var inte tillgänglig ännu, men införts i efterföljaren, Kepler .

Fermi chips

  • GF100
  • GF104
  • GF106
  • GF108
  • GF110
  • GF114
  • GF116
  • GF118
  • GF119
  • GF117

Se även

Referenser

Allmän

externa länkar