TRIPS arkitektur

Processor TRIPS.

TRIPS var en mikroprocessorarkitektur designad av ett team vid University of Texas i Austin i samarbete med IBM , Intel och Sun Microsystems . TRIPS använder en instruktionsuppsättningsarkitektur utformad för att lätt kunna delas upp i stora grupper av instruktioner (grafer) som kan köras på oberoende bearbetningselement. Designen samlar in relaterade data i graferna, försöker undvika dyra dataläsningar och skrivningar och håller data i höghastighetsminne nära bearbetningselementen. Prototypen TRIPS-processor innehåller 16 sådana element. TRIPS hoppades på att nå 1 TFLOP på en enda processor, eftersom tidningar publicerades från 2003 till 2006.

Bakgrund

Datorprogram består av en serie instruktioner lagrade i minnet. En processor kör ett program genom att hämta dessa instruktioner från minnet, undersöka dem och utföra de åtgärder som instruktionen kräver.

I tidiga maskiner var hastigheten på huvudminnet i allmänhet i samma tidsordning som en grundläggande operation inom processorn. Till exempel kan en instruktion som lägger till två siffror ta tre eller fyra instruktionscykler , medan att hämta numren från minnet kan ta en eller två cykler. I dessa maskiner fanns det inget straff för data som fanns i huvudminnet, och instruktionsuppsättningsarkitekturerna var i allmänhet utformade för att tillåta direkt åtkomst, till exempel kan en add-instruktion ta ett värde från en plats i minnet, lägga till det till värdet från en annan och lagra sedan resultatet på en tredje plats.

Införandet av allt snabbare mikroprocessorer och billigt men långsammare dynamiskt RAM förändrade denna ekvation dramatiskt. I moderna maskiner kan hämtning av ett värde från huvudminnet ta motsvarande tusentals cykler. En av de viktigaste framstegen i RISC -konceptet var att inkludera fler processorregister än tidigare konstruktioner, vanligtvis flera dussin snarare än två eller tre. Instruktioner som tidigare tillhandahölls minnesplatser eliminerades, ersattes av sådana som bara fungerade på register. Att ladda dessa uppgifter i registret var explicit; en separat laddningsåtgärd måste utföras, och resultaten sparades uttryckligen tillbaka. Man skulle kunna förbättra prestandan genom att eliminera så många av dessa minnesinstruktioner som möjligt. Denna teknik nådde snabbt sina gränser, och sedan 1990-talet har moderna processorer lagt till ökande mängder CPU-cache för att öka lokal lagring, även om cachen är långsammare än register.

Sedan slutet av 1990-talet har prestandavinsterna mestadels skett genom användning av ytterligare "funktionella enheter", som gör att vissa instruktioner kan köras parallellt. Till exempel kan två ytterligare instruktioner som arbetar på olika data köras samtidigt, vilket effektivt fördubblar programmets hastighet. Moderna processorer har i allmänhet dussintals sådana enheter, några för heltalsmatematik och boolesk logik, några för flyttalsmatte, några för långa dataord och andra för att hantera minne och andra hushållssysslor. De flesta program fungerar dock inte på oberoende data utan använder istället utdata från en beräkning som indata till en annan. Detta begränsar uppsättningen instruktioner som kan köras parallellt till någon faktor baserat på hur många instruktioner processorn kan undersöka i farten. Nivån av instruktionsparallellism platåerades snabbt i mitten av 2000-talet.

Ett försök att bryta sig ur denna gräns är konceptet med mycket långa instruktionsord ( VLIW). VLIW ger uppgiften att leta efter instruktionsparallellism till kompilatorn och tar bort den från själva processorn. I teorin gör detta att hela programmet kan granskas för oberoende instruktioner, som sedan kan skickas till processorn i den ordning som kommer att utnyttja de funktionella enheterna maximalt. Detta har dock visat sig vara svårt i praktiken och VLIW-processorer har inte blivit särskilt populära.

