Fermi (mikroarkitektur) - Fermi (microarchitecture)

Nvidia Fermi
Utgivelsesdato April 2010
Fremstillingsprosess 40 nm og 28 nm
Historie
Forgjenger Tesla 2.0
Etterfølger Kepler

Fermi er kodenavnet for en grafikkbehandlingsenhet (GPU) mikroarkitektur utviklet av Nvidia , som først ble utgitt for detaljhandel i april 2010, som etterfølgeren til Tesla mikroarkitektur. Det var den primære mikroarkitekturen som ble brukt i GeForce 400 -serien og GeForce 500 -serien . Den ble fulgt av Kepler , og ble brukt sammen med Kepler i GeForce 600 -serien , GeForce 700 -serien og GeForce 800 -serien , i de to sistnevnte bare i mobile GPUer. I arbeidsstasjonsmarkedet fant Fermi bruk i Quadro x000 -serien, Quadro NVS -modeller, så vel som i Nvidia Tesla -datamoduler . Alle stasjonære Fermi -GPUer ble produsert i 40 nm, mobile Fermi -GPUer i 40 nm og 28 nm. Fermi er den eldste mikroarkitekturen fra NVIDIA som mottok støtte for Microsofts rendering API Direct3D 12 feature_level 11.

Arkitekturen er oppkalt etter Enrico Fermi , en italiensk fysiker.

Oversikt

Fig. 1. NVIDIA Fermi -arkitekturkonvensjon
i figurer: oransje - planlegging og utsendelse; grønn - utførelse; lyseblå -registre og cacher.
Die shot av GF100 GPU funnet inne i GeForce GTX 470 -kort

Fermi Graphic Processing Units ( GPUer ) har 3,0 milliarder transistorer og en skjematisk skisse er vist i figur 1.

  • Streaming Multiprocessor (SM): sammensatt av 32 CUDA -kjerner (se Streaming Multiprocessor og CUDA core -seksjoner).
  • GigaThread global planlegger: distribuerer trådblokker til SM -trådplanleggere og administrerer kontekstbytte mellom tråder under utførelse (se Warp Scheduling -delen).
  • Vertsgrensesnitt: kobler GPU-en til CPU-en via en PCI-Express v2-buss (toppoverføringshastighet på 8 GB/s).
  • DRAM: støttet opptil 6 GB GDDR5 DRAM-minne takket være 64-biters adresseringsevne (se Memory Architecture-delen).
  • Klokkefrekvens: 1,5 GHz (ikke utgitt av NVIDIA, men estimert av Insight 64).
  • Toppytelse: 1,5 TFlops.
  • Global minneklokke: 2 GHz.
  • DRAM -båndbredde : 192 GB/s.

Streaming multiprosessor

Hver SM har 32 enkeltpresisjon CUDA-kjerner, 16 last/lagringsenheter, fire spesialfunksjonsenheter (SFUer), en 64KB blokk med høyhastighets chip-minne (se L1+Shared Memory-underseksjon) og et grensesnitt til L2-cachen ( se L2 Cache -underseksjon).

Last/lagre enheter

Tillat at kilde- og destinasjonsadresser beregnes for 16 tråder per klokke. Last inn og lagre data fra/til cache eller DRAM .

Spesialfunksjoner (SFU)

Utfør transcendentale instruksjoner som synd, cosinus, gjensidig og kvadratrot. Hver SFU utfører en instruksjon per tråd, per klokke; et varp utfører over åtte klokker. SFU -rørledningen er koblet fra senderenheten, slik at senderenheten kan utstede til andre utføringsenheter mens SFU er okkupert.

CUDA kjerne

Integer Arithmetic Logic Unit (ALU) : Støtter full 32-bits presisjon for alle instruksjoner, i samsvar med standard krav til programmeringsspråk. Det er også optimalisert for effektivt å støtte 64-biters og utvidede presisjonsoperasjoner.

Floating Point Unit (FPU)

Implementerer den nye IEEE 754-2008 standarden for flytende punkter, og gir instruksjonene for fused multiply-add (FMA) for både enkel og dobbel presisjon aritmetikk. Opptil 16 dobbeltnøyaktige sammensmeltede multipliseringsoperasjoner kan utføres per SM, per klokke.

Smeltet multipliser-legg til

Fused multiply-add (FMA) utfører multiplikasjon og addisjon (dvs. A*B+C) med et enkelt siste rundingstrinn, uten tap av presisjon i tillegg. FMA er mer nøyaktig enn å utføre operasjonene separat.

Warp planlegging

Fermi-arkitekturen bruker en distribuert trådplanlegger på to nivåer .

Hver SM kan utstede instruksjoner som bruker to av de fire grønne kjøringskolonnene vist i skjematisk figur 1. For eksempel kan SM blande 16 operasjoner fra de 16 første kolonnekjernene med 16 operasjoner fra de 16 andre kolonnekjernene, eller 16 operasjoner fra last-/lagringsenhetene med fire fra SFUer, eller andre kombinasjoner som programmet spesifiserer.

Vær oppmerksom på at 64-biters flytende punktoperasjoner bruker begge de to første kjøringskolonnene. Dette innebærer at en SM kan utstede opptil 32 enkelt-presisjon (32-biters) flytepunktoperasjoner eller 16 dobbelt-presisjon (64-biters) flytende operasjoner om gangen.

