Arkitekturen Ampere – dubbelt upp mot Turing?

Hjärtat i Geforce RTX 3000-serien är den nya arkitekturen Ampere, vilken utlovar rejält ökad kapacitet ställt mot föregångaren Turing. Den stora ökningen sett till teknisk kapacitet och transistormängd görs möjligt av att Nvidia nu krymper tillverkningstekniken från Turings 12 nanometer till en anpassad Samsung-teknik på 8 nanometer. Nvidias utlovade prestandahopp ställt mot Turing siktar onekligen högt.

Företaget anger dubblerad prestanda för Geforce RTX 3080 ställt mot föregångaren RTX 2080 sett till vanlig rasterrendering, nära dubblerad prestanda även för beräkning av ray tracing och mer än tre gånger bättre prestanda för AI och maskininlärning. Med Ampere räknar Nvidia också grafikkortens antal CUDA-kärnor annorlunda än tidigare, något som som mötts av viss skepsis. Häng med när vi sätter Ampere under luppen!

Arkitekturens anatomi

På en övergripande nivå består ett Geforce RTX 3000-kort av ett kluster av grafikprocessorenheter (GPC), som också innehåller en rasterenhet som ansvarar för att beräkna pixelinformation för de trianglar GPC-enheten tilldelas. Nytt för Ampere är att rasterfunktionen nu beräknas av två kluster av rasterenheter (ROP), där klustren består av åtta ROP-enheter. Varje GPC-enhet består av sex texturkluster (TPC), som i sig innehåller två SM-enheter och en Polymorph Engine.

GeForce_RTX_3080_FINAL.jpg

En översiktsbild över arkitekturen Ampere och dess olika komponenter.

GA102_FullChip_Diagram_FINAL.jpg

En översiktsbild över GA102, kretsen som ligger till grund för Geforce RTX 3080.

En SM är i sig en integrerad beräkningsenhet som består av ett flertal komponenter, där traditionella rasterberäkningar utförs av en uppsättning CUDA-kärnor. Polymorph Engine hanterar beräkningar av geometri, och det är bland annat här 3D-objekt och ytor delas upp i mindre beståndsdelar, så kallad tesselering. Varje SM består också av ett dedikerat hårdvarublock för ray tracing-beräkningar vid namn RT Core.

Beräkningar relaterade till AI och maskininlärning utförs av SM-enheternas Tensorkärnor (Tensor Processing Cluster, TPC). Alla beräkningar som utförs av SM-, RT- och Tensorkärnor vidarebefordras till GPC-enhetens rastermotor (raster engine) som genererar ett renderat resultat. Varje GPC ansluter också till ett gemensamt L2-cache.

Den fullständiga versionen av Ampere för konsumenter är kretsen GA102, vilken huserar 10 752 CUDA-kärnor, 84 av andra generationens RT-kärnor och 336 av tredje generationens Tensor-kärnor. Den hittills mest kompletta implementationen av GA102 tar plats i Geforce RTX 3090, där två SM-enheter stängs av vilket resulterar i 10 496 CUDA-kärnor. Geforce RTX 3080 som synas här är istället bestyckad med 68 SM-enheter, för totalt 8 704 CUDA-kärnor.

Streaming Multiprocessor (SM) – arkitekturens byggstenar

En SM kan ses som en byggsten med beräkningsresurser, där Nvidia utökar ett grafikkorts kapacitet genom att bestycka det med fler SM-enheter. En SM består av tre huvudsakliga komponenter där grovgörat utförs av dess uppsättning CUDA-kärnor, eller shaderenheter. Övriga två komponenter är RT Core, vilket introducerades med Turing och utför som namnet antyder beräkningar relaterade till ray tracing. Komponent nummer tre är Tensorkärnorna som utför beräkningar relaterade till AI och maskininlärning.

GA102_SM_Diagram_FINAL.jpg

Översiktsbild över en SM-enhet i Ampere (klocka för att förstora).

Ampere17.jpg
Ampere10.jpg

