Az előadás letöltése folymat van. Kérjük, várjon

Az előadás letöltése folymat van. Kérjük, várjon

Máté: Architektúrák9. előadás1 Feltételezett végrehajtás (Speculative Execution) 4.45. ábra Alap blokk (basic block): lineáris kód sorozat. Emelés: egy.

Hasonló előadás


Az előadások a következő témára: "Máté: Architektúrák9. előadás1 Feltételezett végrehajtás (Speculative Execution) 4.45. ábra Alap blokk (basic block): lineáris kód sorozat. Emelés: egy."— Előadás másolata:

1 Máté: Architektúrák9. előadás1 Feltételezett végrehajtás (Speculative Execution) ábra Alap blokk (basic block): lineáris kód sorozat. Emelés: egy utasítás előre hozatala egy elágazáson keresztül (lassú műveletek esetén nyerhetünk vele). Ha valamit nem biztos, hogy meg kell csinálni, de nincs más dolga a gépnek, akkor megteheti, de csak „firkáló” regiszterekbe írhat. Ha később kiderül, hogy kell, akkor átírja az eredményeket a valódi regiszterekbe, ha nem kell, elfelejti.

2 Máté: Architektúrák9. előadás2 Feltételezett végrehajtás (Speculative Execution) Mellékhatások: fölösleges gyorsító sor csere, SPECULATIVE_LOAD csapda (pl. x=0 esetén if(x>0) z=y/x; ), mérgezés bit.

3 Máté: Architektúrák9. előadás3 Halmaz kezelésű gyorsítótár (4.39. ábra) Ha egy program gyakran használ olyan szavakat, amelyek távol vannak egymástól, de ugyanoda képződnek le a gyorsítótárba, akkor sűrűn kell cserélni a gyorsító sort. Ha minden címhez n bejegyzés van, akkor n utas halmazkeresésű gyorsítótárról beszélünk. Ritka a több, mint 4 utas kezelés. LRU (Least Recently Used) algoritmus: gyorsító sor betöltésnél a legrégebben használt sor kerül ki a gyorsítótárból.

4 Máté: Architektúrák9. előadás4 Memóriába írás Stratégiák: Írás áteresztés (write through): az írás a memóriába történik. Ha a cím a gyorsítóban van, oda is be kell írni, különben el kellene dobni a gyorsító sort. Késleltetett írás (write deferred, write back): ha a cím bent van a gyorsító tárban, akkor csak a gyorsító tárba írunk, a memóriába csak gyorsító sor cserénél. Ha a cím nincs a gyorsító tárban, akkor előtte betölthetjük: írás allokálás (write allocation) – többnyire ezt alkalmazzák késleltetett írás esetén.

5 Máté: Architektúrák9. előadás5 Történeti áttekintés Kezdetben: kevés, egyszerű utasítás. Később: sok, egyre összetettebb utasítás. IBM 360-as család. Lefelé kompatibilis, csak a nagyobb gépek hajtják végre hardveresen az utasításokat (gyors), a kicsik interpretálnak (olcsó). Interpretálás előnyei: hibásan interpretált utasítások könnyű javítása, új utasítások egyszerű hozzáadása, strukturált felépítés; összetett utasítások hatékony fejlesztése.

6 Máté: Architektúrák9. előadás6 Hetvenes évek vége: a csak olvasásra használható gyors memóriák (vezérlőtárak – ROM Read Only Memory) megjelenése és beépülése a CPU-ba. az első 8 bites processzorok: - Motorola egyszerű utasításokkal nagy interpretert épít (siker), - Zilog 8000 bonyolult hardver utasításokat (kudarc).

7 Máté: Architektúrák9. előadás7 A nyolcvanas évek elejétől: A központi memória sebessége csaknem elérte a vezérlő tárak sebességét. RISC (Reduced Instruction Set Computer - csökkentett utasításkészletű számítógép): SPARC, DEC Alpha. Cél: minél gyorsabban indítani és átlapolni a gyors, egyszerű utasításokat. Az utasítások általában két regiszteren hajtanak végre műveletet, az eredményt egy harmadik regiszterbe tárolják. CISC (Complex Instruction Set Computer, összetett utasításkészletű számítógép): IBM nagy gépek, VAX, …. Összetett, és lassabb utasítások.