GigaThread -motor

GigaThread -motoren planlegger trådblokker til forskjellige SM -er

Dual Warp Scheduler

På SM -nivå distribuerer hver warp -planlegger warps på 32 tråder til sine utførelsesenheter. Tråder er planlagt i grupper på 32 tråder kalt warps. Hver SM har to warp -planleggere og to instruksjonsenheter, slik at to warps kan utstedes og kjøres samtidig. Dual warp -planleggeren velger to warps, og gir en instruksjon fra hver warp til en gruppe på 16 kjerner, 16 last/lagringsenheter eller 4 SFUer. De fleste instruksjoner kan utstedes to ganger; to heltall instruksjoner, to flytende instruksjoner, eller en blanding av heltall, flytende punkt, last, lagre og SFU instruksjoner kan utstedes samtidig. Doble presisjonsinstruksjoner støtter ikke dobbel sending med andre operasjoner.

Opptreden

Den teoretiske prosessorkraften med én presisjon til en Fermi GPU i GFLOPS beregnes som 2 (operasjoner per FMA-instruksjon per CUDA-kjerne per syklus) × antall CUDA-kjerner × skyggeklokkehastighet (i GHz). Vær oppmerksom på at den forrige generasjonen Tesla kunne utstede MAD+MUL til CUDA-kjerner og SFUer parallelt, men Fermi mistet denne evnen, ettersom den bare kan utstede 32 instruksjoner per syklus per SM, som bare beholder sine 32 CUDA-kjerner fullt ut. Derfor er det ikke mulig å utnytte SFU -ene til å nå mer enn 2 operasjoner per CUDA -kjerne per syklus.

Den teoretiske dobbelt presisjon prosessorkraften til en Fermi GPU er 1/2 av den eneste presisjonsytelsen på GF100/110. Imidlertid er denne doble presisjonskraften i praksis bare tilgjengelig på profesjonelle Quadro- og Tesla- kort, mens forbrukernes GeForce- kort er begrenset til 1/8.

Hukommelse

L1 -cache per SM og enhetlig L2 -cache som betjener alle operasjoner (last, lagre og tekstur).

Registre

Hver SM har 32K med 32-biters registre. Hver tråd har tilgang til sine egne registre og ikke de til andre tråder. Maksimalt antall registre som kan brukes av en CUDA -kjerne er 63. Antall tilgjengelige registre degraderer grasiøst fra 63 til 21 etter hvert som arbeidsmengden (og dermed ressurskravene) øker med antall tråder. Registre har en veldig høy båndbredde: ca 8000 GB/s.

L1+delt minne

On-chip-minne som kan brukes enten til å lagre data for individuelle tråder (registrere søl/L1-cache) og/eller for å dele data mellom flere tråder (delt minne). Dette 64 KB -minnet kan konfigureres som enten 48 KB delt minne med 16 KB L1 -buffer, eller 16 KB delt minne med 48 KB L1 -buffer. Delt minne gjør at tråder i samme trådblokk kan samarbeide, forenkler omfattende gjenbruk av data på brikken og reduserer trafikken utenfor brikken sterkt. Delt minne er tilgjengelig med trådene i samme trådblokk. Det gir tilgang til lav latens (10-20 sykluser) og veldig høy båndbredde (1600 GB/s) til moderate mengder data (for eksempel mellomresultater i en serie beregninger, en rad eller kolonne med data for matriseoperasjoner, en linje video osv.). David Patterson sier at dette delte minnet bruker ideen om lokal skrapeplate

Lokalt minne

Lokalt minne er ment som et minnested som brukes til å holde "sølte" registre. Registrering av søl oppstår når en trådblokk krever mer registerlagring enn det som er tilgjengelig på en SM. Lokalt minne brukes bare for noen automatiske variabler (som er deklarert i enhetskoden uten noen av __enheter__, __delte__ eller __konstant__ kvalifiseringene). Vanligvis ligger en automatisk variabel i et register bortsett fra følgende: (1) Arrays som kompilatoren ikke kan bestemme, er indeksert med konstante mengder; (2) Store strukturer eller matriser som ville forbruke for mye registerplass; Enhver variabel kompilatoren bestemmer seg for å søle til lokalt minne når en kjerne bruker flere registre enn det som er tilgjengelig på SM.

L2 Cache

768 KB enhetlig L2 -cache, delt blant de 16 SM -ene, som betjener all last og lagring fra/til globalt minne, inkludert kopier til/fra CPU -vert, og også teksturforespørsler. L2 -cache -delsystemet implementerer også atomoperasjoner, som brukes til å administrere tilgang til data som må deles over trådblokker eller til og med kjerner.

Globalt minne

Tilgjengelig for alle tråder, så vel som vert (CPU). Høy latens (400-800 sykluser).

Videodekomprimering/komprimering

Se Nvidia NVDEC (tidligere kalt NVCUVID) samt Nvidia PureVideo .

Den Nvidia NVENC teknologien var ikke tilgjengelig ennå, men introdusert i etterfølgeren, Kepler .

Fermi -chips

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

Se også

Referanser

Generell

Eksterne linker