DatorsystemteknikDAVA14 Föreläsning 9 epetition: MP likainstruktioneri Exempel på instruktionstyper Processorns uppbyggnad Pipelining törre delen av materialet framtaget av :Jan Eric Larsson, Mats Brorsson och Mirec ovak -inst LH Det finns tre huvudsakligen olika typer av instruktioner som representeras med olika bitmönster - -typ (immediate) instruktioner, tex add t0,t1, - -typ (register) instruktioner, tex add t0,t1,t2 - J-typ (jump) instruktioner, tex j label el jr ra Varje instruktion är lång -typ: addi, ori, beq, lw, sw -typ: add, or, sub, and, sll, srl J-typ: j, jal, jr nnehåll nstruktionersombitmönsteri epetition av instruktionsformat t Vilka byggblock består processorn av? Hur kopplas dessa byggblock samman? - Datavägar. Vad är pipelining? Hur fungerar pipeling i MP? Vilka problem kan man råka ut för med pipelining? Varför finns hoppluckan i MP? Alla instruktioner är ar stora, 4 byte De kodas binärt på något av tre följande sätt: nstruktionstyperi MP -typ op (6) rs (5) rt (5) offset (16) -typ op (6) rs (5) rt (5) rd (5) sa (5) funk (6) J-typ op (6) hoppadress (26) register (-typ) Aritmetiska instruktioner med tre operander i Aritmetiska instruktioner med två operander i register och en konstant operand (-typ) Load-instruktioner (-typ) tore-instruktioner (-typ) PC-relativa hoppinstruktioner (-typ) Absoluta hoppinstruktioner (J-typ) 1
Vadhändermed CPn? instruktionernai Byggblockfören nstruktionshämtning processor - processorn avkodas instruktionernas bitmönster med logik lika delar av instruktionen utför olika uppgifter Vadmåsteprocessorngöra? Hämta instruktionen Avkoda instruktionen Hämta instruktionens operander: Antingen i register eller direkt ur instruktionen (om -typ) tföra instruktionen: Addera, jämföra, hoppa kriva resultatet till destinationen: - register (add, sub, ) - (lw, sw) - programräknaren (hoppinstruktioner) Byggblockfören Byggblockfören - PC innehåller adressen till egistren processor - +4 nästa instruktion. - PC stegas upp med 4 varje gång (normalt) Adderare nstruktion nstruktions- PC Adress locka egisternummer n 1 n 2 t AL: Aritmetisk-logiskenhet processor - läs reg. 1 nr läs reg. 2 nr skriv reg. nr läs data 1 Datat egisternummer: : 5 bit adress data in egistren är organi- serade som 32 parallella D-vippor per register data ut skrivstyrning krivstyrningen väljer om data läses från eller skrivs till t krivstyrningen Med styrsignalerna kan funktionen hos AL:n påverkas. Exempel: tyrsignal Funktion 000 add 001 sub 010 or 110 slt 2
Datavägar Processorn byggs upp genom att definiera Datavägar-addit0,t1, (-typ) datavägar, dvs hur data transporteras mellan olika enheter Vi ska titta på några olika instruktioner för att se hur datavägarna ser ut Datavägar-add t0,t1,t2 (-typ) Datavägar-lwt0,(t1) Läs (-typ) Läs reg 2 kriv reg p & funk läs data 1 n 1 n 2 tyrlogik AL t Datavägar-swt0,(t1) (-typ) kriv reg (16bit) p läs data 1 n 1 tyrlogik n 2 AL t kriv reg (16bit) p läs data 1 n 1 tyrlogik n 2 AL adr data ut Läs reg 2 (16bit) läs data 1 n 1 n 2 AL adr data ut Datavägar-observationer Byggblocken som används är de samma hela tiden De används i princip i samma ordning Byggblocken kopplas ihop på olika sätt för olika instruktioner - detta löser man med multiplexorer som styrs av styrlogiken p tyrlogik 3
C-processorer Pipelining i MP nstruktionerna är lätta att avkoda En C-arkitektur kännetecknas framför allt av följande egenskaper: Det finns många register som inte har specialfunktioner Bara speciella load- och store-instruktioner får lov att referera till t Hur kan principen utnyttjas för MP? Fem olika klara steg i exekveringen: - F, nstruction fetch - D, nstruction decode - avkodning och registerläsning - EXE, Beräkning av resultat el adress i AL - MEM, Minnesaccess - WB, skriv resultatet i register Hur representeras pipeliningen grafiskt? nstruktionsordning lw $10,0($1) lockcykler CC1 CC2 CC3 CC4 CC5 CC6 F D EXE MEM WB Listigare processorn implementeringav Pipelining i MP Problem med pipelining trukturen vi beskrivit kan användas för att köra en instruktion i taget Men - byggblocken är ju klart separerade: Vi skulle kunna använda olika byggblock till olika instruktioner samtidigt! Exekveringsstrukturen delas upp enligt dessa delar (F, D, EXE, MEM, WB) För att separera mellanresultaten inför vi sk pipelineregister mellan de olika stegen trukturella konflikter (löses genom att dela upp cachet i två delar, en för instruktioner och en för data). sub $11,$2,$3 F D EXE MEM WB Datakonflikter (löses med hjälp av bubblor och återkoppling). 4
Load-instruktioner Data som läses in med en load-instruktion Hoppinstruktioner finns inte tillgänglig förrän för andra instruktionen efter load-instruktionen. m vi gör ett hopp kommer instruktioner i pipelinen efter hoppinstruktionen inte att köras Vi måste då tömma pipelinen (två klockcykler går förlorade). ammanfattning Alternativt: en enkel jämförare direkt på registerbankens utgångar (en klockcykel går förlorad om inte något nyttigt kan göras direkt efter hoppinstruktionen). Hoppinstruktioner Exempel: Hoppinstruktioner och pipeline beq t0,t1,l2 # i EXE-steget add s0,s1,s2 # i D-steget sub s3,s4,s5 # i F-steget L2: and s6,s7,s8 Prediktion: hoppet kommer inte att göras. m hoppet ändå görs, tömmer vi pipelinen. Vi vet om hoppet kommer att göras när hoppinstruktionen når EXE-steget För att inte förlora för mycket, kör vi färdigt nästa instruktion också (den är ju redan i D-steget). Därför finns HPPLCA! Vad gör egentligen processorn med instruktionerna? Vilka byggblock består processorn av? Hur ser datavägarna ut för de olika instruktionerna? Vilken är idén bakom pipelining? Hur ser pipelining ut i MP? Varför finns hoppluckan? 5