8 Máté: Architektúrák9. előadás8 RISC tervezési elvei hardveres (nem mikroprogramozott) utasítások, az utasítások indítási sebességének maximalizálása, könnyen dekódolható utasítások, memóriához fordulás csak betöltés (load) és tárolás (store) esetén. Sok regiszter kell! Miért nem nyert a RISC? Kompatibilitás + az elveket az Intel is részben átveszi (486-tól RISC mag).

9 Máté: Architektúrák9. előadás9 Pentium II Felülről kompatibilis az I8088, …, Pentium Pro-val , …, 7.5 millió tranzisztor, 242 láb,  233 MHz, 32 bites gép, 64 bites adat sín. SEC (Single Edge Cartridge) tokozás ( ábra). Két szintű belső gyorsító tár, 32 B-os gyorsító sor : 16 KB utasítás + 16 KB adat (gyors, mint a CPU), 512 KB közös másodlagos (fele olyan gyors). 1 vagy 2 CPU közös memóriával (szimatolás - snoop). Gépi utasítások  RISC szerű mikroutasítások, több mikroutasítás futhat egyszerre: szuperskaláris gép. Két külső szinkron sín (PCI és ISA): ábra.

10 Máté: Architektúrák9. előadás10 Pentium II logikai lábkiosztása (3.44. ábra) Sín ütemezés: BPRI#: magas prioritású igény engedélyezése, LOCK#: sín foglalás több ciklusra, Kérés: A#: 8 bájtos adat címe (64 GB címezhető), ADS#: a cím érvényes, REQ#: kívánság, Válasz: RS#: státus, TRDY#: a szolga tud adatot fogadni, Adat: D#: 8 bájtos adat, DRDY#: az adat a sínen van, DBSY#: a sín foglalt. RESET#: a CPU alapállapotba hozatala, Megszakítások: régi vezérlő, és APIC (Advanced Programmable Interrupt Controller), VID: 5 különböző tápfeszültség kódolása, …

11 Máté: Architektúrák9. előadás11 Pentium II memória sín A memóriaigények, tranzakciók 6 állapota: 6 fázisú csővezeték (3.44. ábra bal oldala, ábra) fázisonként külön vezérlő vonalakkal (amint a mester megkap valamit, elengedi a vonalakat): 0.Sín ütemezés (kiosztás, bus arbitration): melyik sínmester következik, 1.Kérés: cím a sínre, kérés indítása, 2.Hibajelzés: a szolga hibát jelez(het), 3.Szimatolás: a másik CPU gyorsító tárában, 4.Válasz: kész lesz-e az adat a következő ciklusban, 5.Adat: megvan az adat.

12 Máté: Architektúrák9. előadás12 Pentium II CPU mikroarchitektúrája (4.46. ábra) Magas szintű csővezeték: Betöltő/Dekódoló, Elküldő/Végrehajtó és Befejező egység, ezek a Mikroművelet tárterületen (ReOrder Buffer – ROB, átrendező puffer) keresztül kommunikálnak. Betöltő/Dekódoló: az utasításokat szétdarabolja, a mikroműveleteket ROB-ba teszi. Elküldő/Végrehajtó: a ROB-ban lévő utasításokat – esetleg eltérő sorrendben – végrehajtja. Befejező: sorrendben befejezi az összes mikroművelet végrehajtását, frissíti a regisztereket. memória – sín illesztő – gyorsító tárak

13 Máté: Architektúrák9. előadás13 Betöltö/Dekódoló (4.47. ábra): IFU0: ha a puffere üres, 32 bájtos gyorsító sort tölt be. IFU1: legfeljebb 30 utasítás határát megkeresi. IFU2: beteszi egy sorba az utasításokat. ID0: kettő az egyszerű utasításokat, a harmadik a többit dekódolja (mint Mic-4), mikroműveletenként: műveleti kód, két forrás és egy cél regiszter. ID1: sorba állító, statikus + dinamikus elágazás jövendölés (4 bites előzmény figyelés). RAT: regiszter lefoglaló, 40 firkáló regiszter WAR és WAW függőség feloldására, regiszter átnevezések. ROB: max. 3 mikroművelet kiosztása ciklusonként.

14 Máté: Architektúrák9. előadás14 Elküldő/Végrehajtó (4.48. ábra): ütemezi és végrehajtja a mikroműveleteket, feloldja a függőségeket és erőforrás igény ütközéseket. Egy ciklusban öt művelet is kiosztható. Foglalóhely: 20 elemű sor azoknak a műveleteknek, amelyeknek minden operandusa megvan. Portok: ezekhez kapcsolódnak a végrehajtó egységek. Ha több művelet osztható ki egy végrehajtó egységnek, akkor bonyolult algoritmus dönt, pl.: egy elágazás végrehajtása elsőbbséget élvez egy aritmetikai művelettel szemben. Portonként sorbaállás lehetséges.

