Pipeline példák (IMSC, 2019)
Pipe 1. feladat Adott a következő utasítás sorozat i1: R0 MEM [R1+8] i2: R2 R0 * 3 i3: R3 MEM [R1+12] i4: R4 R3 * 5 i5: R0 R2 + R4 A pipeline 5 fokozatú IF: utasítás lehívás, ID: utasítás dekódolás, EX: végrehajtás MEM: memória hozzáférés, WB: regiszter visszaírás IF ID EX MEM WB
Pipe 1. feladat a. kérdés Adat-egymásrahatások. Megadás formája: függő: függés típusa( amitől függ) Típusok: RAW: read after write WAR: write after read WAW: write after write i1: R0MEM [R1+8] i2: R2R0 * 3 i3: R3MEM [R1+12] i4: R4R3 * 5 i5: R0R2 + R4 i1: - i2: RAW(i1) i3: - i4: RAW(i3) i5: RAW(i4), RAW(i2),WAW(i1),WAR(i2)
Pipe 1. feladat b. kérdés Ütemezés 1 2 3 4 5 6 7 8 9 10 11 i1 IF ID EX MEM WB i2 IF ID A* EX MEM WB i3 IF F* ID EX MEM WB i4 IF A* ID EX MEM WB i5 IF F* ID EX MEM WB i2-A*: i2-nek kell i1 eredménye, az csak MEM végén van meg, adatfüggés i3-F*:ID-t i2 foglalja, feldolgozási függés i4-A*:i4-nek kell i3 eredménye, MEM végén van meg, adatfüggés i5-F*:ID-t foglalja i4, feldolgozási függés
Pipe 1. feladat c. kérdés Forwarding 1 2 3 4 5 6 7 8 9 10 11 i1 IF ID EX MEM WB i2 IF ID A* EX MEM WB i3 IF F* ID EX MEM WB i4 IF A* ID EX MEM WB i5 IF F* ID EX MEM WB i2 az i1 eredményét (R0 értéke) a MEM/WB regiszterből veszi i4 az i3 eredményét (R3 értéke) a MEM/WB regiszterből veszi i5 az i4 eredményét (R4 értéke) az EX/MEM regiszterből veszi (nincs memória hivatkozás)
Pipe 1. feladat d. kérdés Végrehajtás pipeline-nal és anélkül Pipeline: 11 egységnyi idő (feltöltéssel/kiürüléssel együtt) Nélküle: Összesen 22 egységnyi idő i1 5 i2 4 i3 i4 i5
Pipe 1. feladat e. kérdés Gyorsítás átrendezéssel Eredeti sorrend: i1: R0MEM [R1+8] i2: R2R0 * 3 i3: R3MEM [R1+12] i4: R4R3 * 5 i5: R0R2 + R4 Átrendezve i1: R0MEM [R1+8] i2: R3MEM [R1+12] i3: R2R0 * 3 i4: R4R3 * 5 i5: R0R2 + R4 Ezzel felszámoltuk az –eredeti jelöléssel- i2: RAW(i1) és az i4: RAW(i3) függőségek miatti várakozásokat Mivel a feldolgozási függéseket az adat függések okozták, azok is megszűnnek, így várakozás nélkül 9 egységnyi idő alatt végrehajtható a program
Pipe 2. feladat Adott a következő utasítás sorozat i1: R5 MEM [R3+24] i2: R6 MEM [R4+16] i3: R7 R6 + R5 i4: R8 R6 – R5 i5: R5 R7 * R8 I6: R4 R4 + 4 A pipeline 6 fokozatú IF: utasítás lehívás(iterációs idő1, késleltetés2, 2 fokozat), ID: utasítás dekódolás, EX: végrehajtás MEM: memória hozzáférés, WB: regiszter visszaírás IF0 IF1 ID EX MEM WB
Pipe 2. feladat a. kérdés Adat-egymásrahatások. Megadás formája: függő: függés típusa(amitől függ) Típusok: RAW: read after write WAR: write after read WAW: write after write i1: - i1: R5 MEM [R3+24] i2: R6 MEM [R4+16] i3: R7 R6 + R5 i4: R8 R6 – R5 i5: R5 R7 * R8 i6: R4 R4 + 4 i2:- i3: RAW(i1), RAW(i2) i4: RAW(i1).RAW(i2) i5: RAW(i3), RAW(i4),WAW(i1), WAR(i3), WAR(i4) i6: WAR(i2)
Pipe 2. feladat b. kérdés Ütemezés 1 2 3 4 5 6 7 8 9 10 11 12
Pipe 2. feladat c. kérdés Forwarding 1 2 3 4 5 6 7 8 9 10 11 12
Pipe 2. feladat d. kérdés Végrehajtás pipeline-nal és anélkül Pipeline: 12 egységnyi idő (feltöltéssel/kiürüléssel együtt) Nélküle: Összesen 32 egységnyi idő i1 6 i2 i3 5 i4 i5 i6
Pipe 2. feladat e. kérdés Gyorsítás átrendezéssel Eredeti sorrend: i1: R5 MEM [R3+24] i2: R6 MEM [R4+16] i3: R7 R6 + R5 i4: R8 R6 – R5 i5: R5 R7 * R8 i6: R4 R4 + 4 Átrendezve i1: R5 MEM [R3+24] i2: R6 MEM [R4+16] i3: R4 R4 + 4 i4: R7 R6 + R5 i5: R8 R6 – R5 i6: R5 R7 * R8 Ezzel felszámoltuk az –eredeti jelöléssel- i3: RAW(i1), RAW(i2) és az i4: RAW(i1),RAW(i2) függés miatti várakozást Mivel a feldolgozási várakozást az adat függés miatti okozta, az is megszűnik, így várakozás nélkül 11 egységnyi idő alatt végrehajtható a program
Pipe 2. feladat e. kérdés Az ütemezés, forwardinggal 1 2 3 4 5 6 7 8 9 10 11 i1 IF0 ID EX MEM WB IF1 i2 IF0 IF1 ID EX MEM WB i3 IF0 IF1 ID EX MEM WB i4 IF0 IF1 ID EX MEM WB i5 IF0 IF1 ID EX MEM WB i6 IF0 IF1 ID EX MEM WB
Pipe 3. feladat Adott a következő utasítás sorozat i1: D0 D1 * D2 i2: D3 D0 + D5 i3: MEM [R0 + 4] D3 i4: MEM [R0 +12] D0 D0~D5 regiszterek lebegőpontos számot, R0 egész számot tárol A lebegőpontos összeadás 4 időegységet, a szorzás 7 egységet, a többi művelet 1 időegységet késleltet. Az iterációs idő mindig 1 egység
Pipe 3. feladat A pipeline szerkezete EX IF ID MEM WB A0 A1 A2 A3 M0 M0~M6: lebegőpontos szorzás S0~S3: lebegőpontos összeadás
Pipe 3. feladat a. kérdés Adat egymásra hatások. Megadás formája: függő: függés típusa(amitől függ) Típusok: RAW: read after write WAR: write after read WAW: write after write i1: - i1: D0 D1 * D2 i2: D3 D0 + D5 i3: MEM [R0 + 4] D3 i4: MEM [R0 +12] D0 i2: RAW(i1) i3: RAW(i2) i4: RAW(i1)
Pipe 3. feladat b. kérdés Ütemezés 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 i1 IF ID M0 MEM WB M1 M2 M3 M4 M5 M6 A* i2 IF ID A0 A1 A2 A3 MEM WB F* i3 IF ID A* EX MEM WB i4 IF ID F* EX MEM WB Az EX helyett az ID-ben is lehet várakoztatni!
Pipe 3. feladat c. kérdés Gyorsítás átrendezéssel Átrendezve i1: D0 D1 * D2 i2: D3 D0 + D5 i3: MEM [R0 +12] D0 i4: MEM [R0 + 4] D3 Eredeti sorrend: i1: D0 D1 * D2 i2: D3 D0 + D5 i3: MEM [R0 + 4] D3 i4: MEM [R0 +12] D0 Távolabbra került a D3 miatti adatfüggésben érintett i2 és i3
Pipe 3. feladat d. kérdés Ütemezés átrendezés után 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 i1 IF ID M0 MEM WB M1 M2 M3 M4 M5 M6 A* i2 IF ID A0 A1 A2 A3 MEM WB F* i3 IF ID EX MEM WB A* F* i4 IF ID EX MEM WB i2: szüksége van i1 eredményére (D0 értéke), adat függés miatt várakozik i3: i2 foglalja az ID egységet, feldolgozási függés miatt várakozik i4: szüksége van i2 eredményére ( D3 értéke), adat függés miatt, azután i2 foglalja a MEM egységet, feldolgozási függés miatt
Pipe 4. feladat IF ID AG MEM/EX WB Az Intel első pipeline-al rendelkező processzora, a 80486 is 5 fokozatú futószalaggal rendelkezett, a fázisok azonban eltértek a tanult pipline fázisaitól. Az IF és az ID után egy AG (address generation) fázis következett, ami a memóriakezelő utasítások számára címet számolt, az aritmetikai utasítások esetében pedig nem csinált semmit. Az AG után a MEM/EX jön, ami memória load/store esetén elvégezte a tényleges memóriaműveletet (az AG áltat számolt címre), aritmetikai utasítások esetén pedig magát az aritmetikai műveletet. Az utolsó fázis itt is a WB, az eredmény visszaírása a regiszter tárolóba. IF ID AG MEM/EX WB
Pipe 4. feladat Az Intel első pipeline-al rendelkező processzora, a 80486 is 5 fokozatú futószalaggal rendelkezett, a fázisok azonban eltértek a tanult pipline fázisaitól. Az IF és az ID után egy AG (address generation) fázis következett, ami a memóriakezelő utasítások számára címet számolt, az aritmetikai utasítások esetében pedig nem csinált semmit. Az AG után a MEM/EX jön, ami memória load/store esetén elvégezte a tényleges memóriaműveletet (az AG áltat számolt címre), aritmetikai utasítások esetén pedig magát az aritmetikai műveletet. Az utolsó fázis itt is a WB, az eredmény visszaírása a regiszter tárolóba. (a) Ütemezze az 1. feladat példaprogramját ezen az alternatív pipeline struktúrán! Melyik pipeline tudta gyorsabban végrehajtani? 1 2 3 4 5 6 7 8 9 10 11 i1 IF ID AG E/M WB i2 IF ID AG E/M WB i3 IF ID AG E/M WB i4 IF AG ID E/M WB i5 IF ID AG E/M WB
Pipe 4. feladat Az Intel első pipeline-al rendelkező processzora, a 80486 is 5 fokozatú futószalaggal rendelkezett, a fázisok azonban eltértek a tanult pipline fázisaitól. Az IF és az ID után egy AG (address generation) fázis következett, ami a memóriakezelő utasítások számára címet számolt, az aritmetikai utasítások esetében pedig nem csinált semmit. Az AG után a MEM/EX jön, ami memória load/store esetén elvégezte a tényleges memóriaműveletet (az AG áltat számolt címre), aritmetikai utasítások esetén pedig magát az aritmetikai műveletet. Az utolsó fázis itt is a WB, az eredmény visszaírása a regiszter tárolóba. (b) Mely utasításpárokat tudja hatékonyabban végrehajtani a tanult, és melyeket ez az alternatív pipeline? Melyik a jobb választás? (b) A tanult pipeline jobb a R0 ← R2 + R4, R1 ← MEM[R0] jellegű (címet számolok és betöltöm) utasításpárokban (nincs késleltetés), az Intel pipeline itt egy késleltetés beiktatását igényli. Az Intel jobb a R0 ← MEM [R1+8], R2 ← R0 * 3 párokban (betöltöm és használom). Melyik a jobb? Attól függ, milyen a terhelés, milyen alkalmazásra készül a processzor.
Pipe 5. feladat Egy 2-utas in-order szuperskalár processzor az órán megismert egyszerű, 5-fokozatú pipeline-nal rendelkezik, melynek szélessége 2. A processzor ideális abból a szempontból, hogy bármely két egymást követő utasítás végrehajtását el tudja indítani, és tökéletes elágazásbecslővel rendelkezik. Az utasításpárokra csak annyi a korlátozás, hogy egyszerre kell átesniük az IF és ID fázisokon. A fordító a for (i=0; i!=j; i++) b[i] = a[i]; C program alapján az alábbi alacsony szintű utasítássorozatot állította elő: i1: R1 ← 0 i2: iter: JUMP end IF R1==R2 i3: R6 ← R3 + R1 i4: R7 ← MEM[R6] i5: R8 ← R4 + R1 i6: MEM[R8] ← R7 i7: R1 ← R1 + 1 i8: JUMP iter i9: end: (Figyeljük meg, hogy az MEM[R4+R1]← R7 utasítás nem megengedett, hiszen három forrásoperandusa lenne. Az ortogonalitás miatt ekkor viszont R7 ← MEM[R3+R1] utasítás sem megengedett, ezért a címeket külön kell számolni aritmetikai utasításokkal.)
Pipe 5. feladat Egy 2-utas in-order szuperskalár processzor az órán megismert egyszerű, 5-fokozatú pipeline-nal rendelkezik, melynek szélessége 2. A processzor ideális abból a szempontból, hogy bármely két egymást követő utasítás végrehajtását el tudja indítani, és tökéletes elágazásbecslővel rendelkezik. Az utasításpárokra csak annyi a korlátozás, hogy egyszerre kell átesniük az IF és ID fázisokon. A fordító a for (i=0; i!=j; i++) b[i] = a[i]; C program alapján az alábbi alacsony szintű utasítássorozatot állította elő: i1: R1 ← 0 i2: iter: JUMP end IF R1==R2 i3: R6 ← R3 + R1 i4: R7 ← MEM[R6] i5: R8 ← R4 + R1 i6: MEM[R8] ← R7 i7: R1 ← R1 + 1 i8: JUMP iter i9: end: (a) Ütemezze az utasítássorozatot a 2-utas in-order pipeline-ra, a ciklus két iterációjáig!
Pipe 5. feladat i1: R1 ← 0 - i2: iter: JUMP end IF R1==R2 RAW(i1) i3: R6 ← R3 + R1 RAW(i1) i4: R7 ← MEM[R6] RAW(i3) i5: R8 ← R4 + R1 RAW(i1) i6: MEM[R8] ← R7 RAW(i4),RAW(i5) i7: R1 ← R1 + 1 RAW(i1),WAW(i1) i8: JUMP iter i9: end:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 i1 IF ID EX MEM WB i2 IF ID A* EX MEM WB i3 IF F* ID EX MEM WB i4 IF F* ID A* EX MEM WB i5 IF F* ID EX MEM WB i6 IF F* ID A* EX MEM WB i7 IF F* ID EX MEM WB i8 IF F* ID EX MEM WB i2 IF ID EX MEM WB i3 IF ID EX MEM WB i4 IF ID EX MEM WB i5 IF ID EX MEM WB IF ID EX MEM WB i6 IF ID EX MEM WB i7 Látható, hogy a páros iterációkban függő utasítások kerülnek egy csoportba, emiatt várakozás lesz, a páratlanokban nem.
Pipe 5. feladat Egy 2-utas in-order szuperskalár processzor az órán megismert egyszerű, 5-fokozatú pipeline-nal rendelkezik, melynek szélessége 2. A processzor ideális abból a szempontból, hogy bármely két egymást követő utasítás végrehajtását el tudja indítani, és tökéletes elágazásbecslővel rendelkezik. Az utasításpárokra csak annyi a korlátozás, hogy egyszerre kell átesniük az IF és ID fázisokon. (b) Rendezze át az utasítássorozatot úgy, hogy a program futása a lehető leggyorsabb legyen! Eredeti Átrendezett i1: R1 ← 0 i1: R1 ← 0 i2: iter: JUMP end IF R1==R2 i2: iter: JUMP end IF R1==R2 i3: R6 ← R3 + R1 i3: R6 ← R3 + R1 i4: R7 ← MEM[R6] i4: R8 ←R4 + R1 (i5 volt) i5: R8 ← R4 + R1 i5: R7 ← MEM[R6] (i4 volt) i6: MEM[R8] ← R7 i6: R1 ← R1 + 1 (i7 volt) i7: R1 ← R1 + 1 i7: MEM[R8] ← R7 (i6 volt) i8: JUMP iter i8: JUMP iter i9: end: i9: end: