Számítógép Architektúrák

Hasonló dokumentumok
SZÁMÍTÓGÉP ARCHITEKTÚRÁK

SZÁMÍTÓGÉP ARCHITEKTÚRÁK

Számítógép Architektúrák

SZÁMÍTÓGÉP ARCHITEKTÚRÁK

Számítógépek felépítése

Számítógépek felépítése, alapfogalmak

Számítógép architektúrák. A mai témák. A teljesítmény fokozás. A processzor teljesítmény növelése

SzA19. Az elágazások vizsgálata

A mai témák. Számítógép architektúrák. CISC és RISC. A teljesítmény fokozás. További előnyök. A RISC gondolat

Digitális rendszerek. Digitális logika szintje

Adatok ábrázolása, adattípusok

Memóriák - tárak. Memória. Kapacitás Ár. Sebesség. Háttértár. (felejtő) (nem felejtő)

Assembly. Iványi Péter

8. Fejezet Processzor (CPU) és memória: tervezés, implementáció, modern megoldások

Mikroprocesszor CPU. C Central Központi. P Processing Számító. U Unit Egység

Bevezetés az informatikába

sallang avagy Fordítótervezés dióhéjban Sallai Gyula

Számítógép felépítése

8. Fejezet Processzor (CPU) és memória: tervezés, implementáció, modern megoldások

Digitális technika VIMIAA01 9. hét Fehér Béla BME MIT

Digitális technika VIMIAA01 9. hét

SZÁMÍTÓGÉP ARCHITEKTÚRÁK

Számítógép Architektúrák

Architektúra, megszakítási rendszerek

A mikroprocesszor egy RISC felépítésű (LOAD/STORE), Neumann architektúrájú 32 bites soft processzor, amelyet FPGA val valósítunk meg.

Számítógép architektúrák záróvizsga-kérdések február

Máté: Számítógép architektúrák

VLIW processzorok (Működési elvük, jellemzőik, előnyeik, hátrányaik, kereskedelmi rendszerek)

Számítógép architektúrák I. Várady Géza

Informatika 1 2. el adás: Absztrakt számítógépek

Informatika érettségi vizsga

Számítógépek felépítése, alapfogalmak

Digitális rendszerek. Utasításarchitektúra szintje

VEZÉRLŐEGYSÉGEK. Tartalom

2. Számítógépek működési elve. Bevezetés az informatikába. Vezérlés elve. Külső programvezérlés... Memória. Belső programvezérlés

Központi vezérlőegység

Grafikus csővezeték 1 / 44

Számítógépes alapismeretek

Magas szintű optimalizálás

Nagy adattömbökkel végzett FORRÓ TI BOR tudományos számítások lehetőségei. kisszámítógépes rendszerekben. Kutató Intézet

Architektúra, cache. Mirıl lesz szó? Mi a probléma? Teljesítmény. Cache elve. Megoldás. Egy rövid idıintervallum alatt a memóriahivatkozások a teljes

Operandus típusok Bevezetés: Az utasítás-feldolgozás menete

Számítógép Architektúrák

Számítógép architektúra

Számítógép Architektúrák

Hardver Ismeretek IA32 -> IA64

ELŐADÁS SZÁMÍTÓGÉP MŰKÖDÉSE FIZIKA ÉS INFORMATIKA

Processzusok (Processes), Szálak (Threads), Kommunikáció (IPC, Inter-Process Communication)

Számítógép Architektúrák

A fordítóprogramok szerkezete. Kódoptimalizálás. A kódoptimalizálás célja. A szintézis menete valójában. Kódoptimalizálási lépések osztályozása

5-6. ea Created by mrjrm & Pogácsa, frissítette: Félix

Máté: Számítógép architektúrák

Digitális rendszerek. Mikroarchitektúra szintje

A programozás alapjai

Elvonatkoztatási szintek a digitális rendszertervezésben

A processzor hajtja végre a műveleteket. összeadás, szorzás, logikai műveletek (és, vagy, nem)

Hatékony memóriakezelési technikák. Smidla József Operációkutatási Laboratórium január 16.

Processzusok (Processes), Szálak (Threads), Kommunikáció (IPC, Inter-Process Communication)

Számítógép Architektúrák

Számítógép architektúrák. Korszerű architektúrák

Egyszerű RISC CPU tervezése

Számítógép architektúrák. A processzor teljesítmény növelése

Nyíregyházi Egyetem Matematika és Informatika Intézete. Input/Output

Számítógép Architektúrák

Első sor az érdekes, IBM PC ra alapul: 16 bites feldolgozás, 8 bites I/O (olcsóbb megoldás). 16 kbyte RAM. Nem volt háttértár, 5 db ISA foglalat

Számítógép architektúrák Korszerű architektúrák Mai program Pentium P6 processzor (esettanulmány) Párhuzamosítások a CPU-n kívül

Bevezetés az informatikába

SZÁMÍTÓGÉP ARCHITEKTÚRÁK

Matematikai és Informatikai Intézet. 4. Folyamatok

Bevezetés. Többszálú, többmagos architektúrák és programozásuk Óbudai Egyetem, Neumann János Informatikai Kar

OPERÁCIÓS RENDSZEREK. Elmélet

Programozás alapjai C nyelv 4. gyakorlat. Mit tudunk már? Feltételes operátor (?:) Típus fogalma char, int, float, double

Összeadás BCD számokkal

Labor gyakorlat Mikrovezérlők

1. Az utasítás beolvasása a processzorba

Programozási nyelvek (ADA)

Bevitel-Kivitel. Eddig a számítógép agyáról volt szó. Szükség van eszközökre. Processzusok, memória, stb

