Staattinen haarautumisen ennustus

Samankaltaiset tiedostot
52480S TIETOKEARKKITEHTUURIT Tentti

Superskalaariprosessointi

Superskalaariprosessointi

Superskalaariprosessointi

Luento 10: Superskalaari prosessori

Luento 10: Superskalaari prosessori

Rinnakkaistietokoneet luento S

TIEP114 Tietokoneen rakenne ja arkkitehtuuri, 3 op. Assembly ja konekieli

Ongelma(t): Miten tietokoneen käyttöjärjestelmä toimii sisäisesti, jotta resurssit saadaan tehokkaaseen käyttöön?

Käyttöjärjestelmän rakenne

TIEP114 Tietokoneen rakenne ja arkkitehtuuri, 3 op. Assembly ja konekieli

Suorittimen rakenne ja toiminta

Suorittimen rakenne ja toiminta

Intel Pentium Pro -prosessori. tietokonearkkitehtuurit, syksy -96 Ari Rantanen

Suorittimen rakenne ja toiminta

TAMPEREEN TEKNILLINEN YLIOPISTO Digitaali- ja tietokonetekniikan laitos. Harjoitustyö 2: DLX I - arkkitehtuuri

Ongelma(t): Miten mikro-ohjelmoitavaa tietokonetta voisi ohjelmoida kirjoittamatta binääristä (mikro)koodia? Voisiko samalla algoritmin esitystavalla

TKT-3201 Tietokonearkkitehtuuri 2

Rinnakkaistietokoneet luento S

Rinnakkaistietokoneet luento S

Suoritin. Luento 5 Suoritin ja väylä. TTK-91 muistin rakenne. TTK-91 suorittimen rakenne

Harjoitustyö 3: DLX kontrolli

Suoritin. Jakso 5 Suoritin ja väylä. TTK-91 muistin rakenne. TTK-91 suorittimen rakenne

Luento 5 (verkkoluento 5) Suoritin ja väylä

LOAD R1, =2 Sijoitetaan rekisteriin R1 arvo 2. LOAD R1, 100

Luento 1 Tietokonejärjestelmän rakenne

Luento 1 Tietokonejärjestelmän rakenne. Järjestelmän eri tasot Laitteiston nopeus

Käyttöjärjestelmät: prosessit

Tietokoneen rakenne: Harjoitustyö. Motorola MC prosessori

Luento 3 (verkkoluento 3) Ttk-91 konekielinen ohjelmointi. Ohjelman esitysmuoto Konekielinen ohjelmointi ttk-91:llä (Titokone, TitoTrainer)

4. Luento: Prosessit ja säikeets. Tommi Mikkonen,

Rinnakkaisuuden hyväksikäyttö peleissä. Paula Kemppi

Luento 1 Tietokonejärjestelmän rakenne

Käännös, linkitys ja lataus

Jakso 5 Suoritin ja väylä

Luento 2 (verkkoluento 2) Ttk-91 järjestelmä

Luento 1 Tietokonejärjestelmän rakenne. Järjestelmän eri tasot Laitteiston nopeus

Jakso 5 Suoritin ja väylä

Suoritinesimerkit RISC- arkkitehtuuri

Tietojenkäsittelyn perusteet 2. Lisää käyttöjärjestelmistä

Käyttöjärjestelmät. Tietokoneen rakenne. Stallings, Luku 1. KJ-I S2003 / Auvo Häkkinen, CT50A2602 / Leena Ikonen 1-1

IA-64. Tietokoneen rakenne. Stallings: Ch 15 Yleistä IA-64:stä Predikointi Spekulointi Ohjelmoitu liukuhihna Itanium 2 Intel Multi-core ja STI Cell

Tietokonearitmetiikka

Luento 12: Kontrollin toteutus Ch [Sta06] Mikro-operaatiot Ohjaussignaalit Langoitettu ohjaus Mikro-ohjelmoitu ohjaus

Ohjausyksikkö. Tietokoneen rakenne. Ch [Sta06] Mikro-operaatiot Ohjaussignaalit Langoitettu ohjaus Mikro-ohjelmoitu ohjaus.

Suoritinesimerkit RISC- arkkitehtuuri

Suoritinesimerkit RISC- arkkitehtuuri

RISC-arkkitehtuuri Ch 13 [Sta06] Käskyanalyysia RISC vs. CISC Rekisterien käytöstä

Laitteistonläheinen ohjelmointi

