Pipelining i Intel Pentium II John Abdulnoor Lund Universitet 04/12/2017
Abstract För att en processor ska fungera måste alla komponenter inuti den samarbeta för att nå en acceptabel nivå av prestanda. Den här rapporten beskriver i helhet hur instruktioner i Intel Pentium II processorn är hanterade med pipelining teknologin. Klarläggning av de olika stegen som instruktionerna går igenom med fokus på Reorder Buffer (ROB) tekniken som hanterar och löser konflikt i processorns register när det behövs data från ett register som inte har blivit färdig med en fortfarande aktiv instruktion. Inledning När flera program körs parallellt på en dator behövs det att flera instruktioner ska vara aktiva i processorn samtidigt. Detta görs med hjälp av instruction pipelining. Intels Pentium II är en superscalar processor som producerades år 1997 och den implementerar 3 parallella pipelines (3-graders superscalar) med 4-stegs arkitektur. Processorn kan hantera upp till 3 instruktioner under en klockperiod. Pipelining i Intel Pentium II När en instruktion kommer till denna processorn går den igenom de 4 följande faserna: 1. Avhämtning (Fetch). 2. Avkodning (Decode). 3. Exekvering (Execute). 4. Förpliktelse (Commit). Avhämtningen av instruktioner med totalt 32 bytes i längd görs till en instruktions buffert med hjälp av en enhet för instruktionsavhämtning som kallas för Instruction Fetch Unit (IFU). Antalet instruktioner i bufferten varierar beroende på komplexiteten. IFU enheten delar instruktionerna i 3 steg enligt följande: 1. Ladda in 32 bytes av instruktioner till instruktions bufferten (Prefetch buffer). 2. Sätta en gräns mellan instruktionerna genom att konstruera ett block på 16 bytes. Sedan presentera branch instuktioner till en branch buffert (Branch Target Buffer) för
dynamisk prediktion (förklaras längre ner). Om en prediktion till en branch instruktion är tagen så justeras instruktions bufferten. 3. Sätta upp instruktionerna för att skicka vidare dem till lämplig avkodare. Den dynamiska prediktionen som Pentium II implementerar heter Branch Taget Buffer (BTB) och innebär att den kan prediktera nya branch instruktioner med hjälp av en tabell som håller koll på 512 redan exekverade d.v.s. äldre branch instruktioner och jämför dessa med nya som inkommer. Av dessa 512 instruktioner innehåller tabellen branch adressen, destinations adressen, samt en 4-bitar statusfält som har koll på beteendet av en branch de senaste 4 exekveringarna. Processorn använder Yehs algoritm och kan prediktera 4 branch instuktioner samtidigt med 90% noggrannhet. I branch tabellen finns dessutom en stack buffert som sparar returadressen för att påskynda returprocessen från subrutiner. Denna kallas för Return Stack Buffer (RSB). Avkodningen av instruktioner sker med hjälp av 3 avkodningsenheter. Dessa enheter avkodar varje instruktion till så kallade mikro operationer (micro-ops). Varje instruktion omvandlas till en eller flera micro-ops på 118 bitar var. Den första avkodningsenheten klarar av mer komplexa instruktioner och kan avkoda en sådan till mellan 1 och 4 microops på upp till 7 bytes medan de andra två enheterna klarar av just en micro-op per instruktion. Trots att instruktioner kommer i tur och ordning så kan processorn skicka dem i slumpvis ordning till rätt avkodare beroende på komplexiteten i varje instruktion. Det är inte förrän exekveringen av instruktionerna är klar och sista steget i pipeline är uppnådd då processorn skickar resultatet i ordning som de kom in. Programmeraren påverkas alltså inte av detta och på så sätt ökar man genomströmningshastigheten i processorn.
Figur 1 I fallet av en instruktion som består av 5 eller flera micro-ops körs sådana igenom ett mikroprogram som översätter en instruktion till en sekvens av micro-ops. Denna kallas för Micro Instruction Sequencer (MIS). När instruktioner har blivit avkodade skickas dem i programordning till en kö av avkodade instruktioner. Totala micro-ops per klockcykel får vara maximalt 6. En register-fördelningstabell; kallas Register Allocation Table (RAT) får sedan upp till 3 micro-ops per klockcykel från den förutnämnda kön. Mer om denna tabell förklaras i nästa del. Reorder Bufferten (ROB) Följande funktioner är en del av ROB i Pentium 2: Förpliktelse av instruktioner i programordning (steg 4 i pipeline). En cirkulär kö med huvud och ände samt pekare för vardera.
Rymmer 40 exekverbara instruktioner i programordning (innan förpliktelse steget). Ett fält för resultat av typen integer eller Floating Point efter färdigberäkning. Implementationen av Reorder Bufferten i Pentium II liknar den i Intels föregående Pentium Pro. En sådan buffert finns för att minska data hazards genom att tillåta data forwarding, d.v.s resultatet från ett register i en instruktion som inte har blivit färdigexekverad kan erhållas genom nästa instruktion i instruktionsbufferten. Figur 2 Den ovannämnda Register Allocation Table delar om operander som mikro-operationerna refererar till så att de pekar på rätt omdöpta registrar i ROB. Utan detta skulle inte data forwarding fungera. Dessutom finns det en så kallad Reservation Station (RS) som planerar och schemalägger resten av pipeline. Den rymmer 20 mikro-operationer och kan kopiera upp
till 5 av dessa från ROB till resten av pipeline. Samtidigt behåller RS en mikro-operation tills lämplig operand är tillgänglig vilket gör att instruktionerna inte exekveras i programordning (out of order execution). Blir två mikro-operationer redo för samma operand använder sig reservation stationen av en Först-in-Först-Ut (FIFO) algoritm för att avgöra vilken mikro-operation går först vidare. Ett resultat från ROB blir endast skriven i sitt register när dess instruktion har nått huvudet i den cirkulära kön och är i sista (Förpliktelse) steget i pipeline. Figur 3 Exekveringen av instruktioner i Pentium II är utförd av 8 exekveringsenheter. Reservation stationen från förra delen har flera av dessa enheter samt 5 portar som den kan använda sig av. De första tre enheterna finner man på port 0 i RS, nämligen complex integer, complex floating point samt simple floating point. Nästa port i RS innehåller simple integer samt branch enheter. Resterande porter, d.v.s. port 2, 3 och 4 har store, store address och load i
respektive ordning. Figur 4 Intel introducerade MMX instruktioner vid lanseringen av Pentium processorerna. Teknologin är baserad på SIMD tekniken (Single Instruction Multiple Data) och den är till för att öka prestandan i multimedia applikationer. MMX instruktionerna kräver extra steg i integer enheten för exekvering. Branch enhetens funktion är att beräkna och sedan jämföra resultat från branch instruktioner med den predikterade resultatet från branch bufferten (BTB). När en branch prediktion är exakt, resten av instruktionerna i spekulativa strömmen blir giltiga och sedan passerar förbi sista steget i pipeline, d.v.s. förpliktelsen. Skulle prediktionen inte stämma med det aktuella resultatet så töms pipeline och startas om från nya adressen och branch bufferten är uppdaterad. Reorder bufferten får in resultat samt status av instruktioner som är färdigexekverade.
Det sista steget i Pentium IIs pipeline är Förpliktelsen och handlar om att färdigställa alla exekverade instruktion i programordning så att de blir synliga för programmeraren. Detta görs med ytterligare en enhet som kallas för Retire Unit (RU) som kollar statusen av mikrooperationerna i Reorder bufferten och ser till att operationerna är giltiga samt inga missprediktioner har inträffat. När detta är gjort presenteras resultaten för programmeraren i programordning och dess värde är borttaget från Reorder bufferten. På samma sätt som i avkodningsprocessen så kan RU enheten behandla 3 operationer under en klockperiod. Slutsats Med en framgångsrik pipeline kunde Intel locka många datoranvändare till att köpa denna processor i slutet av 1900-talet samt början på 2000-talet. Prestandan var i sin tid bland den bästa man kunde få utav en processor tack vare den smarta implementeringen av pipeline bl. a. Reorder bufferten samt Out Of Order Execution tekniken. Processorn passade bra till alla sorters arbetsbelastningar och än idag säljer Intel nya och mer avancerade varianter av Pentium processorn i den familjen.
Figur 5
Källförteckning Artiklar (PDF dokument): 1. Pipelining The PowerPC and Pentium II (1999): http://ranger.uta.edu/~alkhaiy/cse3322_fall99/projects/paper/p10.pdf (Hämtad 04-12-2017) 2. Reorder Buffer: register renaming and in- order completion (sida 1): https://courses.cs.washington.edu/courses/cse471/07sp/lectures/lecture4.pdf (Hämtad 04-12-2017) 3. PENTIUM PROCESSOR WITH MMX TECHNOLOGY (1.2.1, sida 7): http://download.intel.com/support/processors/pentiummmx/sb/24318504.pdf (Hämtad 04-12-2017) Power point presentationer: 1. Reorder Buffer Implementation (Pentium Pro) (sida 1): https://courses.cs.washington.edu/courses/csep548/03sp/lectures/reorderbuf.ppt (Hämtad 04-12-2017) Bilder: Figur 1: http://images.slideplayer.com/23/6568411/slides/slide_6.jpg (Hämtad 04-12-2017) Figur 2: https://courses.cs.washington.edu/courses/cse471/07sp/lectures/lecture4.pdf (sida 2) (Hämtad 04-12-2017) Figur 3: http://slideplayer.com/slide/9550916/30/images/19/reorder+buffer.jpg (Hämtad 04-12-2017) Figur 4: http://ranger.uta.edu/~al-khaiy/cse3322_fall99/projects/paper/p10.pdf (sida 3) (Hämtad 04-12-2017) Figur 5: http://ranger.uta.edu/~al-khaiy/cse3322_fall99/projects/paper/p10.pdf (Sida 7) (Hämtad 04-12-2017)