Abstract-This paper beskriver och utvärderar lösningar på det exakta avbryta problemet i piped processorer. Ett avbrott är exakt om det sparade processtillståndet motsvarar en sekventiell modell av programutförande där en instruktion slutförs innan nästa börjar. I en piped processor, exakta avbrott är svåra att genomföra eftersom en instruktion kan initieras innan dess föregångare har slutfört. Det exakta avbrottsproblemet beskrivs och fem lösningar diskuteras i detalj. Den första lösningen tvingar fram instruktioner för att komplettera och modifiera processtillståndet i arkitektonisk ordning. De övriga fyra lösningarna tillåter instruktioner att fylla i i valfri ordning, men ytterligare hårdvara används så att ett exakt tillstånd kan återställas när ett avbrott inträffar. Alla metoder diskuteras i samband med en parallell rörledningsstruktur. Simuleringsresultat baserade på CRAY-1s skalararkitektur används för att visa att den första lösningen resulterar i en prestandanedbrytning på minst 16 procent. De återstående fyra lösningarna erbjuder bättre prestanda, och tre av dem resulterar i så lite som en 3 procents prestandaförlust. Flera tillägg, inklusive vektorarkitekturer, virtuellt minne och linjära rörledningsstrukturer, diskuteras kortfattat. Index Terms-Performance simulering, rörledning datorer, exakta avbrott, processkontroll, processåterställning, virtuellt minne. OST-datorarkitekturer är baserade på en sekventiell M-modell av programutförande där ett arkitektoniskt program räknar sekvenser genom instruktioner en efter en, avslutar en innan du börjar nästa. Däremot kan ett högpresterande genomförande genomföras, vilket gör det möjligt för flera instruktioner att vara i någon fas av genomförandet samtidigt. Användningen av en sekventiell arkitektur och en piped implementation kolliderar vid tidpunkten för ett avbrott; rörformade instruktioner kan ändra processtillståndet i en annan ordning än den som definieras av den sekventiella arkitektoniska modellen. Vid den tidpunkt ett avbryta villkor upptäcks, hårdvaran får inte vara i ett tillstånd som överensstämmer med någon specifik program motvärde. När ett avbrott inträffar sparas vanligtvis tillståndet för en avbruten process av hårdvaran, programvaran eller av en kombination av de två. Processtillståndet består i allmänhet av programräknare, register och minne. Om det sparade processtillståndet är förenligt med det sekventiella arkitektoniska manuskriptet' mottaget 23 mars 1986. Detta arbete stöds av den nationella vetenskapsstiftelsen inom ramen för bidrag ECS-8207277. J modell, då avbrottet är exakt. För att vara mer specifik bör det sparade tillståndet återspegla följande villkor. 1) Alla instruktioner som föregår den instruktion som visas av den sparade programräknaren har verkställts och har ändrat processtillståndet korrekt. 2) Alla instruktioner som följer instruktionerna som visas av den sparade programräknaren är oexekverade och har inte ändrat processtillståndet. 3) Om avbrottet orsakas av ett undantagstillstånd som höjs av en instruktion i programmet, pekar den sparade programräknaren på den avbrutna instruktionen. Den avbrutna instruktionen kan ha utförts eller inte, beroende på definitionen av arkitekturen och orsaken till avbrottet. I vilket fall som helst har den avbrutna instruktionen antingen fullföljt eller inte påbörjat verkställigheten. Om det sparade processtillståndet är oförenligt med den sekventiella arkitektoniska modellen och inte uppfyller ovanstående villkor är avbrottet otydligt. I detta dokument beskrivs och jämförs olika sätt att genomföra exakta avbrott i rörledningsprocessorer. De metoder som används är utformade för att ändra tillståndet för en verkställande process på ett noggrant kontrollerat sätt. De enkla metoderna tvingar alla instruktioner att uppdatera processtillståndet i arkitektonisk ordning. Andra, mer komplexa metoder sparar delar av processtillståndet så att rätt tillstånd kan återställas av hårdvaran när ett avbrott inträffar. Vi överväger att avbrytande av två klasser. 1) Program avbryter, ibland kallade " fällor ", till följd av undantagsförhållanden som upptäcks under hämtandet och verkställandet av specifika instruktioner. Dessa undantag kan bero på programvara fel såsom att försöka köra en olaglig opcode, numeriska fel såsom överflödet, eller de kan vara en del av normalt program exekvering som med sidfel. 2) Externa avbrott orsakas inte av specifika instruktioner och orsakas ofta av källor utanför den pågående processen, ibland helt orelaterade till den. I/O-avbrott och timeravbrott är exempel. För en specifik arkitektur kan alla avbrott definieras som exakta eller endast en lämplig delmängd. Så gott som varje arkitektur har dock vissa typer av avbrott som måste vara exakta. Det finns ett antal villkor under vilka exakta avbrott är antingen nödvändiga eller önskvärda. 1) För I/O- och timeravbrott möjliggör en exakt processtillstånd omstart. 2) I virtuella minnessystem tillåter exakta avbrott att en process startas om på rätt sätt efter att ett sidfel har servats. OO18-9340/88/05OO-0562$01 0 1988 IEEE SMITH OCH PLESZKUN: GENOMFÖRANDE INTERRUPER I PIPELINED PROCESSORS 3) För avlusning av programvara är det önskvärt att det sparade tillståndet är exakt. Denna information kan vara till hjälp när det gäller att isolera de exakta instruktioner och omständigheter som orsakade undantagstillståndet. 4) För graciös återhämtning från aritmetiska undantag, programvara rutiner kan kunna vidta åtgärder, skala flyttal nummer till exempel, för att tillåta en process att fortsätta. Vissa ändfall med modemflytpunktsaritmetiska system kan bäst hanteras med programvara, t.ex. gradvis underflöde i den föreslagna IEEE-flytpunktsstandarden [15]. 5) Oimplementerade opcodes kan simuleras med systemprogramvara på ett sätt som är transparent för programmeraren om avbrotten är exakta. På så sätt kan lägre prestandamodeller av en arkitektur upprätthålla kompatibilitet med högre prestandamodeller med hjälp av utökade instruktionsuppsättningar. 6) Virtuella maskiner kan implementeras om privilegierade instruktioner fel orsakar exakta avbrott. Värdprogramvaran kan simulera dessa instruktioner och återgå till gästoperativsystemet på ett användartransparent sätt. Det exakta avbrottsproblemet är lika gammalt som de första pipelinedatorerna [5]. IBM 360/91 [3] var en välkänd dator som under vissa omständigheter orsakade oprecisa avbrott, till exempel undantag från flyttal. Impactise avbrott var en paus med IBM 360 arkitektur som gjorde dem ännu mer märkbara. Efterföljande IBM 360 och 370 implementationer har använt mindre aggressiv pipeline design där instruktioner modifiera processtillståndet i strikt programordning, och avbrott är exakta." En mer fullständig beskrivning av den metod som används i dessa "linjära" pipelineimplementeringar finns i avsnitt VIII-D. De flesta piped implementationer av allmänna ändamål arkitekturer liknar dem som används av IBM. Dessa rörledningar begränsar alla instruktioner för att passera genom rörledningen i ett skede i slutet där undantagsvillkoren kontrolleras innan processtillståndet ändras. Exempel är Amdahl 470 och 580 [l], [2] och Gould/SEL 32/87 [17]. Den högpresterande CDC 6600 [16], CDC 7600 [4], och Cray Research [8], [14] datorer tillåter instruktioner för att komplettera av arkitektursekvensen. Följaktligen har de vissa undantagsvillkor som leder till oprecisa avbrott. I dessa maskiner har fördelarna med exakta avbrott offrats till förmån för maximal parallellism och design enkelhet. I/O-avbrott i dessa maskiner är exakta, och de implementerar inte virtuellt minne. CDC STAR-100 [ l] och CYBER 200 [7]-serien gör det också möjligt för instruktioner att fylla i ur funktion, och de stöder virtuellt minne. I dessa maskiner komplicerar användningen av vektorinstruktioner ytterligare problemet. Den lösning som slutligen nåddes var tillägg av ett osynligt utbytespaket [7]. Det osynliga utbytespaketet finns i minnet och fångar maskinberoende tillståndsinformation till följd av delvis ifyllda instruktioner. A 'Med undantag för modellerna 95 och 195 som härleddes från den ursprungliga modellen 91 design. Modellerna 85 och 165 hade dessutom oprecisa avbrott i fråga om undantag från skyddet och med avseende på undantag som orsakats av lagerverksamhet. relaterat tillvägagångssätt används i rörledningsmatrisprocessorer [9] som innehåller instruktioner som gör det möjligt för avbrytarna att uttryckligen dumpa och återställa innehållet i vissa rörledningssegment. En liknande metod har föreslagits för MIPS [lo] där rörledningsinformation dumpas vid tidpunkten för ett avbrott och återförs till rörledningen när processen återupptas. Denna lösning gör en process omstartbar även om det är tveksamt om den har alla funktioner och fördelar med ett arkitektoniskt exakt avbrytande. Till exempel kan det vara nödvändigt att ha implementationsberoende programvara sålla genom maskinberoende tillstånd för att ge fullständig felsökningsinformation. Den nyligen aviserade CDC CYBER 180/990 [6] är en piped implementation av en ny arkitektur som stöder virtuellt minne, och erbjuder ungefär samma prestanda som en CRAY-1s. För att ge exakta avbrott använder CYBER 180/ 990 en historikbuffert, som ska beskrivas senare i detta dokument, där tillståndsinformation sparas precis innan den ändras. När ett avbrott inträffar används denna "historia"-information för att säkerhetskopiera systemet till ett exakt tillstånd. Detta dokument koncentrerar sig på att förklara och diskutera grundläggande metoder för att genomföra exakta avbrott i rörformiga processorer. Vi betonar skalära arkitekturer (i motsats till vektorarkitekturer) på grund av deras tillämplighet på ett bredare utbud av maskiner. I avsnitt I1 definieras den modellarkitektur som ska användas för att beskriva exakta avbrottsimplementeringar. Modellarkitekturen är mycket enkel så att grunderna i metoderna tydligt kan beskrivas. Avsnitt 111-VI innehåller metoder för att genomföra exakta avbrott. I avsnitt I11 beskrivs en enkel metod som är lätt att implementera, men som minskar prestandan. I avsnitt IV beskrivs en högre prestandavariation där resultaten kan förbigås till andra instruktioner innan resultaten används för att ändra processtillståndet. I avsnitten V och VI beskrivs metoder där instruktioner får fyllas i i valfri ordning, men där tillståndsinformation sparas så att ett exakt tillstånd kan återställas när ett avbrott inträffar. I avsnitt VI1 presenteras simuleringsresultat. Experimentella resultat baserade på dessa CRAY-1 S-simuleringar presenteras och diskuteras. Avsnitt VI11 innehåller en kort diskussion om 1) att spara ytterligare tillståndsinformation, 2) att stödja virtuellt minne, 3) exakta avbrott när en datacache används, 4) linjära rörledningsstrukturer och 5) vektorinstruktioner. I avsnitt IX diskuteras slutligen olika sätt att lösa det exakta avbrytandet av problemet på ett arkitektoniskt sätt snarare än i genomförandet. Dessa metoder bygger på en arkitektonisk modell som är parallell istället för sekventiell. PRELIMINARIER För att beskriva de olika teknikerna väljs en modellarkitektur så att de grundläggande metoderna inte fördunklas av detaljer och onödiga komplikationer orsakade av en specifik arkitektur. Vi väljer en register-registerarkitektur där alla minnesåtkomster sker genom register och all funktionell verksamhet omfattar register. I detta avseende har det en viss likhet med 564 CDC- och Cray-arkitekturerna, men har bara en uppsättning register. Lastinstruktionerna är av formen Ri = (Rj + disp). Det vill säga, innehållet i register Rj plus en deplacement ges i instruktionen läggs till för att bilda en effektiv adress. Innehållet i den adresserade minnesplatsen laddas in i register Ri. På samma sätt är en butik av blanketten (Rj + disp) = Ri, där register Ri lagras på den adress som hittas genom att lägga till innehållet i register Rj och en deplacement. De funktionella anvisningarna är av formen Ri = R j op R k, där op är den operation som utförs. För unary-operationer används den degenererade formen Ri = op Rk. Villkorliga instruktioner är av blanketten P = disp:Ri op R j, där P är programräknaren, disp är adressen till grenens mål, och op är en relationell operatör, =, >, <, etc. Det enda processtillståndet i modellarkitekturen består av programräknaren, de allmänna ändamålsregistren och huvudminnet. Arkitekturen är enkel, har en minimal mängd processtillstånd, kan enkelt piped, och kan genomföras på ett enkelt sätt med parallella funktionella enheter som CDC och Cray arkitekturer. Inledningsvis antar vi att det inte finns någon operationscache. På samma sätt används inte tillståndskoder. De lägger till andra problem utöver precisa avbrott när ett rörligt genomförande används. Utökningar för operandcache och tillståndskoder diskuteras i avsnitt VIII. En parallell pipelineimplementation för den enkla arkitekturen visas i bild. 1................................................................ Den använder en instruktion hämta / avkoda rörledning som behandlar instruktioner i ordning. Det sista steget i rörledningen för hämta/avkoda är ett problemregister där alla villkor för att registrera interlock kontrolleras. Om det inte finns några registerkonflikter, utfärdar en instruktion till en av de parallella funktionella enheterna. Här implementeras funktionen för minnesåtkomst som en av de funktionella enheterna. Operantregistren läses då en instruktionsutgåva. Det finns en enda resultatbuss som returnerar resultat till registerfilen. Denna buss kan reserveras vid den tidpunkt då en instruktion utfärdas eller när en instruktion närmar sig fullbordan. Detta förutsätter att de funktionella enhetstiderna är deterministiska. En ny instruktion kan ge ut varje klockperiod i frånvaro av register eller resultat buss konflikter. Om inget annat anges, den parallella rörledningsstrukturen i Bild. Jag används i den här tidningen. Exempel 1: För att visa hur ett oprecist processtillstånd kan uppstå i vår modellarkitektur, överväga följande avsnitt av kod som summerar elementen i array A och B i array C. Överväg instruktionerna i uttalanden 6 och 7. Även om heltal lägga till vilka ökningar slingan räknas kommer att utfärdas efter flyttal lägga till, det kommer att slutföra innan flyttal lägga till. Det heltal lägga till kommer därför att ändra processtillståndet innan ett överlopp tillstånd upptäcks i flyttal lägga till. I händelse av ett sådant överflöd finns det ett oprecist avbrott. Innan vi fortsätter med de olika exakta avbrytandemetoderna, överväger vi först iflterrupts som inträffar före instruktionsutgåvan eftersom de hanteras på samma sätt av alla metoder. I samband med genomförandet av bild. 1, Instruktioner stanna i följd tills den tid de utfärdas. Dessutom ändras processtillståndet inte av en instruktion innan det ges ut. Detta gör exakt avbryter en enkel sak när ett undantag villkor kan upptäckas före utfärdandet. Exempel på sådana undantag är privilegierade undervisningsfel och icke genomförda instruktioner. Denna klass omfattar även externa avbrott som kan kontrolleras vid utfärdandestadiet. När ett sådant avbrott upptäcks stoppas instruktionsgivningen. Sedan finns det en väntan medan alla tidigare utfärdade instruktioner är färdiga. När de är klara, processen är i ett exakt tillstånd, med programräknaren värde motsvarande den instruktion som hålls i frågan Eftersom undantag förhållanden som upptäcks före instruktion kan hanteras enkelt som beskrivs ovan, kommer vi inte att överväga dem ytterligare. Vi kommer i stället att koncentrera oss på undantagsvillkor som upptäcks efter det att undervisningen getts ut. Med denna metod modifierar instruktionerna processtillståndet endast när alla tidigare utfärdade instruktioner är kända för att vara fria från undantagsvillkor. I detta avsnitt beskrivs en strategi som är lättast att genomföra när förseningar i rörledningen i de parallella funktionella enheterna är fasta. Det vill säga, de är inte beroende av operanderna, bara av funktionen. Resultatet buss kan därför reserveras vid tidpunkten för utfärdandet. För det första anser vi att en metod som vanligen används för att kontrollera den rörledningsorganisation som visas i bild. 1................................................................ Denna metod kan användas oavsett om exakta avbrott ska genomföras. De exakta avbrytandemetoder som beskrivs i detta dokument är dock integrerade i denna grundläggande kontrollstrategi. För att styra resultatbussen används ett "resultatskiftesregister", se bild. 2............................................................... Här är stegen märkta 1 till n, där n är längden på den längsta funktionella enheten rörledning. En instruktion som tar i klockperioder reserverar steg i i resultatet skiftregister vid den tidpunkt den utfärdar. Om stadiet redan innehåller giltig kontrollinformation hålls frågan kvar till nästa klockperiod, och stadiet i kontrolleras igen. En utfärdande instruktion placerar kontrollinformation i resultatskiftsregistret. Denna kontrollinformation identifierar den funktionella enhet som ska tillhandahålla resultatet och destinationsregistret för resultatet. Denna kontrollinformation är också markerad "giltig" med en viss giltighet. Varje klockperiod flyttas kontrollinformationen ner ett steg mot ett steg. När den når första stadiet. Det används under nästa klockperiod för att styra resultatbussen så att det funktionella tills resultatet placeras i rätt resultatregister. Fortfarande bortse från exakta avbrott, är det möjligt att en kort instruktion placeras i resultatet pipeline i steg i när tidigare utfärdade instruktioner är i steg j, j > i. Detta leder till instruktioner som avslutar den ursprungliga programsekvensen. Om instruktionen på stadium j så småningom stöter på ett undantag villkor, avbrottet kommer att vara otydlig eftersom instruktionen placeras i steg jag kommer att slutföra och ändra processen tillstånd även om den sekventiella arkitektur modellen säger att jag inte börjar förrän j avslutar. Exempel 2: Om man betraktar den del av koden som presenteras i Exempel 1, och ett initialt tomt resultat skiftregister (alla poster ogiltiga), flyttal lägga skulle placeras i steg 6 medan heltal lägga skulle placeras i steg 2. Resultatet skiftregisterposter visas i Bild. 2 reflektera tillståndet i resultatet skift registret efter heltal lägga till frågor. Observera att flyttal lägga till post är i steg 5 sedan en klocka period har passerat sedan den utfärdade. Som beskrivits ovan leder denna situation till instruktioner som avslutar den ursprungliga programsekvensen. För att genomföra exakta avbrott med avseende på register med hjälp av ovanstående ledningskontrollstruktur, bör en utfärdande struktur med hjälp av steg j "reservera" steg i < j samt steg j. Det vill säga, de steg i < j som inte tidigare reserverats av andra instruktioner är reserverade, och de är laddade med noll kontrollinformation så att de inte påverkar processtillståndet. Detta garanterar att instruktionerna om ändring av registren avslutas i ordning. Det finns logik på resultatet buss som kontrollerar för undantag villkor i instruktioner som de kompletterar. Om en instruktion innehåller ett nonmasked undantag villkor, sedan kontrollera logik "avbryter" alla efterföljande instruktioner som kommer på resultatet bussen så att de inte ändrar processtillståndet. Exempel 3: För vårt urval avsnitt av kod som anges i Exempel 1, förutsatt att resultatet skiftregister är initialt tom, en sådan policy skulle ha flytta punkten lägga till instruktion reserv steg 1-6 i resultatet skift register. När, på nästa klockcykel, heltal lägga är i utfärdande registret, är det förbjudet att utfärda eftersom steg 2 redan är reserverad. Således, heltal lägga måste vänta i utfärdande skedet tills steg 2 i resultatet skift registret är inte längre reserverad. Detta skulle vara fem klockperioder efter utfärdandet av flyttalstillägget. En generalisering av denna metod är att, om möjligt, bestämma att en instruktion är fri från undantagsförhållanden innan den är fullständig. Endast resultatskiftesregister som kommer att avslutas innan undantag upptäcks behöver reserveras (utöver det steg som faktiskt kontrollerar resultatet). Lagra instruktioner ändra den del av processtillståndet som finns i huvudminnet. För att genomföra exakta avbrott med avseende på minne, är en lösning att tvinga butiksinstruktioner att vänta på resultatet skiftregister att vara tom innan de får utfärda. Alternativt kan förråd utfärdas och hållas i last-/lagerledningen tills alla tidigare instruktioner är kända för att vara undantagsfria. Då kan butiken släppas till minnet. För att genomföra det andra alternativet, kom ihåg att minnet kan behandlas som en speciell funktionell enhet. Som med alla andra instruktioner, kan butiken göra en notering i resultatet skiftregister. Denna post definieras som ett overksamt lager. Den dummy lagra orsakar inte ett resultat för att placeras i registerfilen, men används för att styra minne pipeline. Den dummy butiken placeras i resultatet skiftregister så att det inte kommer att nå steg ett tills butiken är känd för att vara undantagsfri. När provdockan lagrar steg ett har alla tidigare instruktioner fyllts i utan undantag, och en signal skickas till last-/lagerenheten för att frigöra butiken till minnet. Om själva butiken innehåller ett undantagstillstånd ställs butiken in, alla följande last-/lagerinstruktioner ställs in, och butiken f-enheten signalerar rörledningskontrollen så att alla instruktioner som utfärdas efter affären ställs in när de lämnar rörledningen. För att genomföra exakta avbrott med avseende på programräknaren, breddas resultatet skiftregister till att omfatta ett fält för programräknaren för varje instruktion (se bild. 2 )............................................................................................................... Detta fält fylls i som instruktionsfrågor. När en instruktion med undantagsvillkor visas på resultatbussen, är dess programräknare tillgänglig och blir en del av det sparade tillståndet. I.8 Förnyelse av bilaga I till förordning (EU) nr 1094/2010 och bilaga II till förordning (EU) nr 1094/2010, bilaga III till förordning (EU) nr 1094/2010, bilaga III till förordning (EU) nr 1094/2010, bilaga III till förordning (EU) nr 1094/2010, bilaga III till förordning (EU) nr 1094/2010 och bilaga III till den här förordningen. REORDER BUFFER Den främsta nackdelen med ovanstående metod är att snabba instruktioner ibland fastnar i registret även om de inte har några beroenden och annars skulle utfärda. Dessutom blockerar de utgivningsregistret, medan långsammare instruktioner bakom dem kan komma att utfärdas. Detta leder oss till en mer komplex, men mer allmän lösning. Instruktioner är tillåtna att avsluta ur ordning, men en särskild buffert som kallas omordning buffert används för att omordna dem innan de ändrar processtillståndet. Den övergripande organisationen visas i bild. 3 a............................................................... Ordna om bufferten, bild. 3 b), är en cirkulär buffert med huvud och svans pekare. Poster mellan huvud och svans anses vara giltiga. När en instruktion utfärdar, nästa tillgängliga omordning buffertpost, pekas på av svans pekaren, ges till utfärdande instruktion. Stjärtpekarvärdet används som en tagg för att identifiera posten i bufferten som är reserverad för instruktionen. Taggen placeras i resultatskiftsregistret tillsammans med övriga kontrolluppgifter. Stjärtpekaren ökas sedan, modulerar buffertstorleken. Resultatet skiftregister skiljer sig från den som användes tidigare eftersom det finns ett fält som innehåller en omordning tagg i stället för ett fält som anger ett målregister. När en instruktion är klar skickas både resultat- och undantagsvillkor till orderbufferten. Taggen från resultatet skiftregister används för att vägleda dem till rätt ordning buffertpost. När posten i toppen av orderbufferten innehåller giltiga resultat (instruktionen är klar) kontrolleras dess undantag. Om det inte finns några, skrivs resultaten in i registren. Om ett undantag upptäcks stoppas problemet som förberedelse för avbrottet, och alla ytterligare skriver in i registerfilen hämmas. Exempel 4: Posterna i ordningens buffert- och resultatskiftesregister visas i bild. 3 b) återspegla deras tillstånd efter heltal lägga från exempel 2 har utfärdat. Observera att posterna i bytesregistret är mycket lika dem i figuren. 2............................................................... Det heltal lägga till kommer att slutföra genomförandet innan flyttal lägga till och dess resultat kommer att placeras i post 5 av orderbufferten. Dessa resultat kommer dock inte att skrivas in i RO förrän flyttal resultatet, som finns i post 4, har placerats i R 4. Exaktheten i fråga om minnet bibehålls på ett liknande sätt som i ordningen för iordningställande (avsnitt 111-B). Den enklaste metoden håller butiker i utgivningsregistret tills alla tidigare instruktioner är kända för att vara fria från undantag. I den mer komplexa metoden skickas en butikssignal till minnesledningen som en "dummy" butik tas bort från orderbufferten. Butiker tillåts att utfärda, och blockera i butiken rörledningen innan de är engagerade i minnet medan de väntar på sin dummy motsvarighet. För att bibehålla exaktheten med avseende på programräknaren kan programräknaren skickas till ett reserverat utrymme i omordningsbufferten vid utropstidpunkten [visas i bild. 3 b )............................................................................................................ Medan programräknaren kan skickas till resultat skiftregister, förväntas det att resultatet skiftregister kommer att innehålla fler steg än orderbufferten och därmed kräva mer hårdvara. Förskjutningsregistrets längd måste vara så lång som det längsta rörledningsstadiet. Som framgår av avsnitt VII kan antalet poster i omordningsbufferten vara ganska litet. När en instruktion anländer till toppen av orderbufferten med undantag tillstånd, blir programräknaren som finns i orderposten en del av det sparade exakta tillståndet. SMITH OCH PLESZKUN: GENOMFÖRANDE AV INTERRUPTER I PIPELINED PROCESSORS 567 Medan en förbättring jämfört med den metod som beskrivs i avsnitt 111, utsätts omordningsbufferten fortfarande för en prestationspåföljd. Ett beräknat resultat som genereras ur ordern hålls i orderbufferten tills tidigare instruktioner, som avslutas senare, har uppdaterat registerfilen. En instruktion som är beroende av att ett resultat hålls i orderbufferten kan inte utfärdas förrän resultatet har skrivits in i registerfilen. Den nya ordningen buffertmetoden kan dock ändras för att minimera några av nackdelarna med att avsluta strikt i ordning. För att resultaten ska kunna användas på ett tidigt stadium kan förbifartsvägar tillhandahållas från posterna i omordningsbufferten till registerfilens utgångslås, se bild. 4........................................... Dessa vägar gör det möjligt att använda data i omordningsbufferten i stället för registerdata. Tillämpningen av denna metod kräver jämförelse för varje omordningsbuffertsteg och operand designator. Om en operand register designator av en instruktion som kontrolleras för utfärdande matchar en register designator i reorder bufferten, då en multiplexer är inställd på att grind data från reorder buffert till registret utdata spärr. I avsaknad av andra villkor för emissionsblockering tillåts instruktionen att utfärda, och uppgifterna från omordningsuppgifterna används innan de skrivs in i registerfilen. Det kan finnas förbifartsvägar från vissa eller alla omordning buffertposter. Om det finns flera förbifartsvägar är det möjligt att fler än en bestämmelsepost i omordningsbufferten motsvarar ett enda register. Det är tydligt att endast den senaste ordningen buffertpost som motsvarar en operand designator bör generera en bypass sökväg till registret utdata spärr. För att förhindra flera förbikopplingar av samma register, när en instruktion placeras i omordning bufferten, måste alla poster med samma destination register designator hindras från att matcha en bypass kontroll. När förbifartsvägar läggs till ändras inte exaktheten med avseende på minnet och programräknaren från den tidigare metoden. Den största nackdelen med denna metod är det antal bypass-jämförelser som behövs och den mängd kretsar som krävs för flera bypass-kontroll. Även om denna krets är begreppsmässigt enkel, finns det en hel del av den. De metoder som presenteras i detta avsnitt och i nästa är avsedda att minska eller eliminera prestandaförluster som erfarits med en enkel omordningsbuffert, men utan all kontrolllogik som behövs för flera förbifartsvägar. I första hand placerar dessa metoder beräknade resultat i en fungerande registerfil, men behåller tillräckligt med tillståndsinformation så att ett exakt tillstånd kan återställas om ett undantag uppstår. Bilda. 5 a) illustrerar metoden med historiska buffertar. Historiebufferten är organiserad på ett sätt som är mycket likt reorderbufferten. När en instruktion ges fylls en buffertpost med kontrollinformation, som med orderbufferten, men målregistrets aktuella värde (som ska skrivas över av den utfärdande instruktionen) läses också från registerfilen och skrivs in i buffertposten. Resultat på resultatbussen skrivs direkt in i registerfilen när en instruktion kommer. ExceDtion reDorts kommer tillbaka som en instruktion kompletterar och skrivs in i historiebufferten. I likhet med omordningsbufferten styrs undantagsrapporterna till korrekt historikbuffertpost genom användning av taggar som finns i resultatskiftsregistret. När historikbufferten innehåller ett element i huvudet som är känt för att ha avslutats utan undantag, behövs inte historikbuffertposten längre och att buffertplaceringen kan återanvändas (huvudpekaren ökas). Liksom med omordningsbufferten kan historiebufferten vara kortare än det maximala antalet rörledningssteg. Om alla historikbuffertposter används (bufferten är för liten Exempel 5: Posterna i historikbufferten och resultatet skiftregister visas Bild. 5 b motsvarar vår kod i Exempel 1, efter heltalstillägget har utfärdats. De enda skillnaderna mellan denna och den omordningsbuffertmetod som visas i bild. 3 b) är tillägget av ett "gammalt värde" fält i historiebufferten och ett "destinationsregister" fält i resultatskiftsregistret. Resultatet skiftregister ser nu ut som den som visas i Bild. 2............................................................... När ett undantagsvillkor kommer fram till buffertens topp hålls bufferten, instruktionsfrågan stoppas omedelbart och det finns en väntan tills rörledningsaktiviteten är klar. De aktiva buffertposterna töms sedan från svans till huvud, och historievärdena lastas tillbaka in i sina ursprungliga register. Programmets motvärde som finns i huvudet på historiebufferten är den exakta programräknaren. För att göra huvudminnet exakt, när en butikspost kommer ut från bufferten, sänder den en signal om att en annan butik kan bindas till minnet. Butiker kan antingen vänta i utgivningsregistret eller blockeras i minnesledningen, som i de tidigare metoderna. Den extra hårdvara som krävs av denna metod är i form av en stor buffert för att innehålla historieinformation. Även registerfilen måste ha tre läsportar eftersom målvärdet samt källoperanderna måste läsas vid utgivningstidpunkten. Det finns ett litet problem om det grundläggande genomförandet har en bypass av resultatet buss runt registret filen. I ett sådant fall måste förbifartsleden också anslutas till historiebufferten. Den framtida filmetoden (Fig. 6 ) liknar historikbuffertmetoden, men den använder två separata registerfiler. En registerfil återspeglar den arkitektoniska (sekvens)maskinens tillstånd. Denna fil kommer att kallas den arkitektoniska filen. En andra registerfil uppdateras så snart instruktionerna är klara och löper därför före den arkitektoniska filen (dvs. den återspeglar framtiden med avseende på den arkitektoniska filen). Den här framtida filen är arbetsfilen som används för beräkning av de funktionella enheterna. Instruktioner utfärdas och resultaten returneras till den framtida filen i vilken ordning som helst, precis som i den ursprungliga pipelinemodellen. Det finns också en ordningsbuffert som får resultat samtidigt som de skrivs in i den framtida filen. När huvudpekaren hittar en ifylld instruktion (en giltig post) skrivs resultatet som hör till den posten i den arkitektoniska filen. Exempel 6: Om vi tar hänsyn till koden i Exempel 1 igen, finns det en tidsperiod då arkitekturfilen och den framtida filen innehåller olika poster. Med denna metod, en instruktion kan sluta i ordningen, så när heltal lägga till slutar, den framtida filen innehåller det nya innehållet i RO. Arkitekturfilen gör dock inte det, och det nya innehållet i RO buffras i ordningen buffertpost motsvarande heltal lägga till. Mellan tiden heltal lägga till finish och tiden flytta punkten lägga till finish, de två filerna är olika. När flyttalpunkten är klar och dess resultat är skrivna i R 4 av båda filerna, RO av arkitekturfilen skrivs. Precis som med den rena omordningsbuffertmetoden skrivs programräknarens värden in i omordningsbufferten vid emissionstidpunkten. När instruktionen i toppen av orderbufferten är klar utan emor placeras resultatet i den arkitektoniska filen. Om det avslutas med ett fel används de registerutformare som är associerade med buffertposterna mellan huvud- och svanspekaren för att återställa värden i den framtida filen från den arkitektoniska filen.* Den främsta fördelen med den framtida filmetoden realiseras när arkitekturen genomför avbrott via ett "utbyte" där alla register automatiskt sparas i minne och nya återställs (som görs i CDC- och Cray-arkitekturer). I detta fall kan den arkitektoniska filen lagras bort omedelbart; ingen restaurering är nödvändig som i historien buffertmetoden. Det finns inte heller några förbifartsproblem som med historiebuffertmetoden. För att utvärdera effektiviteten hos våra exakta avbrottssystem använder vi ett CRAY-1s simuleringssystem som utvecklats vid University of Wisconsin [133. Denna spårdrivna simulator är extremt exakt, på grund av den mycket deterministiska karaktären hos CRAY-lS, och ger det antal klockperioder som krävs för att utföra ett program. Den skalära delen av CRAY-1s är mycket lik den modellarkitektur som beskrivs i avsnitt 11-A. Därför är det okomplicerat att kasta de grundläggande tillvägagångssätten i CRAY-IS-skalararkitekturen. För en simuleringsarbetsbörda användes de första 14 Lawrence Livermore Loops [12]. Eftersom vi främst är intresserade av piped implementations av konventionella skalär arkitekturer, slingorna sammanställdes av Cray Fortran kompilatorn med vektorizern avstängd. I de föregående avsnitten beskrevs fem metoder som kunde användas för att garantera exakta avbrott. För att utvärdera effekten av dessa metoder på systemets prestanda delades metoderna in i tre grupper. Den första respektive den andra gruppen innehåller iordningställandemetoden och den enkla omordningsbuffertmetoden. Den tredje gruppen är com-* Renoveringen utförs från den arkitektoniska filen eftersom den framtida filen är den registerfil från vilken all körning sker. som består av omordningsbufferten med förbifartsleder, historiebufferten och den framtida filen. Denna partitionering utfördes eftersom metoderna i den tredje gruppen resulterar i identiska systemprestanda. Detta beror på att den framtida filen har en omordningsbuffert inbäddad som en del av dess genomförande, och historiebuffertlängden begränsar prestanda på samma sätt som en omordningsbuffert: när bufferten fyller, måste problemet stoppas. Alla simuleringsresultat rapporteras som för omordningsbufferten med förbifartsleder. De gäller lika bra för historiebufferten och framtida filmetoder. Valet av en viss metod beror inte bara på dess effekt på systemets prestanda utan också kostnaden för genomförandet och den lätthet med vilken den exakta CPU-tillstånd kan återställas. För varje exakt avbrytande metod simulerades båda metoderna för hantering av butiker. För andra metoder än metoden för iordningställande är omordningsbuffertens storlek en parameter. Storleken på bufferten med för få poster försämrar prestandan eftersom instruktioner som kan komma att utfärdas skulle kunna blockeras i emissionsregistret. Blockeringen sker eftersom det inte finns plats för en ny post i bufferten. Tabell I visar den relativa prestandan för bufferten i ordning, omordning. och ordna om buffert med bypass-metoder när butikerna hålls tills resultatet skiftregistret är tomt. Resultaten i tabellen visar den relativa prestandan för dessa metoder med avseende på CRAY-IS över de första 14 Lawrence Livermore Loops; verkliga CRAY-1s prestanda är 1,0. En relativ prestanda som är större än 1,0 indikerar en försämring av prestandan. Antalet poster i orderbufferskenorna från 3 till 10. Simuleringsresultaten för iordningställandet är konstanta eftersom denna metod inte är beroende av en buffert som beställer om instruktioner. För alla metoder, det finns viss prestandanedbrytning. I början, när omordningsbufferten är liten, ger iordningställandemetoden den minsta prestandanedbrytningen. En liten omordningsbuffert (mindre än tre poster) begränsar antalet instruktioner som samtidigt kan vara i något skede av utförandet. När omordning buffertstorlek ökas utöver tre poster, någon av de andra metoderna resulterar i bättre prestanda. Som förväntat erbjuder omordningsbufferten med bjpasses överlägsen prestanda jämfört med den enkla omordningsbufferten. När buffertens storlek ökade mer än tio poster indikerade simuleringsresultaten inga ytterligare prestandaförbättringar. (Simuleringar gjordes också för buffertstorlekar på 15, 16, 20, 25 och 60.) Man kan förvänta sig minst I2 procent prestandanedbrytning när man använder en ordningsbuffert med bypass och den första metoden för hantering av butiker. Tabell I1 visar den relativa prestandan när butiker utfärdar och väntar på samma minnesrörledning som för memonbankkonflikter i det ursprungliga CRAY-IS. Efter utfärdande. butikerna väntar på att deras motsvarighet till dummybutiken ska signalera att alla tidigare utfärdade registerinstruktioner har avslutats. Efterföljande laster och butiker är blockerade från att utfärda. Som i tabell I, är resultaten i ordning slutförande konstant över alla poster. För den enkla omordningsbufferten måste bufferten ha minst fem poster innan den ger bättre prestanda än i ordningen. Omordningsbufferten med förbifartsleder kräver dock endast fyra poster innan den presterar mer effektivt än med i-order-komplettering. Precis som i tabell I, med mer än åtta poster i omordning buffert inte resulterar i förbättrad prestanda. Jämför tabell I och 11, den andra metoden för hantering av butiker erbjuder en tydlig förbättring jämfört med den första metoden. Om den andra metoden används med en åtta-ingång reorder buffert som har kringgår, en prestandanedbrytning på endast 3 procent erfares. Det är uppenbart att det finns en avvägning mellan försämring av prestandan och kostnaden för att genomföra en metod. För mycket lite kostnad kan metoden för iordningställande kombineras med den första metoden för hantering av butiker. Att välja detta "billiga" tillvägagångssätt resulterar i en 23-procentig prestandanedbrytning. Om denna nedbrytning är för stor måste antingen den andra lagringsmetoden användas i ordning eller en av de mer komplexa metoderna användas. Om omordningsbuffertmetoden används bör man använda en buffert med minst tre eller fyra poster. Det är viktigt att notera att vissa indirekta orsaker till försämring av prestanda inte beaktades i prestandastudien som just beskrivits. Dessa inkluderar längre kontrollvägar som skulle tendera att förlänga klockperioden. Ytterligare logik för att stödja exakta avbrott innebär också större styrelseområde vilket innebär fler kabelförseningar som också kan förlänga klockperioden. I tidigare avsnitt beskrev vi metoder som skulle kunna användas för att garantera exakta avbrott med avseende på registren, huvudminnet och programräknaren för vår enkla arkitektoniska modell. I följande avsnitt utökar vi de tidigare metoderna för att hantera ytterligare tillståndsinformation, virtuellt minne, cacheminne, linjära rörledningar och vektorer. De flesta arkitekturer har mer tillståndsinformation än vi har antagit i modellarkitekturen. Till exempel 570 IEEE TRANSAKTIONER PÅ KOMPUTERARE, VOL. 31. Hur är det fatt? Nej, det gör jag inte. 5, 51.41 1 -processen kan ha tillståndsregister som pekar på sid- och segmenttabeller, indikerar avbryta mask förhållanden, etc. Denna ytterligare tillståndsinformation kan upprätthållas exakt med en metod som liknar den som används för lagring av minne. Om man använder en omordningsbuffert reserverar en instruktion som ändrar ett statsregister en omordningsbuffertpost och går vidare till den del av maskinen där statsbytet kommer att göras. Instruktionen väntar sedan där tills den får en signal om att gå vidare från reorderbufferten. När dess ingång anländer till toppen av bufferten och tas bort, då signalen skickas för att orsaka staten förändring. I arkitekturer som använder tillståndskoder är tillståndskoderna tillståndsinformation. Även om de problemtillståndskoder som finns för villkorade filialer inte är helt orelaterade till ämnet här, lösningar på filialproblemet är inte det primära ämnet i detta papper. Det antas därför att problemet med den villkorade filialen har lösts på något sätt, t.ex. [3]. Om en omordningsbuffert används kan tillståndskoderna placeras i omordningsbufferten. Det vill säga, precis som när det gäller data, görs omordningsbufferten tillräckligt bred för att hålla tillståndskoderna. Uppgiften om tillståndskod uppdateras sedan när de tillståndskoder som är förknippade med utförandet av en instruktion beräknas. Precis som med data i omordningsbufferten används inte en post med tillståndskod för att ändra processorns tillstånd förrän alla tidigare instruktioner har fyllts i utan fel (konditionskoder kan dock förbigås till instruktionshämtningsenheten för att snabba upp villkorade grenar). Utökning av historikbufferten och framtida filmetoder för att hantera tillståndskoder är mycket lik den för reorderbufferten. För historiebufferten ska konditionskodinställningarna vid tidpunkten för instruktionsemissionen sparas i historiebufferten. De sparade tillståndskoderna kan sedan användas för att återställa processorns tillstånd när ett undantag upptäcks. Virtuellt minne är en mycket viktig anledning till att stödja exakta avbrott; det måste vara möjligt att återhämta sig från sidfel. För det första bör adressöversättningssektionen på rörledningen utformas så att alla last-/lagerinstruktioner går igenom den i ordning. In-order minne operationer har antagits i hela detta papper. Beroende på vilken metod som används reserverar last-/lagerinstruktionerna tidsintervall i resultatledningen och/eller ordningsbufferten som inte avläses tidigare än den tidpunkt då instruktionerna har kontrollerats för undantagsförhållanden (särskilt sidfel). För butiker, dessa poster används inte för data; bara för undantag rapportering och / eller hålla ett program motvärde. Om det finns ett adresseringsfel annulleras instruktionen i adresseringsledningen och alla efterföljande instruktioner om last/lager ställs in när de passerar genom adresseringsledningen. Detta garanterar att inga ytterligare laster eller lager ändrar processtillståndet. De mekanismer som beskrivs i de tidigare avsnitten för att säkerställa exakthet med avseende på register garanterar att icke-lasta/lagra instruktioner efter felbelastning/lager inte kommer att ändra processtillståndet, vilket innebär att avbrottet är exakt. Om t.ex. omordningsbuffertmetoden används, skickas ett sidfel till omordningsbufferten när den upptäcks. Taggen som tilldelas motsvarande belastnings-/lagerinstruktion guidar den till korrekt ordningsbuffertinmatning. l k reorder buffertingång tas bort från bufferten när den når huvudet. Undantaget i posten gör att alla ytterligare poster i omordningsbufferten kastas så att processtillståndet inte ändras ytterligare (inga fler register skrivs). Programräknaren som finns i ordningen buffertpost är exakt med avseende på felet. Hittills har vi antagit system som inte använder ett cacheminne. Införandet av en cache i minneshierarkin påverkar genomförandet av exakta avbrott. Som vi har sett är en viktig del av alla metoder att butiker hålls tills alla tidigare instruktioner är kända för att vara undantagsfria. Med en cache, butiker kan göras i cache tidigare, och av prestanda skäl bör vara. Den faktiska uppdateringen av huvudminnet är dock fortfarande föremål för samma begränsningar som tidigare. I) Store-Through Caches: Med en butik-genom cache kan cache uppdateras omedelbart, medan cache-genomgång till huvudminne hanteras som i tidigare avsnitt. Det vill säga, alla tidigare instruktioner måste först vara kända för att vara undantagsfria. Belastningsinstruktioner är dock fria att använda den cachade kopian, oavsett om lagergenomföringen har ägt rum. Detta innebär att huvudminnet alltid är i ett exakt tillstånd, men cacheinnehållet kan "köra framåt" av det exakta tillståndet. Om ett avbrott skulle inträffa medan cache är potentiellt i ett sådant tillstånd, då cache bör spolas. Detta garanterar att förtidigt uppdaterade cacheplatser inte kommer att användas. Detta kan dock leda till prestandaproblem, särskilt för större cachelagringar. Ett alternativ är att behandla cachen på ett sätt som liknar registerfilerna. Man skulle till exempel kunna behålla en historiebuffert för cache. Precis som med register, en cache plats skulle behöva läsas precis innan skriva det med ett nytt värde. Detta betyder inte nödvändigtvis en prestandapåföljd eftersom cache måste kontrolleras för en träff före skrivcykeln. I många högpresterande cacheorganisationer kan läscykeln för historikdata göras parallellt med träffkontrollen. Varje butiksinstruktion gör en buffertpost som anger den cacheplats den har skrivit. Buffertposterna kan användas för att återställa cachetillståndet. Eftersom instruktionerna är fullständiga utan undantag ska buffertposterna kasseras. Den framtida filen kan förlängas på ett liknande sätt. 2) Write-Back Cache: En write-back-cache är kanske den typ av cache som är mest kompatibel med att implementera exakta avbrott. Detta beror på att butiker i en cache inte görs direkt till minnet; det finns en inbyggd fördröjning mellan uppdatering av cache och uppdatering av huvudminnet. Innan en faktisk avskrivning kan utföras ska dock omordningsbufferten tömmas eller kontrolleras för data som hör till den rad som skrivs tillbaka. Om sådana uppgifter skulle hittas, måste write-back vänta tills uppgifterna har lagrats i cache. Om en historikbuffert används måste antingen en cachelinje sparas i historikbufferten, eller så måste skrivningen vänta tills den tillhörande instruktionen har tagit sig fram till buffertens slut. Observera att i vilket fall som helst, w d l ibland måste vänta tills en exakt tillstånd nås. SMITH OCH PLESZKUN: GENOMFÖRANDE INTERRUPT I PIPELINED PROCESSORS 1 Ett alternativ till de parallella funktionella enhetsorganisationer vi har diskuterat är en linjär pipeline organisation. Se bild. 7............................................................ Linjära rörledningar ger ett mer naturligt genomförande av registerlagringsarkitekturer som IBM 370. Här kan samma instruktion komma åt en minnesopera och utföra en viss funktion på den. Därför har dessa linjära rörledningar en instruktionsfas, en operationsfas och en utförandefas, av vilka var och en kan bestå av ett eller flera rörledningssteg. I allmänhet är omordning instruktioner efter utförande inte lika viktigt en fråga i sådana organisationer eftersom det är naturligt för instruktioner att stanna i ordning när de passerar genom röret. Även om de slutar tidigt i röret fortsätter de till slutet där undantag kontrolleras innan processtillståndet ändras. Därför fungerar själva rörledningen som en sorts omordningsbuffert. Resultatet förskjutningsregistrets roll spelas av den kontrollinformation som flyter nedför rörledningen vid sidan av databanan. Programräknarens värden för exakthet kan också flöda nerför rörledningen så att de är tillgängliga om ett undantag uppstår. Linjära rörledningar har ofta flera bypassvägar som förbinder mellanliggande rörledningssteg. En komplett uppsättning bypass används normalt inte, snarare finns det några kritiska delmängd väljs för att maximera prestanda samtidigt hålla kontroll komplexitet hanterbar. Med hjälp av terminologin i detta papper uppnår linjära rörledningar därför vanligtvis exakta avbrott genom att använda en ordningsbuffertmetod med förbifartsleder. Att genomföra exakta avbrott i en rörformad vektorarkitektur är svårare än för en skalär arkitektur. I det här avsnittet överväger vi utökningar av våra tidigare metoder till vektorer. Vid beaktande av exakta avbrott med avseende på vektorinstruktioner måste noggrannheten noggrant definieras. Till skillnad från de skalära instruktioner som beskrivits hittills, vektor instruktioner inte producera ett enda resultat och ändra systemet tillstånd som de Komplett. De ger i stället en serie resultat som förändrar systemets tillstånd under många klockperioder. Den sekventiella arkitekturmodellen, som tillämpas på vektorer, kräver att en vektorinstruktion slutför sitt sista resultat innan nästa börjar producera resultat. Dessutom innebär krav 3) för exakta avbrott att en vektorinstruktion antingen måste fyllas i i närvaro av ett undantagstillstånd, eller också måste den fås att se ut som om den inte har påbörjats. Detta innebär att en viss buffring av vektorresultaten kan krävas vid en piped implementation oavsett vilken metod som används för att genomföra exakta avbrott. Det finns två primära klasser av vektorarkitekturer: de med vektorregister och de med minnes-till-minne vektoroperationer. För vektorregisterarkitekturer utökar vi våra tidigare metoder för att upprätthålla Skalregistren exakt. För minnes-till-minne arkitekturer, den andra metoden för hantering av skalära butiker till minne utökas. I ordning komplettering (vår första metod) som utvidgats till vektorer innebär att en instruktion är klar med att producera resultat innan nästa börjar. Detta innebär ingen överlappning av vektorer med skalar och ingen vektorkedja. Detta kan implementeras i instruktionsfrågan logik genom att blockera frågan så länge en vektor instruktion pågår. Det finns fortfarande problem med avbrott som inträffar mitt i utförandet av en vektor instruktion. Om avbrottet är ett externt avbrott, är det helt enkelt en fråga om att vänta tills instruktionen är klar. För många typer av program avbryter (t.ex., sidfel), men det kanske inte är möjligt att tillåta instruktionen att slutföra, så det måste säkerhetskopieras. En enkel lösning är att buffra resultat och skriva in dem i ett vektorregister när alla resultat är klara, men detta leder till prestandaproblem. En vektorinstruktion med hjälp av resultaten måste vänta på att kopian från bufferten till registret ska fyllas i. En bättre metod är att ha två kopior av varje vektorregister. En 1-bitars pekare för varje register anger den nuvarande kopian. När en vektoroperation initieras placeras vektorresultaten i den "nya" (noncurrent) kopian. När vektorinstruktionen är klar kan den "aktuella" pekaren ändras till den nya kopian. Om det finns ett fel uppdateras inte pekaren, och registerkopian som sparats från innan vektorinstruktionen startades förblir den aktuella kopian. En omordningsbuffertmetod kan användas för att möjliggöra begränsad överlappning av skalär- och vektordrift. På grund av längden på många vektoroperationer, dock, bufferten måste vara mycket lång, eller relativt liten skalär operation skulle vara möjligt. Dessutom, om inte bypass används, alla skalär instruktioner måste vara oberoende av varandra. Detta skulle begränsa användningen av denna metod ännu mer. För vektorer skulle det fortfarande behövas en fullständig buffring av resultaten, men utan förbifartsvägar skulle det inte vara möjligt att kedja ihop dem. En praktisk metod baserad på omordning buffertar är att spara skalar i bufferten som tidigare, men spara vektor register pekare, snarare än vektorerna själva, i bufferten. Det skulle återigen finnas två kopior av varje vektorregister: en aktuell kopia och en ny kopia. En pekare till en specifik vektorregister kunde visas i bufferten endast en gång. Denna pekare skulle indikera inte bara ett vektorregister, men vilken av paret innehåller de nya resultaten. När pekaren tas bort från bufferten uppdateras den "aktuella" pekaren för vektorn. Om ett fel upptäcks uppdateras inte pekaren, så den gamla kopian av vektorregistret behålls. Denna metod överlappar beroende skalära operationer med vektorer, och kedja kan genomföras genom att kringgå från den nya kopian pekas till av vektorpekaren i bufferten, snarare än den nuvarande kopian. Vi ger nu ett exempel på den metod som just beskrivits. IEEE TRANSAKTIONER PÅ KOMPUTERARE, VOL. 37, nej, nej, nej, nej, nej, nej, nej, nej, nej, nej, nej, nej, nej, nej, nej, nej, nej, nej, nej, nej, nej, nej, nej, nej, nej, nej, nej, nej, nej, nej, nej, nej, nej, nej, nej, nej, nej, nej, nej, nej, nej, nej, nej, nej, nej, nej, nej, nej, nej, nej, nej, nej, nej, nej, nej, nej, nej, nej, nej, nej, nej, nej, nej, nej, nej, nej, nej, nej, nej, nej, nej, nej, nej, nej, nej, nej, nej, nej, nej, nej, nej, nej, nej, nej, nej, nej, nej, nej, nej, nej, nej, nej, nej, nej, nej, nej, nej, nej, nej, nej, nej, nej, nej, nej, nej, nej, nej, nej, nej, nej, nej, nej, nej, nej, nej, jag, nej, nej, nej, nej, nej, nej, nej, nej, nej, nej, nej, nej, nej, nej, nej, nej, nej, nej, nej, nej, nej, nej, nej, nej, nej, nej, nej, nej, nej, nej, nej, nej, nej, nej, nej, nej, nej, nej, nej, nej, nej, nej, nej, nej, nej, nej, nej, nej, nej, nej, nej, nej, nej, nej, nej, nej, nej, nej, nej, nej, nej, nej, nej, nej, nej, nej, nej, nej, nej, nej, nej, nej, nej, nej, nej, nej, nej, nej, nej, nej, nej, nej, nej, nej, nej, nej, nej, nej, nej, nej, nej, nej, nej, nej, nej, nej, nej, nej, nej, nej, nej, nej, nej, nej, nej, nej, nej, nej, nej, nej, nej, nej, nej, nej, nej, nej, nej, nej, nej, nej, nej, nej, nej, nej, nej, nej, nej, nej, nej, nej, nej, nej, nej, nej, nej, nej, nej, nej, Denna förordning träder i kraft den tjugonde dagen efter det att den har offentliggjorts i Europeiska unionens officiella tidning. MAJ 1988 Begrunda följande två instruktioner: V1 = V2 + V3; V3 = V1 x V4. Anta i början av sekvensen, den aktuella pekaren för V1 är 0. Efter att den första vektorinstruktionen har utfärdats placeras vektorutformaren V1 och 1 (komplementet till dess nuvarande pekare) i omordningsbufferten, och vektorresultaten placeras i kopia 1 av V1 som de genereras. De tidigare värdena i kopia 0 av V1 behålls. Den andra instruktionen kan börja och kedjas till den första; här används kopia 1 av V1 för kedjan. Kedjan sätts upp med hjälp av pekaren som finns i omordningsbufferten. Efter den första instruktionen är känd för att vara komplett utan fel, den nuvarande pekaren för V1 uppdateras till 1. Annars om det finns ett fel, hålls det vid 0. Observera att exemplar 0 av V1 endast kan återanvändas efter att den första instruktionen har genomförts. Med historikfilmetoden, storleken på buffertar är återigen ett stort problem; filen skulle skrivas som vektor resultat produceras; vektor kedja skulle innebära flera resultat som genereras samtidigt så att filen skulle behöva kunna stödja flera samtidiga skriver. På samma sätt kan skalära resultat produceras samtidigt med vektor resultat så att de förmodligen skulle behöva sin egen historia fil med någon koppling mellan de två. En bättre metod är att återigen använda par vektorregister. När en vektorinstruktion utfärdas, gör den en post i historikfilen som anger vektorregistrets kopia som ska användas som säkerhetskopia. Om en säkerhetskopia krävs justeras den "aktuella" pekaren för att uppnå säkerhetskopian. Som med de andra metoderna, med hjälp av par av vektorregister kräver att endast en instruktion som använder ett specifikt vektorregister kan vara aktiv i systemet vid varje given tidpunkt; en kopia av paret används för nya resultat, den andra används för att spara gamla resultat. Vid denna tidpunkt bör det stå klart att en utvidgning av den framtida filmetoden för vektorregister också lätt kan göras med par av vektorregister på ett sätt som är mycket likt den historikfilmetod som just beskrivits. För att sammanfatta, de olika metoderna för att genomföra exakta avbrott kan utökas för vektorregister, men kostnaden är en fördubbling av antalet hårdvaruregister plus några ytterligare kontroll hårdvara för att hålla reda på de "aktuella" pekare. 2) Memory-to-Memory Vectors: I fallet med en minnes-till-minne vektor arkitektur, kan det vara nödvändigt att buffert resultat i CPU tills alla operationer i samband med en vektor instruktion slutföras utan undantag innan minne butiker att börja. Detta görs på det enklaste sättet genom att förlänga lagringsmetod 2 som beskrivits tidigare, men det kan kräva en mycket större butiksbuffert. Detta är den metod som används i CDC CYBER 180/990 där vektorer kan innehålla upp till 512 element. I vissa arkitekturer som använde längre vektorlängder kan storleken på denna buffert dock vara oöverkomlig. Hittills har vi antagit en sekventiell arkitektonisk modell för utförande, och har försökt att arbeta runt det för piped implementations. Grundorsaken till problemet är emellertid den arkitektoniska modellen. Därför verkar det rimligt att lösa problemet på arkitekturnivå. Det vill säga, man skulle kunna definiera en arkitektonisk modell där ett avbrutet tillstånd förutsätter ett underliggande parallellt genomförande. I detta avsnitt diskuterar vi kortfattat några sådana arkitektoniska lösningar. En arkitektonisk lösning är att "frysa" rörledningen när ett avbrott upptäcks, och helt enkelt "dump" tillståndet för alla register i rörledningen till minne som en del av ett sparat sammanhang. Sedan, för att starta om processen, är alla rörledningsregister återställda, och rörledningen startas. Även om detta leder till processer som kan startas om, har detta tillvägagångssätt vissa nackdelar. En nackdel är att det i praktiken är svårt att frysa ett rör på grund av problem med utblåsning. Problemet med utblåsning kommer från behovet av att kontrollera överskrivning av varje rörledningssteg. Om skrivandet av alla stadier är villkorat av en enda signal, t.ex. en signal som indikerar inga avbrottsförhållanden, måste villkoret "inget avbrott" fläktas ut till alla flip-flops i alla register i rörledningen. Den stora fläkten som krävs för en sådan signal kan förlänga den kritiska vägen för ledningsstyrningen. På grund av den enorma fläkten för större rörsystem kan denna metod endast vara användbar för de allra minsta rörledningssystemen [lo]. Ett sådant tillvägagångssätt innebär också att genomförandedetaljer, till exempel antalet rörledningssteg, blir en del av arkitekturen. Detta kan leda till kompatibilitetsproblem. En variation av ovanstående metod, riktad mot vektorer, är att definiera vektorarkitekturen så att det mellanliggande tillståndet för vektorinstruktioner sparas vid tidpunkten för avbrottet. Denna information är främst i form av längdräknare. Om det görs på rätt sätt stoppas en vektorinstruktion i &he middle, och att starta om när du återvänder från avbrottet åstadkoms genom att upprepa den stoppade vektorinstruktionen. En annan arkitektonisk lösning på det exakta avbryta problemet är att spara en serie av programräknare värden, slutar med en slutlig programräknare värde som är ungefär som den i den sekventiella modellen. Varje programräknare pekar på en instruktion, före den sista, som inte har utförts. För att starta om en process måste de instruktioner som serieprogramräknarena pekar på först utföras innan maskinen är i ett exakt skick med avseende på den slutliga. Exempel 7 : Återigen, vi anser koden som visas i Exempel 1 och fallet där flyttal lägga överflöd efter loopen ökning i uttalande 7 har avslutat. Med hjälp av en arkitektur enligt definitionen ovan, i händelse av flyttal overtlow i uttalande 6, kan programräknaren som pekar på uttalande 6 sparas tillsammans med programräknaren pekar på uttalande 8. En programräknare för uttalande 7 behövs inte eftersom det har lyckats. Översvämningshanteraren kunde "fixa upp" överflödet, möjligen genom att skala om, och sedan återgå till processen. Sedan använder båda sparade programräknare, processorn skulle köra uttalande 6 innan återuppta regelbunden körning med uttalande 8. Slutligen kunde man spara en sekvens av instruktioner som måste utföras innan den sparade programräknaren är exakt. Detta har fördelen att hämta instruktionssekvensen som en del av det sammanhang som återställs. Programräknaren kräver att man först hämtar programräknaren som en del av det återställda sammanhanget och sedan hämtar instruktionerna själva. I exemplet just givet, flytta punkten lägga instruktion själv SmITH OCH PLESZKUN: GENOMFÖRANDE INTERRUPTER I PIPELINED PROCESSORS skulle sparas, inte dess programräknare. Sedan, som en del av återkomsten från avbryta processor skulle utföra flyttal lägga till innan hämta instruktioner börjar med uttalande 8. Fem metoder för att genomföra exakta avbrott i rörledningarna beskrevs. Dessa metoder utvärderades sedan genom simuleringar av en CMY-1 som implementerades med dessa metoder. Den första metoden tvingar i ordning instruktion slutförande, och vår simulering studie indikerar en prestandanedbrytning på cirka 23 procent när butiksinstruktioner hålls i instruktionsregistret och cirka 16 procent när butiker hålls i minne pipeline. Prestanda går förlorad främst på grund av ytterligare blockeringar av instruktionsemissioner som inte är relaterade till databeroenden. Den betydande skillnaden i prestanda på grund av hur butiker hanteras är anmärkningsvärd. För att förbättra den prestanda som tillhandahålls genom den första metoden föreslås en ordningsbuffert för att tillåta instruktioner för att fylla i ur order, men för att ändra de resultat som går in i registerfilen. För en omordning buffert i storlek åtta, denna metod resulterar i prestandaförlust på 18 procent eller 12 procent, beroende på hur lagrar till minne hanteras. Här går prestandan förlorad eftersom resultaten inte kan användas eftersom de hålls i omordningsbufferten innan resultatregistret uppdateras. Den tredje metod som studerats lägger till bypassvägar till den ordningsbuffert som gör det möjligt att använda data före uppdatering av resultatregistret. Med denna metod, prestandaförlust minskas till 12 procent eller 3 procent, återigen beroende på hantering av butiker. Dessa slutliga resultat tyder på att prestandaförlusterna kan minskas avsevärt, men endast om butikerna blockeras i minnesledningen för att vänta på att tidigare instruktioner ska slutföras. De två sista metoderna, historiebufferten och framtida filmetoder, tillåter alternativa implementationer som ger samma prestanda som med omordningsbufferten med bypass. Skillnaderna i genomförandet mellan de tre sista metoderna är relativt små, och varje slutligt val bör baseras på teknikrelaterade frågor som påverkar genomförandekostnaderna och komplexiteten. Det finns många andra intressanta frågor som rör genomförandet av exakta avbrott. Dessa omfattar hantering av virtuella minnesfel, cacheminnen, vektorer och alternativa rörledningsstrukturer. Även om de i korthet berördes i detta dokument förtjänar de ytterligare forskning. Slutligen bör de grundläggande begreppen om processavbrytbarhet och omstartbarhet studeras ingående. Vi anser att metoder för att rädda och återställa tillstånd som inte är beroende av en serieutförandemodell är nödvändiga för utvecklingen av parallella allmänna system. Författarna vill tacka R. G. Hintz och J. B. Pearson från Control Data Corporation. Urbana, 1979 respektive 1982. Han är biträdande professor i datavetenskap vid University of Wisconsin, Madison. Hans forskningsintressen omfattar datorarkitektur, med tonvikt på rörsystem, och VLSI:s inverkan på datorarkitekturen. REFERENSER
Den Reorder Buffer, som ursprungligen föreslogs av Smith och Pleszkun, är den traditionella checkpointing mekanism som används för att återställa maskinens tillstånd på felpreskriptioner eller undantag REF.
Implementing Precise Interrupts in Pipelined Processors
{'venue': 'IEEE Trans. Computers', 'journal': 'IEEE Trans. Computers', 'mag_field_of_study': ['Computer Science']}