Luento 9: RISC-arkkitehtuuri Luento 9 EAX, EBX, EBX, EDX, ESP, EBP, ESI, EDI CS, SS, DS, ES, FS, GS. (Sta06 Table 12.

Luento 12: Kontrollin toteutus Luento 12. u Millainen käskykanta käytössä, mitä käskyt tekevät? u Mikä operaatio, missä operandit?

Jakso 5 Suoritin ja väylä. Suorittimen rakenne Väylän rakenne Käskyjen suoritussykli Poikkeukset ja keskeytykset TTK-91:n ja KOKSI:n rakenne

11/20: Konepelti auki

Luento 2 (verkkoluento 2) Ttk-91 järjestelmä

AUTO3030 Digitaalitekniikan jatkokurssi, harjoitus 2, ratkaisuja

Teemun juustokakku Rekisterien, välimuistin, muistin, levymuistin ja magneettinauhan nopeudet suhteutettuna juuston hakuaikaan juustokakkua tehdessä?

TAMPEREEN AMMATTIKORKEAKOULU Tietotekniikan koulutusohjelma Tietokonetekniikka. Tutkintotyö. Emil Palomäki INTEL CORE -MIKROARKKITEHTUURI

Luento 5 (verkkoluento 5) Suoritin ja väylä

Tietokonearitmetiikka

Tietokoneen mysteeri sekventiaalilogiikka

Tieto ja sen osoite (3) Jakso 3 Konekielinen ohjelmointi (TTK-91, KOKSI) Osoitinmuuttujat. Tieto ja sen osoite (5)

ELEC-C3240 Elektroniikka 2

Tietokonearitmetiikka

ltöä rjestelmä Luento 2: LAITTEISTOSTA Tietokonejärjestelm KESKUSYKSIKKÖ Keskusyksikkö Kuva 1.1 KJ-I S2005 / Tiina Niklander & Auvo Häkkinen 2-1

Tietokonearitmetiikka

Jakso 3 Konekielinen ohjelmointi (TTK-91, KOKSI)

Ongelma(t): Miten tietokoneen komponentteja voi ohjata siten, että ne tekevät yhdessä jotakin järkevää? Voiko tietokonetta ohjata (ohjelmoida) siten,

SISÄLLYS sisällys 1 Tietokoneen toimintaperiaate ja käyttö 2 Tietokoneen historia 3 Tietokoneen rakenteen ja toiminnan perusteet

Laitteistonläheinen ohjelmointi

Algoritmit 1. Luento 3 Ti Timo Männikkö

Luento 5 Suoritin ja väylä

Luento 11: IA-64 ja muut esimerkit Luento 11 EPIC. u Uutta semantiikkaa konekielen tasolle. u Käsittelee käskyjä nipuissa (bundle)

1. Keskusyksikön rakenne

7.4 Sormenjälkitekniikka

12. Javan toistorakenteet 12.1

Concurrency - Rinnakkaisuus. Group: 9 Joni Laine Juho Vähätalo

Käyttöjärjestelmät: poissulkeminen ja synkronointi

Tietokoneen mysteeri ohjelmoitava kone

Suoritin. Luento 5 Suoritin ja väylä. TTK-91 suorittimen rakenne (1) TTK-91 muistin rakenne. Käskyjen nouto- ja suoritussykli (5)

2) Aliohjelma, jonka toiminta perustuu sivuvaikutuksiin: aliohjelma muuttaa parametrejaan tai globaaleja muuttujia, tulostaa jotakin jne.

TIES325 Tietokonejärjestelmä. Jani Kurhinen Jyväskylän yliopisto Tietotekniikan laitos

Jakso 3 Konekielinen ohjelmointi (TTK-91, KOKSI)

Luento 12: Kontrollin toteutus Ch [Sta06] Mikro-operaatiot Ohjaussignaalit Langoitettu ohjaus Mikro-ohjelmoitu ohjaus

Transmeta Architecture

Luento 12: Kontrollin toteutus Luento 12. u Mikä operaatio, missä operandit? u Miten keskeytykset hoidellaan?

Transmeta Architecture

Aktivaatiotietue. Yleiskäsite funktio (aliohjelma) -mekanismin tarvitsemille tiedoille. Kehysosoitin (%fp) missä tiedot ovat

11. Javan toistorakenteet 11.1

Luento 1 (verkkoluento 1) Tietokonejärjestelmä

Luento 2 TTK-91 tietokone ja sen KOKSI simulaattori

Jakso 12 Yhteenveto. Keskeiset asiat Teemu Kerola, K2000

Rinnakkaistietokoneet luento S

Luento 2 TTK-91 tietokone ja sen KOKSI simulaattori. Miksi konekieltä? Tietokone TTK-91. Miksi ei oikeaa konekieltä?

Luento 2 TTK-91 tietokone ja sen KOKSI simulaattori

2 Konekieli, aliohjelmat, keskeytykset

Sulautettujen järjestelmien skaala on niin laaja, että on erittäin vaikea antaa yleispätevää kuvausta siitä millainen on sulautettu järjestelmä.

Luento 5 Suoritin ja väylä

Luento 1 (verkkoluento 1) Ohjelman sijainti Ohjelman esitysmuoto Laitteiston nopeus

Tietokoneen toiminta, K Tavoitteet (4)

Intel Threading Building Blocks

Transkriptio:

Staattinen haarautumisen ennustus haarautumishasardi ratkaistaan olettamalla haarautumispäätöksen tulos ilman, että odotetaan oikean haarautumisehdon laskennan tulosta 1 Predict not taken ennustetaan aina, että haarautumista ei tehdä: jatka käskynhakua sekventiaalisesta käskyvirrasta, jolloin liukuhihna pysäytetään ainoastaan silloin, kun haarautuminen tehdään (virheellinen ennustus) #96 Jos haaraudutaan, tyhjennä haarautumiskäskyn jälkeiset käskyt (liukuhihnan alussa olevat käskyt): IF-, ID- ja EX-tasoilta, jos haarautumislogiikka MEM-tasossa: 3 stall-jaksoa IF- ja ID-tasoilta, jos haarautumislogiikka EX-tasossa: 2 stall-jaksoa IF-tasolta, jos haarautumislogiikka on ID-tasossa: 1 stall-jakso Varmista, että poistetut käskyt eivät ole muuttaneet koneen tilaa MIPS-liukuhihnassa automaattinen, koska koneen tilan vaihtavat operaatiot ovat liukuhihnan lopussa: MemWrite (MEM) tai RegWrite (WB) Käynnistä liukuhihna uudelleen haarautumisen kohteesta