15 Máté: Architektúrák9. előadás15 Befejező (4.46. ábra): Ez küldi az eredményeket a megfelelő helyre – regiszterbe és az Elküldő/Végrehajtóba, ahol az eredményre várnak RAW függőség esetén. Az utasításokat a programban lévő sorrendben fejezi be, még akkor is, ha a végrehajtás sorrendje ettől eltért. A feltételesen végrehajtott utasítások eredményét eldobja, ha ezeket az utasításokat nem kellett volna végrehajtani.

16 Máté: Architektúrák9. előadás16 UltraSPARC II 64 bites RISC gép, felűről kompatibilis a 32 bites SPARC V8 architektúrával. CPU, 5.4 millió tranzisztor, 4 CPU közös memóriával használható. 787 láb ( ábra). 64 (jelenleg csak 44) bites cím és 128 bites adat lehetséges. 64 B-os gyorsító sor (cash line). Belső gyorsító tár (16 KB utasítás + 16 KB adat). Külső 512 KB - 16 MB.8 K K gyorsító sor. A címzéséhez 13 – 18 bit szükséges. A CPU mindig 18 bites Line címet (Címkeazonosítót) ad át. Csak maximális méret esetén van mind a 18 bit kihasználva.

17 Máté: Architektúrák9. előadás KB –os gyorsító tár esetén a 44 bites cím felosztása (3.47. ábra, 3_47_abrahoz): Tag (Címkeadat): 25 bit, Line (Címkeazonosító): 13 bit (a 18-ból az 5 legmagasabb helyértékű bitet nem használja fel), bájt cím: 6 bit = 44 bit. 16 MB –os tár esetén 20 bites Tag is elég lenne, de ilyekor – hogy a CPU egységesen működhessen – a gyorsító tár Tag –et kiegészíti Line 5 legmagasabb helyértékű bitjével. Az Adat címe (3.47. ábra) a gyorsító sor címén kívül még 2 bitet tartalmaz, mert egy átvitel során a gyorsító sornak csak negyed része (16 bájt) mozgatható.

18 Máté: Architektúrák9. előadás18 UltraSPARC II ( ábra) SBus: 25 MHz-es szinkron sín a perifériáknak. A memóriához lassú! UPA (Ultra Port Architecture) sín, kapcsoló vagy mindkettő. A memóriák és max. 4 CPU kommunikációját kezeli. Sor és oszlop cím. Két független tranzakció sorozatot tud kezelni egyidejűleg (írás, olvasás), mindkettőben több függőben lévő tranzakció lehetséges. UDB II (UltraSPARC Data Buffer II): Puffereli a beolvasott, kiírandó adatokat. Gondoskodik a tényleges memóriába írásról, az átviteleknél hiba javító kódot generál/ellenőriz.

19 Máté: Architektúrák9. előadás19 UltraSPARC II CPU mikroarchitektúrája A SPARC sorozat RISC elgondoláson alapul. A legtöbb utasításnak két forrás és egy cél regisztere van. PREFETCH utasítás feltételezett betöltésre, nem okoz hibát gyorsító tár hiánykor. 2 bites elágazás jövendölő + statikus elágazás jövendölés.

20 Máté: Architektúrák9. előadás20 Előre betöltő/Elküldő (4.49. ábra): ciklusonként négy utasítást tölt be – egy fél gyorsítósort. Óra ciklusonként 4 utasítást tud kiosztani. A kiosztás sorrendben történik. Maximum 12 elemű sort épít. Dekódoló: Néhány „irányító” bitet ad minden utasításhoz, ezzel a későbbi folyamatot gyorsítja. Csoportosító: egyszerre maximum 4 (2 fix- és 2 lebegőpontos) utasítást tud kiosztani a sorból. A kiosztás és befejezés a sorrendtől eltérő lehet. Az egész és lebegőpontos egység tejesen független. Betöltő/Tároló: írás áteresztő. A gyorsítótár hiány elkerülésére külön sor a függőben lévő LOAD -ok és STORE -ok számára.

21 Máté: Architektúrák9. előadás21 9 szakaszos csővezeték (4.50. ábra) 1.ciklusonként max. 4 utasítás az I-gyorsítóból, 2.néhány irányító bitet tesz az utasításokhoz, 3.annyi utasítást oszt ki, ahányat tud, –a fix pontos utasítások 1 ciklus alatt végrehajtódnak + 3 üres szakasz, –a gyorsítótár szakaszban LOAD és STORE még dolgozik + 2 üres szakasz, –a lebegőpontos utasítások a regiszterek eléréséhez általában 1 szakaszt igényelnek + 3-at a végrehajtáshoz, 8.csapda kezelés 9.regiszterekbe írás

22 Máté: Architektúrák9. előadás22 picoJava II (3.48. ábra). JVM-et (Java Virtual Machine) megvalósító hardver. 0,1, 2, 4, 8 vagy 16 KB-os direkt leképezésű I és 2 utas hamaz vezérelt D gyorsítótár, 16 bájtos gyorsító sor, késleltetett írás, írás allokálás. Szabványos BGA (Ball Grid Array) tok, 316 láb SUN microJava 701, benne SUN picoJava II CPU. memória sín interfész (64 bites adat, 32 bites cím), 32 bites PCI sín interfész: vezérlés, órák, megszakítás, tesztelés, 16 I/O vonal: nyomógombok, lámpák, kapcsolók Flash PROM. Elsősorban beépített számítógépekben alkalmazzák.

23 Máté: Architektúrák9. előadás23 picoJava II CPU mikroarchitektúrája (4.51. ábra) Regiszter oszlop, a verem fölső 64 szavát tartalmazza. A regiszter oszlop közvetlenül, a D gyorsító egy ciklus késleltetéssel érhető el. Automatikus eljárás (cselező – dribbling): a regiszter oszlop ne legyen túl tele vagy túl üres. Ciklikus puffer 2 mutatóval: nem kell másolgatni. Nem szuperskaláris: a mikroműveleteket a kiosztás sorrendjében hajtja végre és fejezi be (a fő cél az volt, hogy olcsó legyen).

24 Máté: Architektúrák9. előadás24 picoJava II csővezetéke (4.52. ábra) 1. Betöltés: egyszerre 8 bájt az I gyorsítótárból. 2. Dekódolás: RISC jellegű, két forrás és egy cél regisztert tartalmazó mikroutasításokat állít elő CISC utasítás folyamból. 3. Operandus betöltés a veremből (regiszter oszlopból). 4. Utasítás végrehajtás. 5. D gyorsítóba írás, ha kell. 6. Eredmények verembe írása, ha kell.

25 Máté: Architektúrák9. előadás25 Utasítás összevonás, pl.: n=k+m; (4.53. ábra) Tegyük fel, hogy k, m, n rendre a 7., 1. és 3. lokális változó, akkor egy lehetséges IJVM program: iload 7 // a 7. lokális változó a verem tetejére, iload 1 // az 1. lokális változó a verem tetejére, iadd // a verem tetején lévő két regiszter // összege a verem tetejére, istore 3 // a verem tetejét a 3. lokális változóba. A dekódoló egyetlen mikroműveletté vonja össze.

26 Máté: Architektúrák9. előadás26 Utasítások összevonása (4.54. ábra). JVM-nek több utasítása van, mint IJVM-nek! A dekódoló 74 bites mikroműveleteket oszt ki, ezek legtöbbje egy kódot és három regisztert tartalmaz, és egy ciklusban végrehajtható. Figyeli, hogy a sorozat megfelel-e egy legfeljebb 4 hosszú mintának (4.55. ábra). Ha megfelel, akkor a sorozatot egyetlen mikroutasítással helyettesíti. Elágazás jövendölés: nem lesz elágazás! Inkább olcsó, mint bonyolult hardver.

27 Máté: Architektúrák9. előadás27 Összehasonlítás Pentium IICISC gép egy CISC utasítás → több RISC mikroutasítás UltraSPARC IIRISC gép picoJava IIverem gép, sok memória hivatkozás több CISC utasítás → egy RISC mikroutasítás

28 Máté: Architektúrák9. előadás28 Makró és blokk ismétlés Makró definíció: M_névMACRO[fpar1[,fpar2...]] ; makró fej (kezdet)...; makró törzs ENDM; makró vége fpar1,fpar2... formális paraméterek vagy egyszerűen paraméterek. A makró definíció nem lesz része a lefordított programnak, csupán azt határozza meg, hogy később mit kell a makró hívás helyére beírni (makró kifejtés, helyettesítés). A makró törzsön belül előfordulhat makró hívás és másik makró definíció is.

29 Máté: Architektúrák9. előadás29 Makró hívás: M_név[apar1[,apar2...]] apar1,apar2... aktuális paraméterek vagy argumentumok. A műveleti kód helyére írt M_név hatására a korábban megadott definíció szerint megtörténik a makró helyettesítés, más néven makró kifejtés. Ez a makró törzs bemásolását jelenti, miközben az összes paraméter összes előfordulása a megfelelő argumentummal helyettesítődik. A helyettesítés szövegesen történik, azaz minden paraméter – mint szöveg – helyére a megfelelő argumentum – mint szöveg – kerül. A helyettesítés nem rekurzív. Makró hívás argumentuma sem lehet makró hívás. Az argumentumnak megfelelő formális paraméternek lehet olyan előfordulása, amely a későbbiek során makró hívást eredményez.

30 Máté: Architektúrák9. előadás30 Dupla szavas összeadás: (DX:AX)  (DX:AX)+(CX:BX) Eljárás deklaráció: EDADDPROCNEAR ADDAX,BX ADCDX,CX RET EDADDENDP Makró definíció: MDADDMACRO ADDAX,BX ADCDX,CX ENDM

31 Máté: Architektúrák9. előadás31 Ha a programban valahol dupla szavas összeadást kell végezzünk, akkor hívnunk kell az eljárást illetve a makrót: Eljárás hívás: CALLEDADD Makró hívás: MDADD Futás közben felhívásra kerül az EDADD eljárás Fordítás közben megtörténik a makró helyettesítés: ADDAX,BX ADCDX,CX Futás közben ez a két utasítás kerül csak végrehajtásra.

32 Máté: Architektúrák9. előadás32 Látható, hogy eljárás esetén kettővel több utasítást kell végrehajtanunk, mint makró esetében ( CALL EDADD és RET ). Még nagyobb különbséget tapasztalunk, ha (CX:BX) helyett paraméterként kívánjuk megadni az egyik összeadandót:

33 Máté: Architektúrák9. előadás33 Most sem része a makró definíció a lefordított programnak. Eljárás deklaráció: EDADD2PROCNEAR PUSHBP MOVBP,SP ADDAX,4[BP] ADCDX,6[BP] POPBP RET4 EDADDENDP Makró definíció: MDADD2MACROP IFB  P  ADDAX,BX ADCDX,CX ELSE ADDAX,P ADCDX,P+2 ENDIF ENDM

34 Máté: Architektúrák9. előadás34 Ha SI az összeadandónk címét tartalmazza, akkor a felhívások a következőképpen alakulnak: PUSH2[SI] PUSH[SI] CALLEDADD2 MDADD2[SI] Futás közben végrehajtásra kerül a paraméter átadás, az eljárás hívás, az eljárás: összesen 9 utasítás Fordítás közben a hívás az ADDAX,[SI] ADCDX,[SI]+2 utasításokra cserélődik, futás közben csak ez a két utasítás kerül végrehajtásra.

35 Máté: Architektúrák9. előadás35 Megjegyzés: Az MDADD2 makrót úgy írtuk meg, hogy ha híváskor nem adunk meg paramétert, akkor az eredeti feladatot oldja meg, ekkor ugyanis az IFB  P  feltétel teljesül.

36 Máté: Architektúrák9. előadás36 Paraméter másutt is előfordulhat a makró törzsben, nemcsak az operandus részen, pl.: PLmacrop1,P2 movax,p1 P2p1 endm PLAdat, INC hatása: movax,Adat INCAdat

37 Máté: Architektúrák9. előadás37 A &, %, ! karakterek továbbá a <> és ;; speciális szerepet töltenek be makró kifejtéskor. & (helyettesítés operátor): ha a paraméter – helyettesített – értéke része egy szónak; idézeten belüli helyettesítés: errgenmacroy, x err&ydb’Error &y: &x’ endm errgen5, hatása: err5db’Error 5: Unreadable disk’

38 Máté: Architektúrák9. előadás38 <> (literál szöveg operátor): Ha aktuális paraméter szóközt vagy, -t is tartalmaz. Az előző példa eredménye <> nélkül: err5db’Error 5: Unreadable’ adatmacrop dbp endm adat adat’abc’,13,10,0 kifejtve: db’abc’,13,10,0 db’abc’

39 Máté: Architektúrák9. előadás39 ! (literál karakter operátor): Az utána következő karaktert makró kifejtéskor közönséges karakterként kell kezelni. Pl.: a korábbi errgen makró errgen103, 255> hívásának hatása: err103db’Error 103: Expression > 255’ de errgen103, 255> hívásának hatása: err103db’Error 103: Expression’

40 Máté: Architektúrák9. előadás40 % (kifejezés operátor): Az utána lévő argumentum (kifejezés is lehet) értéke – és nem a szövege – lesz az aktuális paraméter. Pl.: sym1equ100 sym2equ200 txtequ’Ez egy szöveg’ kifmacroexp, val db”&exp = &val” endm kif, %(sym1+sym2) kiftxt, %txt db”sym1 + sym2 = 300” db”txt = ’Ez egy szöveg’”

41 Máté: Architektúrák9. előadás41 Az alábbi példa a % használatán kívül a makró törzsön belüli makró hívást is bemutatja: s=0 ErrMsgMACROtext s=s+1 Msg%s,text ENDM MsgMACROsz,str msg&szdbstr ENDM

42 Máté: Architektúrák9. előadás42 ErrMsg ’syntax error’ makró hívás hatására bemásolásra kerül (.LALL hatására látszik a listán) az s=s+1 Msg%s,’syntax error’ szöveg. s értéke itt 1 -re változik. Újabb makró hívás ( Msg ). A %s paraméter az értékére ( 1 ) cserélődik, majd kifejtésre kerül ez a makró is, ebből kialakul: msg1db’syntax error’ Egy újabb hívás és hatása: ErrMsg ’invalid operand’ msg2db’invalid operand’

43 Máté: Architektúrák9. előadás43 ;; (makró kommentár): A makró definíció megjegyzéseinek kezdetét jelzi. A ;; utáni megjegyzés a makró kifejtés listájában nem jelenik meg.

44 Máté: Architektúrák9. előadás44 LOCALc1[,c2...] c1, c2,... minden makró híváskor más, ??xxxx alakú szimbólumra cserélődik, ahol xxxx a makró generátor által meghatározott hexadecimális szám. A LOCAL operátort közvetlenül a makró fej utáni sorba kell írni. KOPOGmacro n LOCAL ujra movcx,n ujra:KOPP loopujra endm Ha a programban többször hívnánk a KOPOG makrót, akkor a LOCAL operátor nélkül az ujra címke többször lenne definiálva.

45 Máté: Architektúrák9. előadás45 Makró definíció belsejében lehet másik makró definíció is. A belső makró definíció csak a külső makró meghívása után jut érvényre, válik láthatóvá. Pl.: shiftsmacroOPNAME; makrót ; definiáló makró OPNAME&SMACROOPERANDUS,N movcl, N OPNAMEOPERANDUS,cl ENDM endm

46 Máté: Architektúrák9. előadás46 Ha ezt a makrót felhívjuk pl.: shifts ROR akkor a RORSMACROOPERANDUS,N movcl, N ROROPERANDUS,cl ENDM makró definíció generálódik. Mostantól meghívható a RORS makró is, pl.: RORSAX, 5 aminek a hatása: movcl, 5 RORAX,cl

47 Máté: Architektúrák9. előadás47 Makró definíció belsejében meghívható az éppen definiálás alatt lévő makró is (a makró hívás ezáltal rekurzívvá válik). PUSHALLmacroreg1,reg2,reg3,reg4,reg5 IFNB ;; ha a paraméter nem üres pushreg1;; az első regiszter mentése PUSHALLreg2,reg3,reg4,reg5 ;; rekurzió ENDIF ENDM Most pl. a PUSHALLax, bx, cx makró hívás hatása: pushax pushbx pushcx

48 Máté: Architektúrák9. előadás48 Részletezve: PUSHALLax, bx, cx makró hívás hatása: pushax PUSHALLbx, cx az újabb hívás hatása: pushbx PUSHALLcx az újabb hívás hatása: pushcx PUSHALL ennek hatására nem generálódik semmi.

49 Máté: Architektúrák9. előadás49 FL_CALLELJ=0 CALLELJmacro ;; Eljárást beépítő és felhívó makró LOCALFIRST;; nem lenne fontos IFFL_CALLELJ;; a 2. hívástól igaz callElj;; elég felhívni az eljárást EXITM;; makró helyettesítés vége ENDIF FL_CALLELJ=1;; csak az első híváskor JMPFIRST;; jut érvényre Eljproc;; eljárás deklaráció... ret Eljendp FIRST:callElj;; az eljárás felhívása endm