Shaderdelen består i Ampere av 128 CUDA-kärnor per SM. Varje SM är partitionerad i fyra CUDA-kluster, och var och en av dessa kluster kan utföra uppsättningar av heltals- och flyttalsberäkningar. Utöver CUDA-kärnor är varje SM också utrustad med ett flertal stödfunktioner. Varje SM bestyckas med ett instruktionscache på L1-nivå, där varje CUDA-kluster får 33 procent större allokerat L1-cache och dubblerad bandbredd ställt mot Turing.

Varje CUDA-partition bestyckas också med ett lokalt instruktionscache på L0-nivå. En schemaläggare för instruktionsgrupper (Warp Scheduler) sällskapas av enheter för registerfiler, enheter för laddning och lagring av instruktioner, och mer därtill. Med Ampere expanderar Nvidia kapaciteten i SM-enheternas CUDA-kärnor, men den ökade CUDA-kapaciteten matchas inte av övriga komponenter i en SM.

CUDA-kärnorna – omdebatterade rasterberäknare

En CUDA-kärna är en enkel beräkningsenhet som utför matematiska beräkningar av heltal (integer, INT32) och flyttal (floating point, FP32). Med Turing-arkitekturen kunde CUDA-kärnorna utföra 64 INT32- och 64 FP32-beräkningar per klockcykel, medan Amperes får dubblerad flyttalskapacitet och kan utföra antingen heltal och flyttal (INT32+FP32) eller dubblerad kapacitet för flyttal (FP32+FP32) om 128 per klockcykel. Detta är kärnan i den kontrovers runt huruvida Nvidias påstådda antal CUDA-kärnor i Ampere faktiskt stämmer i praktiken.

Ampere7.jpg
Ampere6.jpg
Ampere4.jpg

Ampere får alltså dubblerad kapacitet för flyttal, men inte för heltal. Det innebär att i situationer där dubbla flyttalsberäkningar av FP32-typ är användbara blir CUDA-kapaciteten i Ampere faktiskt dubblerad till 128 FP32-beräkningar per klockcykel, kontra 64 i Turing. I situationer där heltal är likvärdigt viktiga erbjuder Ampere dock ingen ökning i kapacitet och då blir Nvidias angivna antal CUDA-kärnor inte representativt för de prestandamässiga resurserna.

Det är dock inte endast flyttalsberäkningar som växer med Ampere. Nvidia anger också att CUDA-kärnornas förmåga att utföra shader-beräkningar växer från en beräkning per klockcykel i Turing till två med Ampere. Totalt ska detta ge en teoretisk beräkningskraft om 30 FTLOPS för shaderberäkningar kontra 11 FTLOPS för Turing. Mer potent shaderprestanda är också till nytta för ray tracing då den utökade FP32-kapaciteten kan användas till att rensa bort visuellt brus (eng. denoise) som uppstår i ray tracing-renderade bilder.

Den dubblerade FP32-kapaciteten gör också produktseriens flaggskepp Geforce RTX 3090 mindre lämpad som arbetshäst för mer compute-fokuserade arbetsuppgifter. Ampere för konsumenter kan nämligen inte hantera 64-bitars flyttalsberäkningar (FP64), något som stöds i Ampere för datacenter i form av kretsen A100. Den som tänkt ersätta ett Titan RTX med Geforce RTX 3090 bör alltså ha detta i åtanke.

RT Core – infriar löftet från Turing

Med Turing introducerade Nvidia en dedikerad enhet per SM vid namn RT Core, helt tillägnad hantering av ray tracing-beräkningar som hur ljus interagerar med omgivningen (eng. ray intersection). Enligt Nvidias uppgifter väger RT-prestanda från 34 RT-FLOPS i Turing till 58 i Ampere. Det handlar alltså inte om en dubblering av ray tracing-prestanda, men detta kompletteras alltså även av bättre denoising-prestanda hos CUDA-kärnorna.