Liukuhihnan tyhjennys ennustuksen epäonnistuessa I n s t r. O r d e r 4 beq $1,$2,2 8 sub flush $4,$1,$5 16 and $6,$1,$7 20 or r8,$1,$9 ALU IM Reg DM Reg ALU IM Reg DM Reg ALU IM Reg DM Reg ALU IM Reg DM Reg IF-tasolla olevan käskyn poistamiseksi, aseta IF/IDliukuhihnarekisterin käskykenttä IF.Flush nollaksi(käskystä tulee noop) #98

#99 Haarautumisrakenteet Ennustus, että haarautumista ei tehdä, toimii hyvin top of the loop -haarautumisrakenteessa Loop: beq $1,$2,Out Mutta tällaisissa silmukoissa on hyppyjä silmukan lopusta alkuun joka aiheuttaa stall-jakson hypyn ansiosta 1 nd loop instr... last loop instr j Loop Out: fall out instr Ennustus, että haarautumista ei tehdä, ei toimi bottom of the loop -haarautumisrakenteen yhteydessä Loop: 1 st loop instr 2 nd loop instr... last loop instr bne $1,$2,Loop fall out instr

Staattinen haarautumisen ennustus, Ratkaistaan haarautumishasardi olettamalla haarautumispäätöksen tulos ja jatkamalla suoritusta 2 3 Predict taken Ennusta, että haarautuminen tullaan aina tekemään Predict taken tuottaa aina yhden stall -jakson (jos haarautumislogiikka on siirretty ID-tasoon) Kun haarautumisen kustannus kasvaa (pidemmissä liukuhihnoissa), yksinkertainen staattinen ennustusmenetelmä voi heikentää suorituskykyä Laitteistoa lisäämällä on mahdollista yrittää ennustaa haarautumiskäyttäytymistä dynaamisesti ohjelman suorituksen aikana Dynaaminen haarautumisen ennustus ennusta haarautuminen ajoaikana käyttäen ajoaikaisia tietoja #100

#101 Dynaaminen haarautumisen ennustus IF-tasolla sijaitseva haarautumishistoriapuskuri (branch history table (BHT)), jota osoittaa PC:n alimmat bitit, sisältää bittejä IF/ID-liukuhihnarekisteristä ID-tasolle vietyjä bittejä, jotka kertovat onko haarautuminen suoritettu edellisellä suorituskerralla Ennustusbitti voi ennustaa väärin (väärä ennustus haarautumiseen tällä iteraatiokierroksella tai kyseessä voi olla toinen haarautuminen, jonka käskyosoitteessa on samat vähiten merkitsevät bitit), mutta virheellisellä ennustuksella ei ole vaikutusta laskennan lopputulokseen, ainoastaan suorituskykyyn Haarautumispäätös tehdään ID-tasolla sen jälkeen kun on haettu käsky on tulkittu ja havaittu haarautumiskäskyksi ja BHT:stä on tarkastettu ennustusbitit) Jos ennustus on väärä, väärät käskyt poistetaan liukuhihnasta (flush), liukuhihna käynnistetään uudelleen oikeilla käskyillä ja ennustusbitit invertoidaan 4096-bittinen BHT: väärinennustus vaihtelee 1% (nasa7, tomcatv) - 18% (eqntott)

Haarautumiskohdepuskuri BHT ennustaa milloin haarautuminen tulisi tehdä, mutta ei kerro minne! #102 IF-tasolla oleva haarautumiskohdepuskuri (branch target buffer, BTB) tallettaa haarautumisen kohdeosoitteet, mutta myös seuraava sekventiaalinen osoite on haettava. IF/ID-tason ennustusbitti valitsee kumpi seuraava käsky ladataan IF/ID seuraavalla kellon nousevalla reunalla Käskymuistiin tarvitaan kaksi lukuporttia Tai: BTB tallettaa myös haarautumiskohteen käskyn, samaan aikaan kuin käskymuistista haetaan seuraavaa sekventiaalista käskyä Instruction Memory Read 0 Address Jos ennustus on oikein, liukuhihnaa ei tarvitse pysäyttää haarautumiskäskyn takia (paitsi ensimmäisellä kerralla, jolloin BTB on tyhjä) PC BTB

1-bittisen ennustuksen tarkkuus 1-bittinen ennustaja on väärässä kahdesti, jos ei haarauduta Oletetaan, että alussa predict_bit = 0 (indikoi haarautumista ei tapahtunut) ja silmukan ohjaus on silmukkakoodin lopussa 1:llä kerralla ennustetaan väärin, koska haarautuminen tapahtuu takaisin silmukan alkuun; invertoidaan ennustusbitti (predict_bit = 1) Niin kauan kuin haarautuminen tapahtuu (iterointi), ennustus on oikein Silmukasta poistuttaessa ennustetaan taas väärin, koska nyt haarautumista ei tapahdu; invertoidaan ennustusbitti (predict_bit = 0) Loop: 1 st loop instr 2 nd loop instr... last loop instr bne $1,$2,Loop fall out instr Esim. suoritettaessa silmukka 10 kertaa, saadaan 80% ennustustarkkuus haarautumiselle, joka tapahtuu 90% #103 tapauksista