Även i fallet med VLIW har ett annat problem vuxit till att bli ett problem. I alla traditionella konstruktioner hanteras data och instruktioner av olika delar av CPU:n. När bearbetningshastigheterna var låga orsakade detta inga problem, men när prestandan ökade växte kommunikationstiderna från ena sidan av chippet (registren) till den andra (de funktionella enheterna) till att bli en betydande del av den totala bearbetningstiden. För ytterligare prestandavinster bör registren fördelas närmare sina funktionella enheter.

KANT

TRIPS är en processor baserad på konceptet Explicit Data Graph Execution (EDGE). EDGE försöker kringgå vissa prestandaflaskhalsar som har kommit att dominera moderna system.

EDGE bygger på att processorn bättre kan förstå instruktionsströmmen som skickas till den, inte se den som en linjär ström av individuella instruktioner, utan snarare block av instruktioner relaterade till en enskild uppgift med hjälp av isolerade data. EDGE försöker köra alla dessa instruktioner som ett block och distribuerar dem internt tillsammans med all data de behöver bearbeta. Kompilatorerna undersöker koden och hittar kodblock som delar information på ett specifikt sätt. Dessa sätts sedan ihop till kompilerade "hyperblock" och matas in i CPU:n. Eftersom kompilatorn garanterar att dessa block har specifika ömsesidiga beroenden mellan sig, kan processorn isolera koden i en enda funktionell enhet med sitt eget lokala minne.

Tänk på ett enkelt exempel som lägger till två tal från minnet och sedan adderar det resultatet till ett annat värde i minnet. I det här fallet skulle en traditionell processor behöva lägga märke till beroendet och schemalägga instruktionerna att köras efter varandra, och lagra mellanresultaten i registren. I en EDGE-processor skulle det ömsesidiga beroendet mellan data i koden uppmärksammas av kompilatorn, som skulle kompilera dessa instruktioner till ett enda block. Det blocket skulle sedan matas in, tillsammans med all data det behövde för att slutföra, till en enda funktionell enhet och sin egen privata uppsättning register. Detta säkerställer att ingen ytterligare minneshämtning krävs, samt att hålla registren fysiskt nära den funktionella enhet som behöver dessa värden.

Kod som inte förlitade sig på dessa mellanliggande data skulle kompileras till separata hyperblock. Naturligtvis är det möjligt att ett helt program skulle använda samma data, så kompilatorerna letar också efter fall där data överförs till annan kod och sedan effektivt överges av det ursprungliga blocket, vilket är ett vanligt åtkomstmönster. I det här fallet kommer kompilatorn fortfarande att producera två separata hyperblock, men explicit koda överlämningen av data istället för att bara lämna den lagrad på någon delad minnesplats. Genom att göra så kan processorn "se" dessa kommunikationshändelser och schemalägga dem att köras i rätt ordning. Block som har avsevärda ömsesidiga beroenden arrangeras om av kompilatorn för att sprida ut kommunikationen för att undvika flaskhalsar i transporten.

Effekten av denna förändring är att avsevärt öka isoleringen av de enskilda funktionella enheterna. EDGE-processorer är begränsade i parallellitet av kompilatorns möjligheter, inte on-chip-systemen. Medan moderna processorer når en platå med fyra bred parallellitet, kan EDGE-designer skala ut mycket bredare. De kan också skala "djupare" genom att lämna över block från en enhet till en annan i en kedja som är planerad att minska konflikten på grund av delade värderingar.

RESOR

University of Texas i Austins implementering av EDGE-konceptet är TRIPS- processorn, Tera-op, Reliable, Intelligently adaptive Processing System . En TRIPS CPU byggs genom att en enda grundläggande funktionsenhet upprepas så många gånger som behövs. TRIPS-designens användning av hyperblock som laddas en-masse tillåter dramatiska vinster i spekulativt utförande . Medan en traditionell design kan ha några hundra instruktioner att undersöka för eventuell schemaläggning i de funktionella enheterna, har TRIPS-designen tusentals, hundratals instruktioner per hyperblock och hundratals hyperblock som undersöks. Detta leder till avsevärt förbättrad funktionell enhetsutnyttjande; Genom att skala sin prestanda till en typisk superskalärdesign med fyra nummer kan TRIPS bearbeta ungefär tre gånger så många instruktioner per cykel.