Digitális technika VIMIAA01

Processzor (CPU - Central Processing Unit)

elektronikus adattárolást memóriacím

Számítógép Architektúrák I-II-III.

Mikrorendszerek tervezése

Mit tudunk már? Programozás alapjai C nyelv 4. gyakorlat. Legnagyobb elem keresése. Feltételes operátor (?:) Legnagyobb elem keresése (3)

Vezérlésfolyam gráf és X86 utasításkészlet

Máté: Számítógép architektúrák

3. Az elektronikus számítógépek fejlődése napjainkig 1

Az interrupt Benesóczky Zoltán 2004

A mikroprocesszor felépítése és működése

VI. SZOFTVERES PROGRAMOZÁSÚ VLSI ÁRAMKÖRÖK

A mikroszámítógép felépítése.

Bepillantás a gépházba

2017/12/16 21:33 1/7 Hardver alapok

Számítógép Architektúrák

Adatszerkezetek Tömb, sor, verem. Dr. Iványi Péter

ARM Cortex magú mikrovezérlők

Mikroprocesszorok (Microprocessors, CPU-s)

Mintavételes szabályozás mikrovezérlő segítségével

SZÁMÍTÓGÉPEK BELSŐ FELÉPÍTÉSE - 1

Uniprogramozás. várakozás. várakozás. Program A. Idő. A programnak várakoznia kell az I/Outasítások végrehajtására mielőtt továbbfuthatna

GPU Lab. 4. fejezet. Fordítók felépítése. Grafikus Processzorok Tudományos Célú Programozása. Berényi Dániel Nagy-Egri Máté Ferenc

Átírás:

Soron kívüli utasítás-végrehajtás Horváth Gábor 2016. április 27. Budapest docens BME Hálózati Rendszerek és Szolgáltatások Tsz. ghorvath@hit.bme.hu

Különböző késleltetésű műveletek Láttuk, hogy a lebegőpontos műveletek késleltetése nagyobb 2

Különböző késleltetésű műveletek C kód: Elemi utasítások: for (i=0; i<n; i++) Z[i]=A*X[i]; A: D0 X[i]: MEM[R1] Z[i]: MEM[R2] Utasítások ütemezése: (szorzás: 5 órajel, egész és memóriaművelet: 1 órajel) Utasítások: 1. 2. 3. 4. 5. IF ID EX MEM WB IF ID A* IF F* 6. 7. 8. 9. 10. 11. 12. 13. M0 M1 M2 M3 M4 MEM WB ID A* A* A* A* EX MEM WB IF F* F* F* F* ID EX MEM WB IF ID EX MEM 14. WB 3

Optimalizálás Optimalizáljuk a programot a sorok átrendezésével! Eredeti utasítássorozat: Optimalizált utasítássorozat: Utasítások: 1. 2. 3. 4. 5. IF ID EX MEM WB IF ID A* IF F* 6. 7. 8. 9. 10. 11. 12. M0 M1 M2 M3 M4 MEM WB ID EX MEM WB IF ID A* A* A* EX MEM WB IF F* F* F* ID EX MEM 13. 14. WB 4

Optimalizálás Utasítások átrendezésével gyorsabb lett a program Problémák: Kihasználása a programozón / fordítón múlik Minden pipeline struktúrára máshogy kell Kívánatos megoldás: Csinálja a CPU, röptében! Rendezze át az utasításokat kénye-kedve szerint Úgy, hogy gyorsabb legyen Úgy, hogy a szemantika ne változzon Soron kívüli (out-of-order) utasítás-végrehajtás Megvalósítás: Nem is túl bonyolult Régóta alkalmazott elv Első: Scoreboard 1964 Fejlettebb: Tomasulo 1967 Mind a mai napig használják (pl. Intel Core i7) 5

Soron kívüli utasítás-végrehajtás 6

A kezdetek... Első out-of-order processzor: 1964: CDC 6600 Tervező: Seymour Cray Tulajdonságok: 16 műveleti egység 10 MHz órajel >400.000 tranzisztor 5 tonna Huzalozott vezérlés 5 éven át a leggyorsabb a világon 7

CDC-6600 Freon alapú hűtés minden szekrényben: Duál vektorgrafikus megjelenítő: 8

Cray vs. IBM Thomas Watson (IBM): Múlt héten megjelent a CDC 6600. Annál a cégnél összesen 34-en dolgoznak a portással együtt. Közülük csak 14 mérnök és csak 4 programozó. Nem értem, hogy a mi hatalmas fejlesztési ráfordításaink mellett hogy veszthettük el a vezető pozíciónkat, hogy hagyhattuk, hogy más építse meg a világ leggyorsabb számítógépét. 9

Cray vs. IBM Seymour Cray (CD) Úgy tűnik, Mr. Watson már meg is válaszolta a kérdését 10

Soronkívüli végrehajtás hozzávalói Több utasítást is le kell hívnunk, melyek közül válogatunk Ezeket tárolni kell valahol: utasítástároló Egy eljárás, ami eldönti az utasítások végrehajtási sorrendjét dinamikus ütemező Egy jó ötlet, amivel az utasítások közötti függőségek csökkenthetők regiszterátnevezés Egy trükk, hogy a külvilág sorrendi végrehajtást lásson sorrend-visszaállító buffer 11

Soronkívüli végrehajtás hozzávalói Több utasítást is le kell hívnunk, melyek közül válogatunk Ezeket tárolni kell valahol: utasítástároló Egy eljárás, ami eldönti az utasítások végrehajtási sorrendjét dinamikus ütemező Egy jó ötlet, amivel az utasítások közötti függőségek csökkenthetők regiszterátnevezés Egy trükk, hogy a külvilág sorrendi végrehajtást lásson sorrend-visszaállító buffer 12