50 Máté: Architektúrák9. előadás50 Az első hívás hatására az FL_CALLELJ=1 JMP??0000 Eljproc... ret Eljendp ??0000:callElj utasítások generálódnak (??0000 a FIRST -ből keletkezett).

51 Máté: Architektúrák9. előadás51 A további hívások esetén csak egyetlen utasítás, a callElj utasítás generálódik. A megoldás előnye, hogy az eljárás csak akkor része a programnak, ha a program tartalmazza az eljárás felhívását is, és mégsem kell törődjünk azzal, hogy hozzá kell-e szerkesztenünk a programhoz vagy se.

52 Máté: Architektúrák9. előadás52 Megváltoztathatunk egy makró definíciót azáltal, hogy újra definiáljuk. Makró definíción belül előfordulhat másik makró definíció. E két lehetőség kombinációjából adódik, hogy a makró definíción belül megadhatunk ugyanarra a makró névre egy másik definíciót, ezáltal készíthető olyan makró, amely „átdefiniálja” önmagát. Az önmagát átdefiniáló makrók esetében a belső és külső definíciót lezáró ENDM utasítások között egyetlen utasítás sem szerepelhet – még kommentár sem!

53 Máté: Architektúrák9. előadás53 Önmagát „átdefiniáló” makró (az előző feladat másik megoldása): CALLELJ2macro; külső makró definíció jmpFIRST Elj2proc; eljárás deklaráció... ret Elj2endp FIRST:callElj2; eljárás hívás CALLELJ2MACRO; belső makró definíció callElj2; eljárás hívás ENDM; belső makró definíció vége endm; külső makró definíció vége

54 Máté: Architektúrák9. előadás54 CALLELJ2 első hívásakor a kifejtés eredménye: jmpFIRST Elj2proc; eljárás deklaráció... ret Elj2endp FIRST:callElj2; eljárás hívás CALLELJ2MACRO; belső makró definíció callElj2; eljárás hívás ENDM ; belső makró definíció vége

55 Máté: Architektúrák9. előadás55 A kifejtés CALLELJ2 újabb definícióját tartalmazza, ez felülírja az eredeti definíciót, és a továbbiak során ez a definíció érvényes. Ez alapján a későbbi hívások esetén callElj2 a kifejtés eredménye. Megjegyezzük, hogy most is szerencsésebb lett volna a FIRST címkét lokálissá tenni. Igaz, hogy csak egyszer generálódik, de így annak, aki használni akarja a CALLELJ2 makrót, annak tudnia kell, hogy a FIRST címke már „foglalt”!

56 Máté: Architektúrák9. előadás56 Ha egy M_név makró definíciójára nincs szükség a továbbiak során, akkor a PURGEM_név pszeudo utasítással kitörölhetjük.

57 Máté: Architektúrák9. előadás57 Blokk ismétlés Nemcsak a blokk definíciójának kezdetét jelölik ki, hanem a kifejtést (hívást) is előírják. A program más részéről nem is hívhatók. Blokk ismétlés kifejezés -szer: REPTkifejezés...; ez a rész ismétlődik ENDM

58 Máté: Architektúrák9. előadás58 Pl. a korábban ismertetett kopogást így is megoldhattuk volna: REPTN KOPP ENDM Ha pl. N=3, akkor ennek a hatására a KOPP makró hívások generálódnak. Megjegyzés: Most N nem lehet változó – fordítási időben ismert kell legyen az értéke!

59 Máté: Architektúrák9. előadás59 Blokk ismétlés argumentum lista szerint: IRPpar,...; ez a rész többször bemásolásra...; kerül úgy, hogy par rendre...; felveszi az arg1,arg2... értéket ENDM IRPx, dbx ENDM db1 db2 db3

60 Máté: Architektúrák9. előadás60 Blokk ismétlés string alapján: IRPCpar,string...; ez a rész kerül többször...; bemásolásra úgy,...; hogy par rendre felveszi...; a string karaktereit ENDM Ezt a string-et nem kell idézőjelek közé tenni (újabb ismétlés jelentene). Ha a string-en belül pl. szóköz vagy, is előfordul, akkor <> jelek közé kell tenni. Az előző feladatot így is megoldhattuk volna: IRPCx,123 dbx ENDM

61 Máté: Architektúrák9. előadás61 Másik példa: IRPCx, ABCDEFGHIJKLMNOPQRSTUVWXYZ db’&x’; nagy betűk db’&x+20h’; kis betűk ENDM Fontos az & jel, nélküle x nem argumentum, hanem string lenne!