2-bittinen ennustaja 2-bittisellä ennustajalla voidaan saavuttaa 90% tarkkuus, koska ennusteen pitää olla väärin kahdesti ennen kuin ennustebitin tila vaihdetaan oikein 9 kertaa Väärin silmukasta Taken poistuttaessa. 1 Taken 0 Predict Taken 11 Predict Not Taken 01 Not taken Taken Not taken Taken 10 Oikein 1:llä iteraatiolla Predict Taken Predict Not Taken 00 1 Not taken Not taken 0 Loop: 1 st loop instr 2 nd loop instr.. last loop instr bne $1,$2,Loop fall out instr BHT tallettaa myös tilakoneen alkutilan #105

Poikkeuksien hallinta Poikkeukset (exception) tai keskeytykset (interrupt) ovat yksi kontrollihasardin muoto Poikkeuksen syy voi olla R-tyypin aritmetiikkaoperaation ylivuoto Yritys suorittaa laiton käsky I/O-laitteen palvelupyyntö OS palvelupyyntö Laitteiston virhetoiminto Liukuhihna on lopetettava uhkaavan käskyn suoritus: aiemmat käskyt suoritetaan loppuun, seuraavat käskyt tyhjennetään liukuhihnasta, asetetaan poikkeuksen syy rekisteriin, talletetaan uhkaavan käskyn osoite ja hypätään ennelta määrättyyn osoitteeseen (poikkeuksen käsittelijän osoite) ohjelmisto (OS) tarkastaa poikkeuksen syyn ja suorittaa tarvittavat toimenpiteet poikkeuksesta toipumiseksi #106

Kaksi poikkeustyyppiä keskeytys asynkroninen ohjelman suorituksen suhteen aiheutuvat ulkoisista tapahtumista Voidaan käsitellä käskyjen välissä, joten liukuhihnassa olevat aktiiviset käskyt voidaan suorittaa loppuun ennen kontrollin siirtämistä OS:n keskeytyskäsittelijälle simply suspend and resume user program Ansa ohjelman suorituksen suhteen synkroninen Aiheutuvat sisäisistä tapahtumista Ansan käsittelijän on korjattava tilanne: uhkaava käsky on pysäytettävä liukuhihnan keskellä ja annettava kontrolli OS:n ansan käsittelijälle Uhkaava käsky voidaan yrittää suorittaa uudestaan ja jatkaa suoritusta tai ohjelman suoritus lopetetaan #107

Missä poikkeus ilmenee liukuhihnassa? ALU IM Reg DM Reg liukuhihnataso(t)? synkroninen? Aritmetiikan ylivuoto EX kyllä Laiton käsky ID kyllä I/O-palvelupyyntö mikä tahansa ei Laitteistovika mikä tahansa ei Yhdellä kellojaksolla voi tapahtua useampia poikkeuksia #109

Useampi samanaikainen poikkeus I n s t r. O r d e r Inst 0 Inst 1 Inst 2 Inst 3 Inst 4 ALU IM Reg DM Reg ALU IM Reg DM Reg ALU IM Reg DM Reg I$ page fault D$ page fault arithmetic overflow undefined instruction ALU IM Reg DM Reg ALU IM Reg DM Reg #111 Laitteisto lajittelee poikkeukset siten, että aikaisin käsky keskeytetään ensimmäiseksi

Lisäyksiä MIPS:iin poikkeuksien käsittelyyn (Fig 6.42) Cause -rekisteri (tallettaa poikkeukset) laitteisto poikkeuksen syyn tallentamiseen ja signalointi rekisterin kirjoitusta varten (CauseWrite) EPC -rekisteri (tallettaa uhkaavien käskyjen osoitteet) laitteisto uhkaavien käskyjen osoitteiden tallentamiseen EPCrekisteriin ja signalointi kirjoitusta varten (EPCWrite) Poikkeuksen käsittelyohjelmiston pitää vastata poikkeuksen käskyä Tarvitaan menetelmä käsittelijän alkuosoitteen lataamiseksi ohjelmalaskuriin Laajennetaan ohjelmalaskurin sisääntulo-mux langoitetulla poikkeuksenkäsittelijän osoitteella - (esim. 8000 0180 hex aritmetiikan ylivuoto) Tarvitaan menetelmä tyhjentää uhkaavat käskyt ja sitä seuraavat käskyt liukuhihnasta #112

PC Datapolku: tuki poikkeuksille 4 Instruction Memory Read 0 Address 8000 0180 hex Add IF.Flush IF/ID PCSrc Hazard ID.Flush Unit 0 1 Control 0 Shift left 2 Read Addr 1 RegFile Read Addr 2 Read Data 1 Write Addr ReadData 2 Write Data 16 Sign Extend Forward Unit Branch Add 32 Compare ID/EX Cause EPC EX.Flush 0 0 ALU ALU cntrl EX/MEM Data Memory Read Data Address Write Data MEM/WB Forward Unit #113