Utasítástároló Utasítások lehívása (IF) sorrendben Utasítások végrehajtása (EX) soron kívül az utasítástároló csak az ID fázisban lehet! 13

Utasítástároló Az utasítástároló két részre vágja a futószalagot: Front-end: sorrendi belépés Back-end: soron kívül belépés 14

Utasítástároló ID ketté bomlik (nem egységes elnevezések!): ID1: Dispatch (DS) dekódolás, tárolóba tétel ID2: Issue (IS) operandusok összevadászása, műveleti egységhez rendelés 15

Utasítástároló Alternatív nevek: Reservation Station, Instruction Window, stb. Felépítés lehet: elosztott (műveleti egységenként külön) centralizált (minden műveleti egységre közös) CPU Utasítás tároló típusa mérete IBM PowerPC4 Elosztott 31 Intel Pentium III Centralizált 20 Intel Pentium 4 Hibrid (1 mem. Műv, 1 többi) 126 (72/54) Intel Core Centralizált 32 AMD K6 Centralizált 72 AMD Opteron Elosztott 60 16

Soronkívüli végrehajtás hozzávalói Több utasítást is le kell hívnunk, melyek közül válogatunk. Ezeket tárolni kell valahol: utasítástároló Egy eljárás, ami eldönti az utasítások végrehajtási sorrendjét dinamikus ütemező Egy jó ötlet, amivel az utasítások közötti függőségek csökkenthetők regiszterátnevezés Egy trükk, hogy a külvilág sorrendi végrehajtást lásson sorrend-visszaállító buffer 17

Soronkívüli végrehajtás hozzávalói Több utasítást is le kell hívnunk, melyek közül válogatunk. Ezeket tárolni kell valahol: utasítástároló Egy eljárás, ami eldönti az utasítások végrehajtási sorrendjét dinamikus ütemező Egy jó ötlet, amivel az utasítások közötti függőségek csökkenthetők regiszterátnevezés Egy trükk, hogy a külvilág sorrendi végrehajtást lásson sorrend-visszaállító buffer 18

Dinamikus utasítás-ütemezés Utasítások végrehajtási sorrendje: Adatáramlásos modell szerint! Az utasítássorozatból egy precedenciagráfot építünk Csomópontok: utasítások Élek: mely másik utasítást kell bevárni a végrehajtás előtt Egy utasítás végrehajtható, ha minden utasítás, amitől függ, lefutott. Ha egy utasítás végrehajtható, és van szabad egység, végrehajtjuk 19

Példa 20

Példa 21

Példa 22

Példa 23

Példa 24

Példa 25

Példa 26

Példa 27

Példa 28

Soronkívüli végrehajtás hozzávalói Több utasítást is le kell hívnunk, melyek közül válogatunk Ezeket tárolni kell valahol: utasítástároló Egy eljárás, ami eldönti az utasítások végrehajtási sorrendjét dinamikus ütemező Egy jó ötlet, amivel az utasítások közötti függőségek csökkenthetők regiszterátnevezés Egy trükk, hogy a külvilág sorrendi végrehajtást lásson sorrend-visszaállító buffer 29

Soronkívüli végrehajtás hozzávalói Több utasítást is le kell hívnunk, melyek közül válogatunk Ezeket tárolni kell valahol: utasítástároló Egy eljárás, ami eldönti az utasítások végrehajtási sorrendjét dinamikus ütemező Egy jó ötlet, amivel az utasítások közötti függőségek csökkenthetők regiszterátnevezés Egy trükk, hogy a külvilág sorrendi végrehajtást lásson sorrend-visszaállító buffer 30

Regiszterátnevezés Cél: a függőségi gráf megritkítása Milyen függőségeket ismerünk: RAW: Valódi függőség, nem feloldható WAR:... WAW:... D3 MEM[R1] Meglepetés: a WAR és WAW függőségek feloldhatók! Álfüggőségek 31

Regiszterátnevezés Miért ír a programozó ilyen kódot? WAR:... WAW:... D3 MEM[R1] Újra felhasználja a regisztereket, mert nincs elég! Tegyünk a processzorba nagyon sok regisztert Fizikai regiszterek De a programozó ezt nem látja Logikai/architekturális regiszterekkel dolgozik A CPU a beolvasott programot röptében átírja Regiszterátnevezés 32

Regiszterátnevezés Eszköz: Regiszter leképző tábla i. bejegyzése: az i. logikai regiszter melyik fizikaihoz van rendelve Eljárás: Az utasítás operandusait fizikai regiszterekre cseréli Az eredményt mindig egy új, nem használt fizikai regiszterbe teszi Frissíti a regiszter leképző táblát Eredeti: Átnevezés után: U25 MEM[T3] Regiszter leképző tábla: Logikai reg. Fizikai reg. R0 T21 R1 T3 R2 T46 R3 T8 D0 U9 D1 U24 D2 U17 D3 U4 33

Regiszterátnevezés Eszköz: Regiszter leképző tábla i. bejegyzése: az i. logikai regiszter melyik fizikaihoz van rendelve Eljárás: Az utasítás operandusait fizikai regiszterekre cseréli Az eredményt mindig egy új, nem használt fizikai regiszterbe teszi Frissíti a regiszter leképző táblát Eredeti: Átnevezés után: U25 MEM[T3] Regiszter leképző tábla: Logikai reg. Fizikai reg. R0 T21 R1 T3 R2 T46 R3 T8 D0 U9 D1 U24 D2 U25 D3 U4 34

