En arkitektonisk ombyggnation

Sett till arkitekturen har mycket förändrats sedan Polaris och GCN 4.0. En del av denna nya arkitektoniska plattform är något som kallas Next-generation Compute Unit (NCU). Efter presentationen av Vega rådde det en viss förvirring över om detta var namnet på nästa GCN-version, men det är alltså det nya namnet för klustren av beräkningsenheter (Compute Unit, CU).

Beräkningsenheterna som utgör NCU-kluster har utökats med ett antal tillägg till instruktionsuppsättningen (ISA). Totalt sett har 40 nya instruktioner lagts till och arkitekturen är nu betydligt mer effektiv vid beräkningar per klockcykel (IPC), något som GCN 4.0 och tidigare versioner varit svaga på jämfört med Nvidias Maxwell- och Pascal-generationer.

NCU.jpg
NCU_addons.jpg
ISA_additions.jpg
3dmarkSerra_FP16.jpg
Vega_features_Wolf2.jpg
CU_512_8bitops.jpg

Förbättrad IPC i kombination med att Vega är utformad för att kunna skala upp till betydligt högre klockhastigheter ska minska Nvidias övertag vad det gäller just höga maximala klockhastigheter och IPC. NCU-enheterna har även designats om för att arbeta mer effektivt trots att deras befintliga kapacitet bibehålls.

Dessa förändringar innefattar bland annat fysisk krympning, med kortare ledningar mellan kretsarnas beståndsdelar. Varje NCU-enhet delar endast instruktioner och cache med maximalt två andra enheter, något som ska minska konkurrensen om dessa resurser och därmed minimera latensen som uppstår.

L2-cacheminnet, som dubblerats till 4 MB, kan nu dessutom användas direkt av renderingsenheten Pixel Engine utan att gå via minneskontrollern först. Flera av de stora tilläggen i instruktionsuppsättningen kallas kollektivt för Rapidly Packed Math, och som namnet antyder handlar det om att instruktioner kan packas in för snabbare exekvering.

Många av nyheterna i Rapidly Packed Math utökar arkitekturens kapacitet för att blanda beräkningar av enkel- eller halvprecision. Enkelprecision syftar 32-bitars beräkningar av typerna heltal (Int) eller flyttal (FP). Halvprecision innebär helt enkelt att det är 16-bitars varianter av dessa beräkningar.

När beräkningar utförs på en grafikprocessor utförs de traditionellt oftast med enkelprecision (FP32), men många av dessa uppgifter utnyttjar bara bredden som ryms inom halvprecision (FP16). När dessa beräkningar utförs går kapacitet oanvänd, men med Rapidly Packed Math blir det möjligt att klämma in dubbla beräkningar i samma klockcykel.

Kretsdesign.jpg
L2_cache.jpg

Utöver dubbel kapacitet för beräkningar av flyttal och heltal blir även det effektiva registerutrymmet dubbelt så stort. Dagens utvecklargränssnitt som DirectX 11/12 och OpenGL/Vulkan stöder redan 16-bitars beräkningar så utvecklare kan börja utnyttja denna kapacitet omedelbart. Utöver att förbättra prestandapotentialen hos Vega är FP16-beräkningar även mer energieffektiva att utföra jämfört med äldre arkitekturer.

AMD har samarbetat med olika aktörer för att visa vilken vinst som går att få med dessa FP16-beräkningar, bland annat det syntetiska prestandamätningsverktyget 3DMark Serra från Futuremark. Här används halvprecisionsberäkningar för att bland annat göra beräkningar av ytor och volymetrisk ljussättning 24-25 procent snabbare än med enkelprecision, och 20 procent snabbare bloom-effekter.

Rapidly Packed Math är även flexibelt till den grad att utvecklare kan välja om de vill utföra 128 beräkningar av 32-bitars enkelprecision, 256 beräkningar av 16-bitars halvprecision eller 512 beräkningar av 8-bitars QSAD och MQSAD-beräkningar, vilket är en bildbehandlingsteknik där likheter mellan olika bildblock analyseras. Detta kan bland annat användas för objektigenkänning.

Rapidly Packed Math är även en del av de förbättringar som Sony tillförde grafikkretsen i den uppgraderade konsolen Playstation 4 Pro. När konsolen presenterades beskrevs dess grafikkrets som "utökad med funktioner från den kommande Vega-generationen", vilket konkret var bland annat FP16-beräkningar. Det innebär att spelutvecklare kan nyttja denna programmeringsmodell både på Playstation 4 Pro och Vega-grafikkort.