Ampere18.jpg
Ampere19.jpg
Ampere3.jpg
Ampere2.jpg
Ampere5.jpg
Ampere4.jpg

En viktig del i de mer effektiva RT-beräkningarna i Ampere är att deras förmåga att utföra både generella beräkningar och grafikuppgifter samtidigt har förbättrats, så kallad Simultaneous Compute and Graphics (SCG) eller Asynch Compute. Med Ampere kan varje SM utföra både shader- och RT-beräkningar parallellt, och det är också möjligt att använda både CUDA- och RT-resurser mer flexibelt.

Det kan exempelvis handla om att CUDA-kärnorna används för att utföra generella beräkningar som städar upp det visuella brus (eng. denoising) som uppstår vid RT-beräkningar, och detta arbete kan utföras på de ray tracing-beräkningar som RT Core-enheterna utför. Det innebär att utvecklare som inte drar full nytta av grafikkortens CUDA-resurser kan använda detta för att förbättra bildkvalitet för ray tracing utan den prestandaförlust dessa förbättringar annars medför.

I Nvidias prestandajämförelse renderar Turing en ray tracing-scen på 51 ms när endast shaderenheter används, vilket sjunker till 20 ms när RTX-enheterna avlastar och ytterligare till 12 ms när Tensorkärnor hjälper till. Med Ampere sjunker detta till 37, 11 och 6,7 ms respektive, vilket i faktisk bilduppdatering motsvarar 150 FPS för en utvecklare som nyttjar de tre Sm-enheterna effektivt.

Med Ampere expanderar Nvidia också repertoaren av RT-funktioner som kan accelereras av hårdvaran. En ny funktion är beräkning av rörelseoskärpa (eng. motion blur) i ray tracing-scener. Traditionellt sett beräknas ray tracing för individuella trianglar, där beräkningarna förutspår hur en triangel förflyttas över tid. Med Ampere kan dessa beräkningar utföras på grupper av trianglar (eng. batch) vid flera tidpunkter och riktningar.

Ampere14.jpg
Ampere16.jpg
Ampere13.jpg
Ampere12.jpg

Förmågan att förutspå trianglarnas position och riktning över tid gör det möjligt att utföra mer avancerad rörelseoskärpa och dessutom utnyttja SM-enheternas RT- och shaderkärnor bättre per klockcykel. Totalt sett tillför andra generationens RT-enheter i Ampere 1,7 gånger bättre ray tracing-kapacitet ställt mot motsvarigheterna i Turing. Då Ampere är fullt kompatibel med DirectX 12_2 stöds också DirectX Raytracing 1.1 (DXR 1.1) fullt ut.

Tensorkärnor – vägen till AI och 8K

Utöver RT-kärnorna var den andra stora nyheten i Turing de så kallade Tensorkärnorna vars uppgift är att beräkna uppgifter relaterade till AI och maskininlärning. Med Ampere minskas faktiskt antalet Tensorkärnor. Där Turing bestyckades med åtta Tensorkärnor, två per SM-partition, utrustas Ampere med blott fyra Tensorkärnor, en per partition. Sett till hela grafikkretsen innehåller TU104 i Geforce RTX 2080 Super totalt 384 Tensorkärnor, medan GA102 i Geforce RTX 3080 innehåller 272 Tensorkärnor.

Ampere11.jpg
Ampere1.jpg

Med Ampere har Nvidia hunnit komma upp i den tredje versionen av Tensorkärnorna, och enligt företaget ger de tekniska framstegen bättre prestanda trots att Ampere innehåller färre enheter ställt mot Turing. Nvidia har också effektiviserat både hur mycket kretsyta Tensorkärnorna tar upp i Ampere, och även förbättrat deras energieffektivitet. Hur stora de prestandamässiga framstegen är beror på vilken matematisk funktion som används.