Regiszterátnevezés Eszköz: Regiszter leképző tábla i. bejegyzése: az i. logikai regiszter melyik fizikaihoz van rendelve Eljárás: Az utasítás operandusait fizikai regiszterekre cseréli Az eredményt mindig egy új, nem használt fizikai regiszterbe teszi Frissíti a regiszter leképző táblát Eredeti: Átnevezés után: U25 MEM[T3] U26 U25 * U9 Regiszter leképző tábla: Logikai reg. Fizikai reg. R0 T21 R1 T3 R2 T46 R3 T8 D0 U9 D1 U24 D2 U25 D3 U4 35

Regiszterátnevezés Eszköz: Regiszter leképző tábla i. bejegyzése: az i. logikai regiszter melyik fizikaihoz van rendelve Eljárás: Az utasítás operandusait fizikai regiszterekre cseréli Az eredményt mindig egy új, nem használt fizikai regiszterbe teszi Frissíti a regiszter leképző táblát Eredeti: Átnevezés után: U25 MEM[T3] U26 U25 * U9 Regiszter leképző tábla: Logikai reg. Fizikai reg. R0 T21 R1 T3 R2 T46 R3 T8 D0 U9 D1 U24 D2 U25 D3 U26 36

Regiszterátnevezés Eszköz: Regiszter leképző tábla i. bejegyzése: az i. logikai regiszter melyik fizikaihoz van rendelve Eljárás: Az utasítás operandusait fizikai regiszterekre cseréli Az eredményt mindig egy új, nem használt fizikai regiszterbe teszi Frissíti a regiszter leképző táblát Eredeti: Átnevezés után: U25 MEM[T3] U26 U25 * U9 MEM[T46] U26 Regiszter leképző tábla: Logikai reg. Fizikai reg. R0 T21 R1 T3 R2 T46 R3 T8 D0 U9 D1 U24 D2 U25 D3 U26 37

Regiszterátnevezés Eszköz: Regiszter leképző tábla i. bejegyzése: az i. logikai regiszter melyik fizikaihoz van rendelve Eljárás: Az utasítás operandusait fizikai regiszterekre cseréli Az eredményt mindig egy új, nem használt fizikai regiszterbe teszi Frissíti a regiszter leképző táblát Eredeti: Átnevezés után: U25 MEM[T3] U26 U25 * U9 MEM[T46] U26 T47 T3 + 8 Regiszter leképző tábla: Logikai reg. Fizikai reg. R0 T21 R1 T3 R2 T46 R3 T8 D0 U9 D1 U24 D2 U25 D3 U26 38

Regiszterátnevezés Eszköz: Regiszter leképző tábla i. bejegyzése: az i. logikai regiszter melyik fizikaihoz van rendelve Eljárás: Az utasítás operandusait fizikai regiszterekre cseréli Az eredményt mindig egy új, nem használt fizikai regiszterbe teszi Frissíti a regiszter leképző táblát Eredeti: Átnevezés után: U25 MEM[T3] U26 U25 * U9 MEM[T46] U26 T47 T3 + 8 Regiszter leképző tábla: Logikai reg. Fizikai reg. R0 T21 R1 T47 R2 T46 R3 T8 D0 U9 D1 U24 D2 U25 D3 U26 39

Regiszterátnevezés Eszköz: Regiszter leképző tábla i. bejegyzése: az i. logikai regiszter melyik fizikaihoz van rendelve Eljárás: Az utasítás operandusait fizikai regiszterekre cseréli Az eredményt mindig egy új, nem használt fizikai regiszterbe teszi Frissíti a regiszter leképző táblát Eredeti: Átnevezés után: U25 MEM[T3] U26 U25 * U9 MEM[T46] U26 T47 T3 + 8 T48 T46 + 8 Regiszter leképző tábla: Logikai reg. Fizikai reg. R0 T21 R1 T47 R2 T46 R3 T8 D0 U9 D1 U24 D2 U25 D3 U26 40

Regiszterátnevezés Eszköz: Regiszter leképző tábla i. bejegyzése: az i. logikai regiszter melyik fizikaihoz van rendelve Eljárás: Az utasítás operandusait fizikai regiszterekre cseréli Az eredményt mindig egy új, nem használt fizikai regiszterbe teszi Frissíti a regiszter leképző táblát Eredeti: Átnevezés után: U25 MEM[T3] U26 U25 * U9 MEM[T46] U26 T47 T3 + 8 T48 T46 + 8 Regiszter leképző tábla: Logikai reg. Fizikai reg. R0 T21 R1 T47 R2 T48 R3 T8 D0 U9 D1 U24 D2 U25 D3 U26 41

Regiszterátnevezés Eszköz: Regiszter leképző tábla i. bejegyzése: az i. logikai regiszter melyik fizikaihoz van rendelve Eljárás: Az utasítás operandusait fizikai regiszterekre cseréli Az eredményt mindig egy új, nem használt fizikai regiszterbe teszi Frissíti a regiszter leképző táblát Eredeti: Átnevezés után: U25 MEM[T3] U26 U25 * U9 MEM[T46] U26 T47 T3 + 8 T48 T46 + 8 U27 MEM[T47] Regiszter leképző tábla: Logikai reg. Fizikai reg. R0 T21 R1 T47 R2 T48 R3 T8 D0 U9 D1 U24 D2 U25 D3 U26 42

Regiszterátnevezés Eszköz: Regiszter leképző tábla i. bejegyzése: az i. logikai regiszter melyik fizikaihoz van rendelve Eljárás: Az utasítás operandusait fizikai regiszterekre cseréli Az eredményt mindig egy új, nem használt fizikai regiszterbe teszi Frissíti a regiszter leképző táblát Eredeti: Átnevezés után: U25 MEM[T3] U26 U25 * U9 MEM[T46] U26 T47 T3 + 8 T48 T46 + 8 U27 MEM[T47] Regiszter leképző tábla: Logikai reg. Fizikai reg. R0 T21 R1 T47 R2 T48 R3 T8 D0 U9 D1 U24 D2 U27 D3 U26 43

Regiszterátnevezés Eszköz: Regiszter leképző tábla i. bejegyzése: az i. logikai regiszter melyik fizikaihoz van rendelve Eljárás: Az utasítás operandusait fizikai regiszterekre cseréli Az eredményt mindig egy új, nem használt fizikai regiszterbe teszi Frissíti a regiszter leképző táblát Eredeti: Átnevezés után: U25 MEM[T3] U26 U25 * U9 MEM[T46] U26 T47 T3 + 8 T48 T46 + 8 U27 MEM[T47] U28 U27 * U9 Regiszter leképző tábla: Logikai reg. Fizikai reg. R0 T21 R1 T47 R2 T48 R3 T8 D0 U9 D1 U24 D2 U27 D3 U26 44

Regiszterátnevezés Eszköz: Regiszter leképző tábla i. bejegyzése: az i. logikai regiszter melyik fizikaihoz van rendelve Eljárás: Az utasítás operandusait fizikai regiszterekre cseréli Az eredményt mindig egy új, nem használt fizikai regiszterbe teszi Frissíti a regiszter leképző táblát Eredeti: Átnevezés után: U25 MEM[T3] U26 U25 * U9 MEM[T46] U26 T47 T3 + 8 T48 T46 + 8 U27 MEM[T47] U28 U27 * U9 Regiszter leképző tábla: Logikai reg. Fizikai reg. R0 T21 R1 T47 R2 T48 R3 T8 D0 U9 D1 U24 D2 U27 D3 U28 45

Regiszterátnevezés Eszköz: Regiszter leképző tábla i. bejegyzése: az i. logikai regiszter melyik fizikaihoz van rendelve Eljárás: Az utasítás operandusait fizikai regiszterekre cseréli Az eredményt mindig egy új, nem használt fizikai regiszterbe teszi Frissíti a regiszter leképző táblát Eredeti: Átnevezés után: U25 MEM[T3] U26 U25 * U9 MEM[T46] U26 T47 T3 + 8 T48 T46 + 8 U27 MEM[T47] U28 U27 * U9 MEM[T48] U28 Regiszter leképző tábla: Logikai reg. Fizikai reg. R0 T21 R1 T47 R2 T48 R3 T8 D0 U9 D1 U24 D2 U27 D3 U28 46

Regiszterátnevezés Eszköz: Regiszter leképző tábla i. bejegyzése: az i. logikai regiszter melyik fizikaihoz van rendelve Eljárás: Az utasítás operandusait fizikai regiszterekre cseréli Az eredményt mindig egy új, nem használt fizikai regiszterbe teszi Frissíti a regiszter leképző táblát Eredeti: Átnevezés után: U25 MEM[T3] U26 U25 * U9 MEM[T46] U26 T47 T3 + 8 T48 T46 + 8 U27 MEM[T47] U28 U27 * U9 MEM[T48] U28 T49 T47 + 8 Regiszter leképző tábla: Logikai reg. Fizikai reg. R0 T21 R1 T47 R2 T48 R3 T8 D0 U9 D1 U24 D2 U27 D3 U28 47

Regiszterátnevezés Eszköz: Regiszter leképző tábla i. bejegyzése: az i. logikai regiszter melyik fizikaihoz van rendelve Eljárás: Az utasítás operandusait fizikai regiszterekre cseréli Az eredményt mindig egy új, nem használt fizikai regiszterbe teszi Frissíti a regiszter leképző táblát Eredeti: Átnevezés után: U25 MEM[T3] U26 U25 * U9 MEM[T46] U26 T47 T3 + 8 T48 T46 + 8 U27 MEM[T47] U28 U27 * U9 MEM[T48] U28 T49 T47 + 8 Regiszter leképző tábla: Logikai reg. Fizikai reg. R0 T21 R1 T49 R2 T48 R3 T8 D0 U9 D1 U24 D2 U27 D3 U28 48

Regiszterátnevezés Eszköz: Regiszter leképző tábla i. bejegyzése: az i. logikai regiszter melyik fizikaihoz van rendelve Eljárás: Az utasítás operandusait fizikai regiszterekre cseréli Az eredményt mindig egy új, nem használt fizikai regiszterbe teszi Frissíti a regiszter leképző táblát Eredeti: Átnevezés után: U25 MEM[T3] U26 U25 * U9 MEM[T46] U26 T47 T3 + 8 T48 T46 + 8 U27 MEM[T47] U28 U27 * U9 MEM[T48] U28 T49 T47 + 8 T50 T48 + 8 Regiszter leképző tábla: Logikai reg. Fizikai reg. R0 T21 R1 T49 R2 T48 R3 T8 D0 U9 D1 U24 D2 U27 D3 U28 49