I traditionella konstruktioner finns det en mängd olika typer av enheter, heltal, flyttal, etc., vilket tillåter mer parallellitet än de fyra breda schemaläggarna annars skulle tillåta. Men för att hålla alla enheter aktiva måste instruktionsströmmen inkludera alla dessa olika typer av instruktion. Eftersom detta ofta inte är fallet i praktiken har traditionella CPU:er ofta många lediga funktionella enheter. I TRIPS är de individuella enheterna generella, vilket gör att alla instruktioner kan köras på vilken kärna som helst. Detta undviker inte bara behovet av att noggrant balansera antalet olika typer av kärnor, utan det betyder också att en TRIPS-design kan byggas med valfritt antal kärnor som behövs för att uppnå ett visst prestandakrav. En enkelkärnig TRIPS CPU, med en förenklad (eller eliminerad) schemaläggare kommer att köra en uppsättning hyperblock exakt som en med hundratals kärnor, bara långsammare.

Ännu bättre, prestandan är inte beroende av vilken typ av data som matas in, vilket innebär att en TRIPS CPU kommer att köra ett mycket bredare utbud av uppgifter på samma prestandanivå. Till exempel, om en traditionell CPU matas med en matematiktung arbetsbörda, kommer den att försvinna så fort alla flyttalsenheter är upptagna, med heltalsenheterna vilande. Om den matas med ett dataintensivt program som ett databasjobb, kommer flyttalsenheterna att ligga inaktiva medan heltalsenheterna försvinner. I en TRIPS CPU kommer varje funktionell enhet att öka prestandan för varje uppgift, eftersom varje uppgift kan köras på varje enhet. Designerna hänvisar till som en "polymorf processor".

TRIPS är så flexibelt i detta avseende att utvecklarna har föreslagit att det till och med skulle ersätta vissa anpassade höghastighetsdesigner som DSP:er . Precis som TRIPS får DSP:er ytterligare prestanda genom att begränsa databeroenden, men till skillnad från TRIPS gör de det genom att endast tillåta ett mycket begränsat arbetsflöde på dem. TRIPS skulle vara lika snabb som en anpassad DSP på dessa arbetsbelastningar, men lika mycket kunna köra andra arbetsbelastningar samtidigt. Som formgivarna har noterat är det osannolikt att en TRIPS-processor skulle kunna användas för att ersätta högt anpassade mönster som GPU:er i moderna grafikkort , men de kanske kan ersätta eller överträffa många kretsar med lägre prestanda som de som används för mediebearbetning.

Minskningen av den globala registerfilen resulterar också i icke uppenbara vinster. Tillägget av nya kretsar till moderna processorer har inneburit att deras totala storlek har förblivit ungefär densamma även när de går över till mindre processstorlekar. Som ett resultat har det relativa avståndet till registerfilen ökat, och detta begränsar den möjliga cykelhastigheten på grund av kommunikationsförseningar. I EDGE är data generellt mer lokal eller isolerad i väldefinierade länkar mellan kärnor, vilket eliminerar stora "cross-chip"-fördröjningar. Detta innebär att de enskilda kärnorna kan köras med högre hastigheter, begränsade av signaleringstiden för de mycket kortare datavägarna.

Kombinationen av dessa två designändringseffekter förbättrar systemets prestanda avsevärt. Målet är att producera ett system med en processor med 1 TFLOPs prestanda till 2012. Från och med 2008 har GPU:er från ATI och NVIDIA redan överskridit 1 teraflop-barriären (om än för specialiserade applikationer). När det gäller traditionella processorer kan en modern (2007) Mac Pro som använder en 2-kärnig Intel Xeon endast utföra cirka 5 GFLOPs på enstaka applikationer.

2003 började TRIPS-teamet implementera ett prototypchip. Varje chip har två kompletta kärnor, var och en med 16 funktionella enheter i fyra breda, fyra djupa arrangemang. I den nuvarande implementeringen konstruerar kompilatorn "hyperblock" med 128 instruktioner vardera, och tillåter systemet att hålla åtta block "in flight" samtidigt, för totalt 1 024 instruktioner per kärna. Den grundläggande designen kan inkludera upp till 32 chips sammankopplade, närmar sig 500 GFLOPS.