När Amperes Tensorkärnor beräknar så kallade glesa matriser (sparse matrices) nås prestanda om 128 Tensor-FLOPS per klockcykel, att jämföra med 64 hos Turing. När jämförelsen kommer till stora matriser (dense matrices) blir hoppet än längre till 238 Tensor-flops mot Turings 89 Tensor-FLOPS. Nytt i tredje generationens Tensorkärnor är också dataformaten TF32 och BF16. Dessa utökar arkitekturens kapacitet för att utföra beräkningar med blandad precision.

AI och maskininlärning används dock inte bara för uppskalning av grafik. Likt vad Intel introducerar med Xe-LP för bärbara Tiger Lake-processorer används Tensorkärnorna till att kunna sortera ut både bakgrunder och bakgrundsljud för video-streaming. Här ska tredje generationens Tensorkärnor vara bättre på att skilja på användaren och dess bakgrund, och därmed undanröja behovet av att använda så kallad green screen-bakgrund.

Höga oväsen i bakgrunden, såsom hårtokar och dammsugare, ska också avlägsnas helt med tydligare röstinspelning som resultat. Tensorkärnorna ligger också till grund för de beräkningar som skalar upp lägre upplösningar till mer högupplösta varianter i form av tekniken DLSS.

DLSS 2.1 – Finjusterad uppskalning med 8K i toppskiktet

Nvidias teknik Deep Learning Super Sampling, eller DLSS kort och gott, är en kombinerad kantutjämnings- och uppskalningsteknik som lanserades i samband med den första generationen Geforce RTX-produkter. I dess första utförande i version 1.0 lämnade tekniken en hel del att önska sett till bildkvalitet, men med DLSS 2.0 som lanserades ett drygt halvår senare rättades många av dess tillkortakommanden till.

Tekniken fungerar genom att läsa in nuvarande och föregående bildrutor med låg upplösning och kombinera dessa med rörelsevektorer för att sedan skala upp detta till önskad upplösning, den färdiga bildrutan jämförs sedan mot en så kallad "ground truth". Nvidia definierar detta som en offlinerenderad bild i 16K-upplösning med kantutjämning applicerad.

83822.jpg

De bilder som tekniken tränar på är en kombination av populära spel och mer generaliserat innehåll, och på så sätt ska modellen inte behöva tränas på ett specifikt spel för att kunna leverera goda resultat. Bäst resultat fås dock när Nvidia kunnat träna sin modell på en specifik titel. Uppdaterade set levereras via Nvidias drivrutiner eller som separata uppdateringar. Hittills har vi dock inte sett några exempel på det sistnämnda.

Nyckeln till processen är de Tensor-kärnor som Nvidia introducerade redan i Volta-arkitekturen för professionella användningsområden och som sedan tillgängliggjordes för vanliga konsumenter i och med Geforce RTX 2000-serien.

I och med Geforce RTX 3000-lanseringen tar Nvidia ett relativt blygsamt hopp från DLSS 2.0 till version 2.1. Fokus med den iterativa uppdateringen är VR, dynamiska upplösningar och 8K-upplösningar där det sistnämnda bland annat förbättras med hjälp av uppskalning från upplösningen 2 560 × 1 440 pixlar (1440p).

dlss21.png

Nytt är också en förbättrad analysmodell som specifikt optimerats för 8K. Detta läge kallas "ultra performance mode" och skalar upp bilden till nio gånger sin originalupplösning, där tidigare lägen varit begränsade till fyra gångers uppskalning från exempelvis 1080p till 4K. För dig som inte ännu tänkt gå över till 8K-upplösning bjuder Nvidia ändå på en intressant förbättring i form av dynamisk upplösning.

Med den senaste versionen krävs inte längre en fast upplösning att skala från då funktionen numera kan acceptera variabel upplösning, och har därmed potentialen att höja prestanda och/eller bildkvalitet i de titlar som har stöd för detta. Sist men inte minst har Nvidia adderat stöd för VR i DLSS 2.1, ett trevligt tillskott då både bildkvalitet och stabil och hög bilduppdatering är kritiskt för att den virtuella upplevelsen ska bli behaglig.