Regiszterátnevezés Eszköz: Regiszter leképző tábla i. bejegyzése: az i. logikai regiszter melyik fizikaihoz van rendelve Eljárás: Az utasítás operandusait fizikai regiszterekre cseréli Az eredményt mindig egy új, nem használt fizikai regiszterbe teszi Frissíti a regiszter leképző táblát Eredeti: Átnevezés után: U25 MEM[T3] U26 U25 * U9 MEM[T46] U26 T47 T3 + 8 T48 T46 + 8 U27 MEM[T47] U28 U27 * U9 MEM[T48] U28 T49 T47 + 8 T50 T48 + 8 Regiszter leképző tábla: Logikai reg. Fizikai reg. R0 T21 R1 T49 R2 T50 R3 T8 D0 U9 D1 U24 D2 U27 D3 U28 50

Regiszterátnevezés Eredmény: Eltűnt minden WAW és WAR!...hiszen az eredményt mindig tiszta regiszterbe tettük A precedenciagráf: Regiszterátnevezés előtt: Regiszterátnevezés után: 51

Példa U25 MEM[T3] U26 U25 * U9 MEM[T46] U26 T47 T3 + 8 T48 T46 + 8 U27 MEM[T47] U28 U27 * U9 MEM[T48] U28 T49 T47 + 8 T50 T48 + 8 52

Példa U25 MEM[T3] U26 U25 * U9 MEM[T46] U26 T47 T3 + 8 T48 T46 + 8 U27 MEM[T47] U28 U27 * U9 MEM[T48] U28 T49 T47 + 8 T50 T48 + 8 53

Példa U25 MEM[T3] U26 U25 * U9 MEM[T46] U26 T47 T3 + 8 T48 T46 + 8 U27 MEM[T47] U28 U27 * U9 MEM[T48] U28 T49 T47 + 8 T50 T48 + 8 54

Példa U25 MEM[T3] U26 U25 * U9 MEM[T46] U26 T47 T3 + 8 T48 T46 + 8 U27 MEM[T47] U28 U27 * U9 MEM[T48] U28 T49 T47 + 8 T50 T48 + 8 55

Példa U25 MEM[T3] U26 U25 * U9 MEM[T46] U26 T47 T3 + 8 T48 T46 + 8 U27 MEM[T47] U28 U27 * U9 MEM[T48] U28 T49 T47 + 8 T50 T48 + 8 56

Példa U25 MEM[T3] U26 U25 * U9 MEM[T46] U26 T47 T3 + 8 T48 T46 + 8 U27 MEM[T47] U28 U27 * U9 MEM[T48] U28 T49 T47 + 8 T50 T48 + 8 57

Példa U25 MEM[T3] U26 U25 * U9 MEM[T46] U26 T47 T3 + 8 T48 T46 + 8 U27 MEM[T47] U28 U27 * U9 MEM[T48] U28 T49 T47 + 8 T50 T48 + 8 58

Példa U25 MEM[T3] U26 U25 * U9 MEM[T46] U26 T47 T3 + 8 T48 T46 + 8 U27 MEM[T47] U28 U27 * U9 MEM[T48] U28 T49 T47 + 8 T50 T48 + 8 59

Regiszterátnevezés Konklúzió: Hatásos! Minél nagyobb az utasítástároló, annál inkább 60

Soronkívüli végrehajtás hozzávalói Több utasítást is le kell hívnunk, melyek közül válogatunk Ezeket tárolni kell valahol: utasítástároló Egy eljárás, ami eldönti az utasítások végrehajtási sorrendjét dinamikus ütemező Egy jó ötlet, amivel az utasítások közötti függőségek csökkenthetők regiszterátnevezés Egy trükk, hogy a külvilág sorrendi végrehajtást lásson sorrend-visszaállító buffer 61

Soronkívüli végrehajtás hozzávalói Több utasítást is le kell hívnunk, melyek közül válogatunk Ezeket tárolni kell valahol: utasítástároló Egy eljárás, ami eldönti az utasítások végrehajtási sorrendjét dinamikus ütemező Egy jó ötlet, amivel az utasítások közötti függőségek csökkenthetők regiszterátnevezés Egy trükk, hogy a külvilág sorrendi végrehajtást lásson sorrend-visszaállító buffer 62

Sorrend-visszaállító buffer Soron kívüli végrehajtás nemkívánatos mellékhatása: Regiszterek/memória nem a program sorrendjében változnak A memóriát több szerepélő is használhatja Más processzorok, perifériák, stb. Nem biztos, hogy erre fel vannak készülve! Megoldás: sorrend-visszaállító buffer (ROB) Utasítás belépésekor kap egy bejegyzést Ha a végrehajtás kész, beíródik, hogy Mi az eredménye Melyik regiszterbe / memóriacímre szánja az eredményt Akkor érvényesülnek a változások, ha minden korábbi utasításé már érvényesült! 63

Példa Utasítás: Kész? U25 MEM[T3] Eredm. Hova? U25 64

Példa Utasítás: Kész? Eredm. Hova? U25 MEM[T3] U25 U26 U25 * U9 U26 65

Példa Utasítás: Kész? U25 MEM[T3] Eredm. Hova? <érték> U25 U26 U25 * U9 U26 MEM[T46] U26 MEM[T46] 66

Példa Utasítás: Kész? U25 MEM[T3] Eredm. Hova? <érték> U25 U26 U25 * U9 U26 MEM[T46] U26 MEM[T46] T47 T3 + 8 T47 67

Példa Utasítás: Kész? U25 MEM[T3] Eredm. Hova? <érték> U25 U26 U25 * U9 U26 MEM[T46] U26 MEM[T46] T47 T3 + 8 T47 T48 T46 + 8 T48 68

Példa Utasítás: Kész? U25 MEM[T3] Eredm. Hova? <érték> U25 U26 U25 * U9 U26 MEM[T46] U26 MEM[T46] T47 T3 + 8 <érték> T47 T48 T46 + 8 T48 U27 MEM[T47] U27 Kiszámolta a T47 értékét, de nem írhatja be a regiszter tárolóba. Akinek kell, az innen kiveheti. 69

Példa Utasítás: Kész? U25 MEM[T3] Eredm. Hova? <érték> U25 U26 U25 * U9 U26 MEM[T46] U26 MEM[T46] T47 T3 + 8 <érték> T47 T48 T46 + 8 <érték> T48 U27 MEM[T47] U27 U28 U27 * U9 U28 70

Példa Utasítás: Kész? Eredm. Hova? U25 MEM[T3] <érték> U25 U26 U25 * U9 <érték> U26 MEM[T46] U26 MEM[T46] T47 T3 + 8 <érték> T47 T48 T46 + 8 <érték> T48 U27 MEM[T47] <érték> U27 U28 U27 * U9 U28 MEM[T48] U28 MEM[T48] 71

Példa Utasítás: Kész? Eredm. Hova? U25 MEM[T3] <érték> U25 U26 U25 * U9 <érték> U26 MEM[T46] U26 <érték> MEM[T46] T47 T3 + 8 <érték> T47 T48 T46 + 8 <érték> T48 U27 MEM[T47] <érték> U27 U28 U27 * U9 U28 MEM[T48] U28 MEM[T48] T49 T47 + 8 T49 72

Konkrét megvalósítások 73

Konkrét megvalósítások Nem minden megvalósítás használ minden elemet: Scoreboard (1964): se regiszterátnevezés, se ROB Tomasulo (IBM, 1967): van regiszterátnevezés, ROB nincs Intel P6 óta (Core i7 is): mindegyiket használja Mobil eszközökben is: ARM Cortex A9 óta 74

Scoreboard a CDC 6600-ban Utasítások végrehajtása a CDC 6600-ban 5 fázisból áll: IF: lehívás DS: dekódolás & műveleti egységhez rendelés IS: forrásoperandusok kiolvasása EX: végrehajtás WB: regiszter visszaírás Egymásrahatások kezelése: WAW: nem engedjük belépni a DS-be D1 D2 / D3; ; D1 MEM [R0] RAW: nem engedjük belépni az IS-be D1 D2 / D3; ; D5 D1 + D0 WAR: nem endgedjük belépni a WB-be D5 D1 / D3; ; D1 MEM [R0] 75

Scoreboard A CDC 6600 Scoreboard-ot használ Az utasítások végrehajtási állapotának A műveleti egységek foglaltsági állapotának...nyilvántartására. Táblázatok: Utasítás állapot tábla: az utasítás melyik fázisban tart Regiszter állapot tábla: a regisztert melyik utasítás szándékozik megváltoztatni Műveleti egység tábla: minden műveleti egységre tárolja: Foglalt? Mit kell csinálni? Mi a két forrás operandus értéke? Ha valamelyik még nincs kész, melyik művelet eredménye lesz? Hova kell az eredményt írni? 76

Scoreboard Példa: 5 műveleti egység: 1 ALU 1 Load 1 Store 2 Lebegőpontos aritmetikai Késleltetés: 3 ciklus, iterációs idő: 3 ciklus 77

Scoreboard példa 78

Scoreboard példa 79

Scoreboard példa 80

Scoreboard példa 81

Scoreboard példa 82

Scoreboard példa 83

Scoreboard példa 84

Scoreboard példa 85

Scoreboard példa 86

Scoreboard példa 87

Scoreboard példa 88

Scoreboard értékelés Egyszerű Viszonylag hatékony Magas szintű programok (FORTRAN): 1.7x gyorsabbak Alacsony szintű, optimalizált programok: 2.5x gyorsabbak Egymásrahatások kezelése: WAW: nem engedjük belépni a DS-be RAW: nem engedjük belépni az IS-be WAR: nem engedjük belépni a WB-be 89

A kihívó 1967: IBM 360/91-es processzor Out-of-order algoritmust Robert Tomasulo tervezte A P6 architektúra ma is ennek egy változatát használja (pl. Intel Core i7) Miben jobb? Egymásrahatások kezelésében WAW, WAR feloldása: regiszter átnevezéssel Feldolgozási egymásrahatások kiküszöbölése várakozó sorral: utasítás tároló Könnyen kiegészíthető, hogy a külvilág sorrendi végrehajtást lásson: sorrendvisszaállító bufferrel 90

Tomasulo algoritmus a P6-ban Reorder Buffer mezők: V: utasítás eredménye (érték) R: eredményregiszter neve, ide kell majd írni az eredményt Addr: Store esetén erre a címre kell majd írni az eredményt Ready bit: kész-e az utasítás végrehajtása Reservation Station mezők: Egység: az utasítás által igényelt egység azonosítója Művelet kódja (+,, *, /, Load, Store, stb.) T: ebbe a ROB bejegyzésbe kell majd írni az eredményt RA, RB: a 2 forrásoperandus EA, EB: ha nincs meg minden forrásoperandus, ebből a ROB bejegyzésből kell majd venni, ha kész lesz 91

Tomasulo algoritmus a P6-ban Regiszter állapot tábla: Minden architekturális regiszterhez egy bejegyzés Vagy a regiszter értéke Vagy a ROB bejegyzés száma, ahol Vagy már meg is van az értéke Vagy még nincs meg az értéke, de majd ott jelenik meg CDB: Common data bus Üzenetszórásos busz Ha egy utasítás kész, ezen keresztül kürtöli világgá Aki pont rá várt, így tudja meg, hogy már nem kell várnia 92

