SWAR, hur AI och multimedia påskyndar både processorer och GPU: er

SWAR-konceptet kommer att verka konstigt för många, men vad händer om vi säger att SIMD-enheterna för dina processorer, GPU: er i dina system mestadels är av SWAR-typen? Dessa typer av enheter skiljer sig från konventionella SIMD-enheter och har sitt ursprung i multimedia-tilläggen i slutet av 90-talet. Vad är de och vad använder de idag?

En processors prestanda kan mätas på två sätt, å ena sidan, hur snabbt den utför instruktionerna i serie och att de därför inte kan parallelliseras, eftersom de bara påverkar enhetsdata. Å andra sidan, de som arbetar med flera data och kan parallelliseras. Det traditionella sättet att göra det på processorer och GPU: er? SIMD-enheterna, av vilka det finns en undertyp som används mycket i processorer och GPU: er, SWAR-enheterna.

SVAR

ALU och deras komplexitet

1 bit ALU

Innan vi pratar om SWAR-konceptet måste vi komma ihåg att ALU är enheterna i a CPU som är ansvariga för att utföra aritmetiska och logiska beräkningar med olika siffror. Dessa kan växa i komplexitet på två sätt, ett från komplexiteten i instruktionen de måste utföra. Den interna kretsen hos en ALU som kan utföra till exempel beräkningen av en kvadratrot är inte densamma som den för en enkel summa.

Den andra är precisionen med vilken de arbetar, det vill säga antalet bitar som de manipulerar samtidigt varje gång. En ALU kan alltid hantera data som är lika med eller mindre än antalet bitar som den är designad för. Vi kan till exempel inte göra ett 32-bitarsnummer beräknat med en 16-bitars ALU, men vi kan göra det motsatta.

Men vad händer när vi har flera data med lägre precision? Normalt kommer de att springa i samma hastighet som full precision, men det finns ett sätt att påskynda dem, och det är överregistrerat SIMD. Vilket också är ett sätt att spara transistorer i en processor.

Vad är SWAR-konceptet?

SIMD Escalar

Nu kommer många av läsarna att veta att det är en SIMD-enhet, men vi kommer att granska den så att ingen förlorar tråden i den här artikeln från början. En SIMD-enhet är en typ av ALU där flera data manipuleras genom en enda instruktion samtidigt, och därför finns det flera ALU som delar upptagningsdelen av vad själva instruktionen är och dess avkodning, men där i var och en en annan information behandlas.

SIMD-enheter består vanligtvis av flera ALU: er, men det finns fall där ALU: erna är indelade i enklare, liksom ackumuleringsregistret där de tillfälligt lagrar sina data för att beräkna dem. Detta kallas SIMD i ett register eller med dess akronym på engelska SWAR, vilket betyder SIMD inom ett register eller SIMD i ett register.

Denna typ av SIMD-enhet används mycket och tillåter en precisions n-bit ALU att utföra samma instruktion men använda data med mindre precision. Vanligtvis med en halv eller en fjärdedel precision. Till exempel kan vi få en 64-bitars ALU att fungera som två 32-bitars ALU genom att utföra nämnda instruktion parallellt eller fyra 16-bitars.

Gräva djupare in i SWAR-konceptet?

Escalar SIMD SVAR

Detta koncept är redan flera decennier gammalt, men första gången de dök upp på PC var i slutet av 90-talet med utseendet på SIMD-enheter i de olika typerna av processorer som fanns. Platsveteraner kommer ihåg begrepp som MMX, AMD 3D nu!, SSE och liknande var SIMD-enheter byggda under SWAR-konceptet.

Antag att vi vill bygga en 128-bitars SIMD-enhet

  • I konventionella SIMD-enheter har vi flera ALU: er som arbetar parallellt och var och en av dem har sitt eget dataregister eller ackumulator. Således kan en 128-bitars SIMD-enhet bestå av 4 32-bitars ALU och 4 32-bitarsregister.
  • Istället är en SWAR-enhet en enda ALU som kan fungera i mycket hög precision liksom dess ackumulatorregister. Detta gör att vi kan bygga SIMD-enheten med en enda 128-bitars ALU med SWAR-stöd.

Fördelen att implementeringen av en SWAR-enhet har över en skalär är enkel att förstå, om en ALU inte innehåller SWAR-mekanismen som gör att den kan fungera som en SIMD-enhet med mindre precisionsdata kommer den att exekvera dem samtidigt fart. data med högsta precision. Vad betyder det här? En 32-bitars enhet utan SWAR-stöd, om den måste använda samma instruktion på 16-bitars data, kommer att göra det i samma hastighet som en 32-bitars. Å andra sidan, om ALU stöder SWAR, kommer den att kunna utföra två 16-bitars instruktioner i samma cykel, om båda kommer i följd.

SWAR som en patch för AI

Nodo cerebro IA

Algoritmer för artificiell intelligens har en särskildhet, de tenderar att arbeta med data med mycket låg precision och idag arbetar de flesta ALU med 32-bitars precision. Detta innebär att man lägger till precision 16-, 8- och till och med 4-bitars ALU till en processor för att påskynda dessa algoritmer. Vilket är för att komplicera processorn, men ingenjörerna hamnade inte i det felet och började dra SIMD-registret på ett visst sätt, särskilt på GPU: er.

Är det möjligt att kombinera en konventionell ALU SIMD med en SWAR-design? Ja ja, och det här är till exempel AMD som gör i sina GPU: er där var och en av de 32-bitars ALU: erna som utgör SIMD-enheterna i dess RDNA GPU: er stöder SIMD över register och därför kan delas in i två 16-bitar, 4 på 8 bitar eller 8 på 4 bitar.

I fallet med NVIDIA, de har belastat med att påskynda algoritmerna för AI till Tensor Cores, dessa är systoliska matriser som består av 16-bitars flytpunkts-ALU: er sammankopplade med varandra i en treaxlig matris, därav enhetsnamnet. Tensor. De är inte SIMD-enheter, men var och en av deras ALU stöder SIMD över register genom att kunna utföra dubbelt så många operationer med 8-bitars precision och fyra gånger med 4-bitars precision. I vilket fall som helst är Tensorenheter viktiga eftersom de är utformade för att påskynda matris-till-matrisoperationer med mycket högre hastighet än med en SIMD-enhet.