Vielä lisää suorituskykyä Liukuhihnan syvyyden lisääminen kasvattaa kellotaajuutta superpipelining Mitä enemmän liukuhihnatasoja, sitä enemmän forwarding/hasardilaitteistoa tarvitaan ja liukuhihnan hallinta vie yhä suuremman osan kellojakson ajasta (latch-time) Haetaan (ja suoritetaan) useampi kuin 1 käsky kerralla (laajenna jokainen liukuhihnataso tukemaan useampia käskyjä) multiple-issue Käskynsuoritustaajuus CPI < 1, joten käytetään IPC: instructions per clock cycle #114 Esim, 6 GHz 4-tie prosessori voi suorittaa max. 24 milj. käskyä / sec., CPI: 0.25 tai parhaassa tapauksessa IPC on 4 Jos datapolussa 5 tasoa, kuinka monta käskyä liukuhihnassa on aktiivisena kullakin ajan hetkellä?

#115 Rinnakkaisuuden tasoja Ohjelman käskytason rinnakkaisuus (instruction-level parallelism, ILP) mittaa ohjelman keskimääräistä ohjelman käskyjen määrää, jotka prosessori voisi suorittaa samanaikaisesti Määräytyy pääasiassa käskyn todellisten (data) riippuvuuksien ja menettelytapa (kontrolli) riippuvuuksien perusteella suhteessa muihin käskyihin Datatason rinnakkaisuus, data-level parallelism (DLP) DO I = 1 TO 100 A[I] = A[I] + 1 CONTINUE Prosessorin konetason rinnakkaisuus, machine parallelism mittaa prosessorin kykyä hyödyntää ohjelman ILP:tä Käskyjen lukumäärä, joita voidaan hakea ja suorittaa samanaikaisesti Suorituskyvyn kasvattamiseksi tarvitaan molempia, sekä ILP että konerinnakkaisuus

Multiple-Issue -prosessorit 1Staattinen multiple-issue prosessori (very long instruction word machine, VLIW) Päätös siitä, mitkä käskyt suoritetaan samanaikaisesti, tehdään staattisesti (käännösaikana kääntäjän toimesta)) Esim., Intel Itanium ja Itanium 2 : IA-64 ISA EPIC (Explicit Parallel Instruction Computer) 128-bittiset kimput sisältävät 3 käskyä, jokainen 41 bittiä + 5-bittinen mallinekenttä (joka määrittää mitä toiminnallista yksikköä kukin käsky tarvitsee) 5 toiminnallista yksikköä (IntALU, Mmedia, Dmem, FPALU, Branch) Laaja tuki spekuloinnille ja ennustukselle Dynaaminen multiple-issue prosessori (superscalar) Päätös siitä, mitkä käskyt suoritetaan samanaikaisesti (luokkaa 2-8), tehdään dynaamisesti (ajoaikana erillisen laitteiston toimesta) Esim. IBM Power series, Pentium 4, MIPS R10K, AMD Barcelona #116

Multiple-Issue Prosessorit Pipelined IF 0 IF 1 IF 2 IF 3 ID 0 ID 1 ID 2 ID 3 Superscalar IF 0 IF 2 VLIW IF 0 IF 1 ID 0 ID 1 IF 1 IF 3 OF 0 OF 1 OF 2 OF 3 EX 0 EX 1 EX 2 EX 3 ID 0 ID 2 OF 0 OF 4 ID 1 ID 3 OF 1 OF 5 aika OF 0 OF 2 OF 1 OF 3 OF 2 OF 6 OF 3 OF 7 EX 0 EX 2 EX 0 EX 4 EX 1 EX 3 EX 1 EX 5 aika EX 2 EX 6 EX 3 EX 7 aika #117

Multiple-Issue -datapolku Käsiteltävä seuraavat rajoitteet Kuinka monta käskyä otetaan suoritukseen yhdellä kellojaksolla issue slots Tallennus- (data-) riippuvuudet data hasardit SS/VLIW prosessorissa suuremmat rajoitteet vähäisestä ILP:stä johtuen Proseduuririippuvuudet kontrollihasardit Kuten edellä, mutta vakavampia rajoitteita Käytetään dynaamista haarautumisen ennustusta ILP-rajoitteen kiertämiseksi Resurssikonfliktit rakennehasardit SS/VLIW prosessorissa on suurempi todennäköisyys resurssikonfliktiin Toiminnalliset yksiköt voivat joutua kilpailemaan tulosväylien tai rekisteritiedoston kirjoitus-porttien käytöstä Resurssikonfliktit voidaan eliminoida kahdentamalla tai liukuhihnoittamalla resurssi #118

Spekulointi Spekulaatiota käytetään sallimaan tulevan käskyn suoritus, jolla voi olla riippuva spekuloidusta käskystä Spekuloi ehdollisen haarautumisen (branch prediction) Spekuloidaan, että tallennus (kohdeosoitetta ei vielä tiedetä), joka edeltää latauskäskyä, ei viittaa samaan osoitteeseen, mikä mahdollistaa latauksen vuoronnettavan ennen tallennusta (load speculation) Tarvitaan seuraava mekanismit (laitteisto ja/tai ohjelmisto) Tarkastus, oliko arvaus oikein Toipumismekanismi niiden spekuloitujen käskyjen osalta, jotka on arvattu väärin, käskyn aiheuttamien vaikutusten korjaamiseen Jätä huomiotta ja/tai puskuroi poikkeukset, jotka on generoinut spekulatiivisesti suoritettu käsky, kunnes on selvää, että poikkeus on todellakin suoritettava #119