HBCC – det stora paradnumret

Nyheterna i NCU-enheterna lovar stordåd när utvecklarna börjar utnyttja dem, men enligt AMD själva är minnestekniken NBCC den enskilt största nyheten i Vega-arkitekturen. HBCC står för High-Bandwidth Cache Controller och är en ny arkitektur där tillgängliga minnesmängder kan användas som en sista cache-nivå (last level cache) för både primärminne och lagringsminne.

HBCC kan hantera både videominne, primärminne och olika cacheminnen som en tillgänglig pool, och om primärminnet får slut på utrymme kan de övriga resurserna användas för att täcka upp återstående behov. HBCC använder ett sidbaserat system som kan bryta upp krävande uppgifter som lyfts in från primärminnet och därmed bättre utnyttja det lokala grafikminnet.

HBCC.jpg
HBCC_memorypages.jpg
HBCC_cachemodel.jpg
HBCC_inklusive_exklusive.jpg

Traditionell hantering av grafikkortets videominne lyfter in uppgifterna och fyller bara grafikminnet med så många uppgifter som får plats. Om en uppgift är för stor för att få plats plockas den inte in, och resurser förblir därmed outnyttjade. Med det sidbaserade HBCC-systemet delas uppgifterna in i små delar, och de bitar som inte får plats i videominnet flyttas ut till primärminnet eller cacheminne.

HBCC-systemet prioriterar också aktiva minnessidor över inaktiva sådana, och kan dynamiskt markera dessa för migrering till långsammare resurser utanför grafikkortet. De olika minnessidornas storlek kan dessutom anpassas efter uppgiftens typ, eller vilken typ som är tillgänglig. Små sidor kan exempelvis skapas för begränsade cache-utrymmen.

HBCC_OpenGL.jpg
HBCC_mjukvara.jpg

Enligt AMD använder ofta moderna spel inte 50 procent av de minnessidor som finns representerade, och genom att flagga olika minnessidor som aktiva eller inaktiva kan spelen fria upp en stor del outnyttjade resurser. När detta utnyttjas, tillsammans med de nya instruktionerna och funktioner som Asynchronous Compute ska ge extra prestandaskjuts för utvecklare som utnyttjar Vega-arkitekturen.

Utvecklare kan dessutom styra om deras tillämpningar ska använda en inkluderande eller exklusiv cachemodell. I den exklusiva varianten kan de olika resurserna användas som ett stort minnesutrymme, medan inkluderande behåller samma data i de olika cachenivåerna och flyttar från en nivå till en annan om den behövs där.

Båda modeller har olika prestandaegenskaper, och genom att låta utvecklare styra detta kan systemet anpassas efter den typ av tillämpningar som ska användas. En spelmotor har exempelvis helt andra krav än vetenskapliga tillämpningar, och Vega-arkitekturen har byggts för att kunna användas i samtliga av AMD:s tilltänkta målgrupper.

Ett exempel för hur HBCC kan vara till nytta för spel är att stora mängder resurser kan behandlas i realtid. I en demonstration visar AMD hur 27 GB data används i en OpenGL-rendering där 500 miljarder trianglar beräknas i realtid. Att kunna nyttja mer minne än det lokala grafikminnet, och använda snabba små cacheutrymmen för små uppgifter, ligger till grund för detta.

Virtualization_Security.jpg
IO_virtualization.jpg

Utöver att Vega-arkitekturen använder HBCC som ny modell för hantering av minnesresurser kan användaren själv aktivera stöd för gruppering via mjukvaran Radeon Relive för Vega. Då buntas de tillgängliga minnessidorna som används i HBCC samman, och enligt AMD:s egna prestandasiffror ska det kunna ge upp till 7 procent högre bildfrekvens i syntetiska Unigine Heaven.

HBCC är även en viktig komponent i Vega-arkitekturens förbättrade kapacitet för hantering av virtuella resurser. Totalt sett kan den hantera upp till 512 TB virtuellt minnesutrymme. Detta används tillsammans med utökningar av arkitekturens instruktionsuppsättning som möjliggör hårdvaruvalidering av exekvering och säkra zoner på grafikminnet.

Här stöds även något som kallas Single-Root IO Virtualization, en del av PCI Express-standarden som låter grafikkortets resurser delas upp mellan olika virtuella gästsystem som körs i värdsystemet. Olika uppgifter från olika gästsystem kan exekveras oberoende av varandra och tilldelas egna skyddade minneszoner. Detta stöd kommer till användning i Radeon Pro-produkterna.