62 Máté: Architektúrák9. előadás62 Makró definíció tartalmazhat blokk ismétlést, és blokk ismétlés is tartalmazhat makró definíciót vagy makró hívást. Pl.: A bit léptető és forgató utasítás kiterjesztésnek egy újabb megoldása: ; makrót definiáló blokkismétlés IRPOP, OP&S MACROOPERANDUS,N movcl, N OPOPERANDUS,cl ENDM Ennek a megoldásnak előnye, hogy nem kell külön meghívnunk a külső makrót az egyes utasításokkal, mert ezt elvégzi helyettünk az IRP blokk ismétlés.

63 Máté: Architektúrák9. előadás63 Feladatok Mit nevezünk alap blokknak? Mit nevezünk emelésnek? Mit nevezünk feltételezett végrehajtásnak? Milyen mellékhatásai lehetnek a feltételezett végrehajtásnak? Mi a SPECULATIVE_LOAD lényege? Mi a mérgezés bit? Hogy működik a halmaz kezelésű gyorsítótár? Mit jelent az írás áteresztés (write through)? Mit jelent a késleltetett írás? Mit jelent az írás allokálás?

64 Máté: Architektúrák9. előadás64 Feladatok Minek a rövidítése a RISC? Minek a rövidítése a CISC? Mi jellemzi a RISC gépeket? Jellemezze a Pentium II processzort! Jellemezze a Pentium II és a memória sín kapcsolatát! Jellemezze a Pentium II mikroarchitektúráját! Mi a feladata a Betöltő/dekódoló egységnek? Mi a feladata az Elküldő/végrehajtó egységnek? Mi a feladata a Befejező egységnek?

65 Máté: Architektúrák9. előadás65 Feladatok Jellemezze az UltraSPARC II processzort! Hogy valósul meg a memória címzés UltraSPARC II esetén! Jellemezze az UltraSPARC II mikroarchitektúráját! Mi az UPA feladata? Mi az UDB II feladata? Milyen az UltraSPARC II elágazás jövendölése? Mi a feladata az Előre betöltő/Elküldő egységnek? Mi a feladata a Dekódoló egységnek? Mi a feladata a Betöltő/Tároló egységnek? Jellemezze az UltraSPARC II csővezetékét!

66 Máté: Architektúrák9. előadás66 Feladatok Jellemezze a PicoJava II processzort! Milyen szervezésű gyorsítótára van a PicoJava II- nek? Jellemezze a PicoJava II mikroarchitektúráját! Mi regiszter oszlop? Jellemezze a PicoJava II csővezetékét! Hasonlítsa össze a Pentium II, az UltraSPARC II és a PicoJava II mikroarchitektúráját!

67 Máté: Architektúrák9. előadás67 Feladatok Mi a makro definíció? Mi a makró fej? Mi a makró törzs? Mi a makró hívás? Mi a makró kifejtés? Mi a (formális) paraméter? Mi az aktuális paraméter (argumentum)? Mely karakterek játszanak speciális szerepet makró kifejtéskor? Melyik karakternek mi a szerepe? Adjon példát rá! Mi a szerepe a LOCAL pszeudó utasításnak?

68 Máté: Architektúrák9. előadás68 Feladatok Adjon példát makró hívást tartalmazó makró definícióra! Adjon példát makró definíciót tartalmazó makró definícióra! Mit kell tudni azokról a makró definíciókról, amelyek egy másik makró definícióban találhatók? Adjon példát olyan makró definícióra, amely tartalmazza saját hívását! Adjon példát olyan makró definícióra, amely tartalmazza saját átdefiniálását! Mit kell tudni az önmaguk átdefiniálását tartalmazó makró definíciókról?

69 Máté: Architektúrák9. előadás69 Feladatok Mi a hatása a PURGE pszeudó utasításnak? Mit jelent a blokk ismétlés? Milyen blokk ismétlési lehetőségeket ismer? Mi a REPT pszeudó utasítás általános alakja? Mi az IRP pszeudó utasítás általános alakja? Mi az IRPC pszeudó utasítás általános alakja? Mondjon példát makrót definiáló blokkismétlésre!


Letölteni ppt "Máté: Architektúrák9. előadás1 Feltételezett végrehajtás (Speculative Execution) 4.45. ábra Alap blokk (basic block): lineáris kód sorozat. Emelés: egy."

Hasonló előadás


Google Hirdetések