Staattiset Multiple Issue -koneet (VLIW) Staattisen multiple-issue -prosessorin (VLIW) yhteydessä kääntäjä päättää staattisesti (käännösaikana) mitkä käskyt haetaan ja suoritetaan samanaikaisesti Issue packet joukko käskyjä, jotka on niputettu yhteen ja haetaan samalla kellojaksolla yksi pitkä käsky sisältäen useita operaatioita Käskyjoukko nipussa on tavallisesti rajoitettu yksi käsky usealla etukäteen määritellyillä kentillä Kääntäjä ennustaa haarautumisen ja koodin vuoronnuksen staattisesti yrittäen vähentää (kontrolli) tai eliminoidakseen (data) hasardeja VLIW sisältää Useita toiminnallisia yksiköitä Moniporttisia rekisteritiedostoja Leveän ohjelmaväylän #120

Esimerkki: VLIW MIPS Oletetaan multiple-issue MIPS 2:n käskyn nipulla 64 bits ALU Op (R format) Load or Store (I format) or Branch (I format) käskyt haetaan, dekoodataan ja suoritetaan aina pareittain Jos toista parin käskyistä ei voida käyttää, niin se korvataan noop -käskyllä Tarvitaan 4 lukuporttia ja 2 kirjoitusporttia ja erillinen osoitesummain #121

MIPS VLIW (2-issue) datapolku Add Add Ei sisällä hasardilaitteistoa (joten load use ei sallittu) 4 ALU PC Instruction Memory Register File Write Addr Data Write Data Add Memory Sign Extend Sign Extend #122

MIPS VLIW (2-issue) datapolku Add 4 Add PC Instruction Memory Register File Write Addr Data Write Data Add Memory Sign Extend Sign Extend #123

Koodinvuoronnusesimerkki Oletetaan seuraava silmukkakoodi lp: lw $t0,0($s1) # $t0=array element addu $t0,$t0,$s2 # add scalar in $s2 sw $t0,0($s1) # store result addi $s1,$s1,-4 # decrement pointer bne $s1,$0,lp # branch if $s1!= 0 Käskyt on vuoronnettava välttäen liukuhihnan pysäyttämistä Yhdessä nipussa olevien käskyjen on oltava toisistaan riippumattomia load use -käskyt erotettava load-käskyistä vähintään yhdellä kellojaksolla 2 ensimmäisellä käskyllä on load-riippuvuus, 2:lla seuraavalla ja 2:lla viimeisellä datariippuvuus Oletetaan, että laitteisto osaa ennustaa haarautumiset täydellisesti #124

Vuoronnettu koodi (Not Unrolled) ALU or branch Data transfer CC lp: lw $t0,0($s1) 1 addi $s1,$s1,-4 2 addu $t0,$t0,$s2 3 bne $s1,$0,lp sw $t0,4($s1) 4 5 4 kellojaksoa 5 käskyn suorittamiseen CPI: 0.8 (vs. parhaassa tapauksessa 0.5) IPC: 1.25 (vs. parhaassa tapauksessa 2.0) Noop-käskyjä ei lasketa suorituskykyä mitattaessa!! #126

#127 Silmukan iteraatioiden purkaminen Loop unrolling silmukan rungosta tehdään useita kopioita ja eri iteraatiosta olevia käskyjä vuoronnetaan yhteen ILP:n kasvattamiseksi Puretaan iteraatiot (4 kertaa edellisessä esimerkissä) ja tämän jälkeen vuoronnetaan aikaansaatu koodi Eliminoidaan tarpeettomat silmukanohjauskäskyt Vuoronnetaan siten, että vältetään load use hasardeja Silmukoiden purkamisen yhteydessä kääntäjä suorittaa rekisterien uudelleen nimeämisen (register renaming) Eliminoidaan datariippuvuudet, jotka eivät ole todellisia datariippuvuuksia

Unrolled Code Example lp: lw $t0,0($s1) # $t0=array element lw $t1,-4($s1) # $t1=array element lw $t2,-8($s1) # $t2=array element lw $t3,-12($s1) # $t3=array element addu $t0,$t0,$s2 # add scalar in $s2 addu $t1,$t1,$s2 # add scalar in $s2 addu $t2,$t2,$s2 # add scalar in $s2 addu $t3,$t3,$s2 # add scalar in $s2 sw $t0,0($s1) # store result sw $t1,-4($s1) # store result sw $t2,-8($s1) # store result sw $t3,-12($s1) # store result addi $s1,$s1,-16 # decrement pointer bne $s1,$0,lp # branch if $s1!= 0 #128