Tomasulo P6 Példa: 5 műveleti egység: 1 ALU 1 Load 1 Store 2 Lebegőpontos aritmetikai Késleltetés: 3 ciklus, iterációs idő: 3 ciklus Centralizált, 3 bejegyzéses utasítástároló 93

Tomasulo P6 példa 94

Tomasulo P6 példa 95

Tomasulo P6 példa 96

Tomasulo P6 példa 97

Tomasulo P6 példa 98

Tomasulo P6 példa 99

Tomasulo P6 példa 100

Tomasulo P6 példa 101

Tomasulo P6 példa 102

Tomasulo P6 példa 103

Tomasulo P6 példa 104

Tomasulo P6 példa 105

Tomasulo P6 értékelés Egyszerű, de sokkal hatékonyabb a Scoreboard-nál Egy pillanat: hol volt itt a regiszterátnevezés? Bújtatott formában Fizikai regiszterek: ROB bejegyzések Ide kerülnek az eredmények Az ettől függő utasítások innen veszik a forrásoperandust Regiszter leképző tábla: regiszter állapot tábla Itt az összerendelés: Melyik architekturális regiszterhez melyik fizikai (ROB bejegyzés) tartozik 106

Az alapelveken túl... 107

Az alapelveken túl... Mit tegyünk elágazás esetén? Állítsuk meg az utasítások lehívását? Nem! Inkább találjuk ki, merre folytatódik a program! RAW egymásrahatások nem csak a regiszterek között lehetnek! Vannak memória egymásrahatások is Ezek is kezelést igényelnek 108

Spekulatív végrehajtás Utasítás csere-berének korlátot szabnak az elágazások Két feltételes ugrás közé eső utasítások: basic block Alapeset: Utasítás csere-bere csak basic blokkon belül...hiszen ki tudja előre, hol folytatódik a program? Spekulatív végrehajtás: Megtippeljük a feltételes elágazások kimenetelét elágazásbecslés A tippelt ágról is töltünk be utasításokat...és csere-beréljük őket basic blokkok között is! Sokkal hatékonyabb Mert általában sok a feltételes ugrás Többlet adminisztációt igényel: Spekulatíve betöltött utasítások kapnak egy flag-et a ROB-ban Ha nem jön be a spekuláció (rossz elágazásbecslés): A ROB-ból minden tévedésből betöltött utasítást törölni kell 109

Memória RAW egymásrahatás Milyen is a sima RAW egymásrahatás? R1 R2 / R3 R4 R1 + R5 Nincs mit tenni, i2 meg kell, hogy várja i1-et Scoreboard és Tomasulo sem tudott jobbat Könnyen detektálható, kezelhető Milyen is a memória RAW egymásrahatás? R2 R1 + 4 D0 D1 / D2 MEM[R1+8] D0 D3 MEM[R2+4] i3 i4 ilyen! 110

Memória RAW egymásrahatás Milyen is a memória RAW egymásrahatás? R2 R1 + 4 D0 D1 / D2 MEM[R1+8] D0 D3 MEM[R2+4] Nem lehet előre detektálni! Egészen i3 és i4 cím számításáig nem derül ki, hogy RAW áll fent Miért számít? RAW egymásrahatás nélkül i3 és i4 felcserélhető Jó is lenne felcserélni, mert D0 csak sokára lesz kész Addig is haladnánk, ha közben i4-et feldolgoznánk RAW egymásrahatás esetén nem cserélhetők fel! 111

Memória RAW egymásrahatás Mit tehetünk, ha Load-ba futunk? Végrehajtsuk? ROB-ban nincs előtte Store mehet ROB-ban van előtte befejezett Store más címre mehet ugyanarra a címre mehet, de nem a memóriából olvasunk, hanem a ROB-ból ROB-ban van előtte befejezetlen Store, cím kiszámolva más címre mehet ugyanarra a címre meg kell várni az érték megjelenését ROB-ban van előtte befejezetlen Store, cím sincs kiszámolva Bátrak vagy gyávák legyünk? Várjunk, attól félve, hátha RAW lesz? Haladjunk, arra számítva, hogy úgysem lesz RAW? 112

Memória egyértelműsítés Belefutunk egy Load-ba Feldolgozás alatt van a ROB-ban előtte egy Store Végre merjük-e hajtani a Load-ot? Memória egyértelműsítés (memory disambiguation) Nagyon gyakori! Utasítások közel harmada memóriaművelet Lokalitási elvek miatt gyakran vonatkoznak egyazon címre 113

Memória egyértelműsítés Lehetséges stratégiák: Konzervatív (gyáva): Load-ok kötelesek bevárni minden előttük lévő Store-t Optimista (vakmerő) Ne vegyünk tudomást a problémáról Gyorsabb, de kiderülhet, hogy rossz volt a döntés (írási és olvasási cím megegyezik) Ilyenkor vissza kell pörgetni az eseményeket: Load utáni utasítások invalidálása és újrakezdése a ROB-ban Spekulatív (okostojás) Optimistán kezd Ha egy utasítással egyszer pórul jár, megjegyzi: vele legközelebb konzervatív lesz 114

Összefoglalás Sok mindent tanultunk: Soron kívüli végrehajtás alapelve (precedenciagráf, adatáramlásos elv) Eszközei: Utasítástároló Regiszterátnevezés Sorrend-visszaállító buffer Megvalósításai: Scoreboard algoritmus Tomasulo-P6 algoritmus Fejlett technikák: Spekulatív végrehajtás Memória egyértelműsítés 115