Allt som allt representerar DLSS 2.1 trevliga justeringar utöver grundfunktionerna i version två, vilka här lämnas orörda. I och med att DLSS 2.0 var en så pass stor renovering av tekniken är finjusteringar acceptabla här, men det är alltid svårt att inte sukta efter mer genomgående uppgraderingar för allehanda vanliga användarscenarion.

I och med att DLSS accelereras av Geforce-kortens Tensor-kärnor bör funktionen vara ännu bättre på att bibehålla hög prestanda tack vare de förbättrade Tensor-kärnorna i Ampere-arkitekturen. Rykten om DLSS 3.0 anpassat för den tredje generationens Tensor-kärnor i RTX 3000-serien har ännu inte burit frukt men det är tydligt att Nvidia fortsätter satsa på tekniken.

Optimeringar och GDDR6X

Utöver den tekniska ökningen i kapacitet menar Nvidia att Ampere också utformats för att arbeta mer energieffektivt än tidigare, och därmed ge mer prestanda per watt ställt mot Turing och tidigare arkitekturer. Enligt företagets uppgifter är Ampere upp till 1,9 gånger mer energieffektiv per watt än Turing, vilket bland annat bygger på optimerad kretsdesign, termisk design och kretspaketering.

Ampere9.jpg

En del i att Ampere får mer gjort per klockcykel är också skiftet till GDDR6X som grafikminne. I Geforce RTX 3080 arbetar detta över en 320-bitars minnesbuss med minneshastighet om 19 000 MHz. Det ger total minnesbandbredd om 760 GB/s, en ökning om 40 procent ställt mot Turing-baserade Geforce RTX 2080. Förbättringarna i GDDR6X ligger inte bara i högre hastigheter utan även i bytet till nya kommunikationsmetoden PAM4.

Med GDDR6 används kommunikationstekniken NRZ där signaler skickar binär data som tvåvägssignaler, en etta eller en nolla. Med PAM4 i GDDR6X skiftar detta istället till att skicka signaler som fyra olika effektnivåer. Dessa nivåer går i steg om 250 millivolt (mV) varje klockcykel, och därmed skickas data fyra gånger per klockcykel, en dubblering ställt mot GDDR6.

Då allt från högupplöst spelinnehåll till ray tracing, AI-beräkningar och andra krävande uppgifter är bandbreddskrävande kommer den ökade bandbredden till nytta för flertalet uppgraderade komponenter i Ampere-arkitekturen.

NVLink – flerkopplade grafikkort blir än mer irrelevant

Med de senaste generationens grafikkort och arkitekturer har flerkopplade grafikkort, eller Multi-GPU som det populärt kallas, till största del ignorerats av grafikkortstillverkare. AMD, Nvidia och Intel har överlämnat stödet för Multi-GPU till funktionen i DirectX, och nya drivrutiner för aktuella speltitlar innehåller inte längre profiler för flerkopplade grafikkort som de brukade tillföra.

I samband med att stödet flyttade över till DirectX har AMD valt att länka samman grafikkort via mjukvara, det vill säga operativsystem och DirectX, snarare än de fysiska Crossfire-länkar företagets grafikkort brukade bestyckas med. Nvidia har fortsatt valt att bestycka produkter med fysiska länkar, vilket i moderna grafikkort består av så kallade NVLink-anslutningar. Detta består även med Ampere, men här är det endast toppkortet Geforce RTX 3090 som tilldelas funktionen.

Tredje generationens NVLink använder fyra PCI Express-banor (x4) för bandbredd om strax över 56,25 GB/s i båda riktningar mellan två parkopplade grafikkort, för total bandbredd om 112,5 GB/s. Mer än två parkopplade grafikkort stöds dock inte. Att endast det dyraste och mest kapabla grafikkortet, vars kapacitet gör det lämpligt som en ersättare till tidigare generationers Titan-kort, stöder Multi-GPU är ytterligare en indikation om att framtiden för spelande inte stavas flerkopplade grafikkort.