Vuoronnettu koodi (Unrolled) ALU / branch Datan siirto CC lp: addi $s1,$s1,-16 lw $t0,0($s1) 1 lw $t1,12($s1) 2 addu $t0,$t0,$s2 lw $t2,8($s1) 3 addu $t1,$t1,$s2 lw $t3,4($s1) 4 addu $t2,$t2,$s2 sw $t0,16($s1) 5 addu $t3,$t3,$s2 sw $t1,12($s1) 6 sw $t2,8($s1) 7 bne $s1,$0,lp sw $t3,4($s1) 8 #129 14 käskyn suoritukseen käytetään 8 kellojaksoa CPI: 0.57 (vs. parhaassa tapauksessa 0.5) IPC: 1.8 (vs. parhaassa tapauksessa 2.0)

Predikointi Predikointia voidaan käyttää haarautumisten välttämiseen Käskyn suoritus tehdään riippuvaiseksi predikaatista. Esim. if (p) {statement 1} else {statement 2} normaalisti käännettäisiin kahta haaraa käyttäen, mutta predikoinnilla: (p) statement 1 (~p) statement 2 Ehdon (condition)käyttäminen indikoi, että käsky lähetetään suoritukseen ainoastaan kun condition on tosi Predikointia voidaan käyttää sekä spekulointiin että haarautumisen välttämiseen #130

VLIW -prosessorin kääntäjätuki Kääntäjä pakkaa joukon toisistaan riippumattomia käskyjä nipuksi Tehdään osana koodin uudelleenjärjestelyä (trace scheduling) Kääntäjä purkaa silmukoita ILP:n paljastamiseen Kääntäjä käyttää rekisterin uudelleen nimeämistä nimiriippuvuuksien ratkomiseen ja no load -hasardien välttämiseen Superskalaarit käyttävät dynaamista ennustusta, mutta VLIW:ssä pääasiassa luotetaan kääntäjän tekemiin haarautumisennustuksiin Loop unrolling vähentää ehdollisten haarautumisien määrää Predikointi eliminoi if-the-else rakenteita korvaamalla niitä predikoiduilla käskyillä Kääntäjä ennustaa muistipankkien viittaukset tavoitteena minimoida muistikonfliktien määrä #131

Edut Haitat VLIW edut ja haitat Yksinkertainen laitteisto (potentiaalia energiatehokkuuteen) Mahdollisesti paremmin skaalattavissa Sallitaan enemmän käskyjä nipussa ja lisätään toiminnallisia yksiköitä Ohjelmoinnin / kääntäjän kompleksisuus ja pidemmät käännösajat Syvät liukuhihna ja pitkät latenssit sekoittavat ohjelmoijaa (huippusuorituskyvyn saavuttaminen voi olla vaikeaa) Täysin synkronoitu toiminta; hasardi pysäyttää kaikki käskynhaut, kunnes hasardi on täysin ratkaistu (joten käytetään ennustusta) Objekti (binääri-) koodin yhteensopimattomuus Tarvitaan leveä käskymuisti koodin turpoaminen Noop-käskyt tuhlaavat käskymuistia Loop unrolling käytössä ILP:n maksimoimiseksi, joka käyttää enemmän käskymuistia #132

Superskalaariprosessori (SS) Dynaamiset multiple-issue -prosessorit (SuperScalar) hyödyntävät ajoaikaista laitteistoa dynaamisesti päättelemään mitkä käskyt lasketaan liikkeelle ja suoritetaan samanaikaisesti Käskynhaku ja liikkeellelasku (instruction fetch and issue) hae käskyt, dekoodaa ja ohjaa ne toiminnalliselle yksikölle odottamaan suoritusta #133 Hae, dekoodaa ja ohjaa käskyjä, joka ovat paljon nykyistä käskyä myöhempänä suoritus (instruction-execution) heti, kun operandit ovat saatavilla ja FU ovat vapaana, tulokset voidaan laskea käskynsuoritus käskyille, jotka ovat huomattavasti nykyistä käskyä myöhempänä sitoutuminen (instruction commit) tulokset kirjoitetaan takaisin rekisteritiedostoon tai D$, kun tiedetään, että se on turvallista (i.e., muutetaan koneen tilaa)

Käskyjen järjestys (In-Order, Out-of-Order) Käskynhaku ja dekoodausyksikköjen täytyy tuottaa käskyt järjestyksessä, jotta riippuvuudet voidaan jäljittää Commit yksikön täytyy kirjoittaa tulokset rekistereihin ja muistiin samassa järjestyksessä kuin käskyt on haettu Poikkeuksen tapahtuessa ainoastaan ne rekisterit päivittyvät, joihin kirjoittavat ennen poikkeuksen aiheuttavaa käskyä olevat käskyt Jos haarautuminen ennustetaan väärin, haarautumiskäskyn jälkeen suoritetut käskyt eivät muuta koneen tilaa (Commit-yksikkö korjaa väärät ennustukset) Vaikka liukuhihnan etuosa (fetch, decode, and issue) ja takaosa (commit) käsittelevät käskyt järjestyksessä, FU:t voivat aloittaa operaation suorituksen milloin tahansa kunhan tarvittava data on saatavilla out-of-(program) order execution Suorituksen salliminen epäjärjestyksessä kasvattaa ILP:n määrää #134

Dynaamisesti vuoronnettu CPU Säilyttää riippuvuudet Säilyttää vireillä olevat operandit Tulokset lähetetään kaikille odottaville varausasemille järjestää puskurin uudelleen rekisterikirjoituksia varten Voi syöttääa operandeja aktiivisille käskyille #135

Suoritus epäjärjestyksessä Myöhempi käsky voidaan suorittaa ennen edellistä käskyä, joten laitteiston tulee ratkoa sekä read before write ja write before write data hasardit lw $t0,0($s1) addu $t0,$t1,$s2... sub $t2, $t0, $s2 Jos lw käskyn kirjoitus rekisteriin $t0 tapahtuu addu kirjoituksen jälkeen, niin sub käsky saa väärän arvon rekisteristä $t0 addu -käskyllä on ulostuloriippuvuus käskyyn lw write before write #136

Epäriippuvuudet Laitteiston on käsiteltävä myös epäriippuvuudet (antidependencies) kun (aiemmin suoritettava) myöhempi käsky tuottaa data-arvon, joka hävittää (myöhemmin suoritettavan) aiemman käskyn käyttämän lähdeoperandin R3 := R3 * R5 R4 := R3 + 1 R3 := R5 + 1 Antidependency True data dependency Output dependency Samanlainen rajoite kuin todellisilla datariippuvuuksilla, paitsi käänteinen Sen sijaan, että myöhempi käsky käyttää aiemman käskyn (ei vielä) tuottamaa arvoa (read before write), myöhempi käsky tuottaa arvon, joka tuhoaa aiemman käskyn (ei vielä) käyttämän arvon (write before read) #137

Riippuvuudet, yhteenveto Kaikki kolme riippuvuustyyppiä todellinen datariippuvuus (read before write) epäriippuvuus (write before read) ulostuloriippuvuus (write before write) talletuskonflikti ilmenevät rekisterien (tai muiden talletuspaikkojen) käytössä Todelliset riippuvuudet johtuvat ohjelmasta ja ovat nähtävillä ohjelman datavuokaaviossa Epä- ja ulostuloriippuvuudet johtuvat rekistereiden rajallisesta määrästä ohjelmoija käyttää rekistereitä uudelleen laskennan eri vaiheissa johtaen tallennuskonflikteihin #138

#139 Tallennuskonfliktit ja rekisterin uudelleennimeäminen Tallennuskonflikteja voidaan vähentää (tai eliminoida) lisäämällä ongelmalliseksi osoittautuvaa resurssia Otetaan käyttöön lisärekistereitä, joiden avulla muodostetaan uusi yhteys rekisterin ja arvon välille SS-prosessorissa laitteisto allokoi uudet rekisterit dynaamisesti Rekisterin uudelleen nimeäminen prosessori nimeää käskyssä olevan rekisterin tunnisteen uudelle rekisterille (joka ei näy ohjelmoijalle) arkkitehtuurirekisterit vs. fyysiset rekisterit R3 := R3 * R5 R4 := R3 + 1 R3 := R5 + 1 R3b := R3a * R5a R4a := R3b + 1 R3c := R5a + 1 Nimeämisen suorittava laitteisto valitsee korvaavan rekisterin vapaiden rekisterien varastosta ja vapauttaa rekisterin takaisin varastoon, kun sen arvo on korvattu ja ratkaisemattomia viittauksia rekisteriin ei ole olemassa

Yhteenveto: Lisää suorituskykyä Suorituskyvyn kasvattamiseksi on hyödynnettävä sekä konetason että käskytason (ILP) rinnakkaisuutta Superpipelining Staattinen multiple-issue (VLIW) Dynaaminen multiple-issue (superskalaari) Prosessorin käyttämät mekanismit käskyn liikkeelle laskuun ja suoritukseen vaikuttavat käytettävissä olevaan ILP:een In-order fetch, issue, and commit ja out-of-order execution Liukuhihnoitus luo todellisia riippuvuuksia (read before write) Epäjärjestyksessä suoritus luo epäriippuvuuksia (write before read) Epäjärjestyksessä suoritus luo ulostuloriippuvuuksia (write before write) In-order commit sallii spekuloinnin (ILP:n kasvattamiseksi) ja tarvitaan tarkkojen keskeytysten toteuttamiseksi Rekisterin uudelleen nimeäminen voi ratkoa talletuskonfliktit #140

CISC vs RISC vs SS vs VLIW CISC RISC Superscalar VLIW Instr size variable size fixed size fixed size fixed size (but large) Instr format Registers Memory reference Key Issues variable format few, some special Limited # of ports embedded in many instr s decode complexity fixed format fixed format fixed format Many GP Limited # of ports GP and rename (RUU) Many ports many, many GP Many ports load/store load/store load/store data forwarding, hazards hardware dependency resolution (compiler) code scheduling #141

Liukuhihnoitettujen SS - prosessoreiden evoluutio #142 Year Clock Frequency #Pipeline Stages Issue Widt h Cores/ Chip Power Intel 486 1989 25 MHz 5 1 1 5 W Intel Pentium 1993 66 MHz 5 2 1 10 W Intel Pentium Pro Intel Pentium 4 Willamette Intel Pentium 4 Prescott 1997 200 MHz 10 3 1 29 W 2001 2000 MHz 22 3 1 75 W 2004 3600 MHz 31 3 1 103 W Intel Core 2006 2930 MHz 14 4 2 75 W Sun USPARC III Sun T1 (Niagara) 2003 1950 MHz 14 4 1 90 W 2005 1200 MHz 6 1 8 70 W