Cache példák 2019 (IMSC).

Slides:



Advertisements
Hasonló előadás
Lineáris egyenletrendszerek
Advertisements

Koordináták, függvények
Készítette: Kosztyán Zsolt Tibor
Nevezetes algoritmusok
A normalizálás az adatbázis-tervezés egyik módszere
A számítógép felépítése
Kódelmélet.
A mikroprocesszor 1. rész.
Matematika és Tánc Felkészítő tanár: Komáromi Annamária
Lapcsere stratégiák FIFO, LRU, OPT, SC
Illeszkedési mátrix Villamosságtani szempontból legfontosabb mátrixreprezentáció. Legyen G egy irányított gráf, n ponton e éllel. Az n x e –es B(G) mátrixot.
Dinamikus tömbök.
7. előadás (2005. április 12.) Láncolt lista File kezelés 1.
UNIVERSITY OF SZEGED D epartment of Software Engineering UNIVERSITAS SCIENTIARUM SZEGEDIENSIS Programozás II. 6. Gyakorlat const, static, dinamikus 2D.
Táblázatkezelés alapjai MS Excel, OpenOffice Calc
Mutatók, tömbök, függvények
Készítette: Pető László
A memória.
Papp Róbert, Blaskovics Viktor, Hantos Norbert
LDinamikus tömbök, kétdimenziós tömbök Alkalmazott Informatikai Tanszék MŰSZAKI INFORMATIKA dr.Dudás László 21./0. lVektorok létrehozása futásidőben, dinamikusan.
Utasítás végrehajtás lépései
1 Programozás alapjai GEIAL312B (ANSI C) BSc (Bachelor of Science) / Alap képzés 2005/2006. őszi félév Miskolci Egyetem Általános Informatikai Tanszék.
Edényrendezés - RADIX „vissza” - bináris számokra
Számítógép memória jellemzői
2 tárolós egyszerű logikai gép vázlata („feltételes elágazás”)
A memóriák típusai, jellemzői
Számítógép architektúra Címzésmódok. 2007Címzésmódok2-21 Operandusok egy operandus hossza lehet: –1 byte –2 byte (szó) –4 byte egy operandus lehet: –az.
RAID lemezek (Redundant Array of Independent or Inexpensive Disks)
Összetett adattípusok
A Memória.
A mikroszámítógép felépítése 2. rész. A memória chipen belüli rekeszek címzéséhez szükséges címbitek száma a chip méretétől függ. Az ábrán látható memóriarekesz.
TÖMBÖK Asszociatív adatszerkezetek Tömbök
DFAN-INF-524 és DFAL-INF-524 kurzus hallgatói számára SZPISÁK TAMÁS / 2012.
Hernyák Zoltán Programozási Nyelvek II.
1 AAO folytatás ++ Csink László. 2 Rekurzív bináris keresés (rendezett tömbben) public static int binker(int[] tomb, int value, int low, int high) public.
Programozási alapismeretek 11. előadás. ELTE Szlávi-Zsakó: Programozási alapismeretek 11.2/ Tartalom  Rendezési.
Nevezetes algoritmusok
Egy első generációs gép (az IAS) felépítése
A Mikroprocesszor Harmadik rész.
Adatbázisok tervezése, megvalósítása és menedzselése
1. MATEMATIKA ELŐADÁS Halmazok, Függvények.
CUDA C/C++ programozás Szál struktúra A segédanyag készítése a TÁMOP A/ Nemzeti Kiválóság Program című kiemelt projekt keretében.
CUDA C/C++ programozás
1 Vektorok, mátrixok.
Adatbáziskezelés. Adat és információ Információ –Új ismeret Adat –Az információ formai oldala –Jelsorozat.
Írja fel a tizes számrendszerbeli
Programozási alapismeretek 11. előadás
Egy lekérdezés végrehajtása SELECT o1 FROM T1 WHERE o2 = … Hogyan jutnak el a megfelelő sorokból a mező értékei a klienshez?
Nagy Szilvia 2. Lineáris blokk-kódok II.
Memória példák Feladat Egy számítógép rendszermemóriája egycsatornás, 64 bites adategységekkel rendelkező DDR1-DRAM-ra épül, melyben a burst.
ifin811/ea1 C Programozás: Hardver alapok áttekintése
Memóriakezelés feladatok Feladat: 12 bites címtartomány. 0 ~ 2047 legyen mindig.
Fájlszervezés Adatbázisok tervezése, megvalósítása és menedzselése.
1 Számítógépek felépítése 5. előadás a CPU gyorsítása, pipeline, cache Dr. Istenes Zoltán ELTE-TTK.
Memóriakezelés feladatok. 1.Feladat Legyenek a virtuális címek 16 bitesek, a fizikai címek 15 bitesek, a lapméret legyen 2 12 bájt = 4 kB méretű, a laptábla.
TÁMOP /1-2F Informatikai gyakorlatok 11. évfolyam Alapvető programozási tételek megvalósítása Czigléczky Gábor 2009.
1 A számítógépek tárolói. 2 Memória Memóriaszó  A tárak olyan egységei, melyek egyetlen művelettel kezelhetők.  A legrövidebb memóriaszó a byte (bájt)
MBR és a partíciós tábla Forrás: Wikipedia. MBR 1. A Master Boot Record (MBR) vagy más néven a partíciós szektor a merevlemez legelső szektorának (azaz.
Adatok tárolása. Tárolók Félvezető tárak RAM Operatív tár Cache tár Regiszterek CMOS RAM ROM BIOS Mágnestárak Mágneslemez Hajlékony lemez Merevlemez MágnesszalagMágneskártya.
Memóriakezelés feladatok A jegyzet 2015-ös változata szerinti számozással.
RAM (Random Access Memory)
TÖMBÖK – péntek Jordán Sándor.
Nevezetes algoritmusok
Változók.
Informatikai gyakorlatok 11. évfolyam
Gráfalgoritmusok G=(V,E) gráf ábrázolása
Algoritmus készítés.
Memória példák 2019.
Fejlett pipeline megoldások IMSC 2019
Pipeline példák (IMSC, 2019).
Előadás másolata:

Cache példák 2019 (IMSC)

Egy program az alábbi memóriablokkokról olvas (ebben a sorrendben): 1. Feladat Vegyünk egy 256 byte méretű cache-t 64 byte-os blokkmérettel. A cache kezdetben csupa érvénytelen blokkot tartalmaz. Egy program az alábbi memóriablokkokról olvas (ebben a sorrendben): • 1, 3, 8, 4, 3, 6, 8, 1 Adja meg a cache hibák számát és a cache végső tartalmát LRU algoritmus mellett (a) direkt leképzés esetén, (a) Direkt leképzés esetén az LRU-nak nincs szerepe. Azt, hogy egy blokk hova kerül a cache-be, a blokk számának 4-el való osztási maradéka határozza meg. Az egységes jelölés kedvéért az azonos indexű cache blokkokat egymás alá írjuk, így most a cache pillanatnyi állapota 4 egymás alá rajzolt blokkból áll. A cache tartalma az alábbiak szerint alakul. A 8 memóriaműveletből 6 cache hiba, és 2 cache találat volt.

1. Feladat Vegyünk egy 256 byte méretű cache-t 64 byte-os blokkmérettel. A cache kezdetben csupa érvénytelen blokkot tartalmaz. Egy program az alábbi memóriablokkokról olvas (ebben a sorrendben): • 1, 3, 8, 4, 3, 6, 8, 1 Adja meg a cache hibák számát és a cache végső tartalmát LRU algoritmus mellett (b) teljesen asszociatív szervezés esetén, (b) A teljesen asszociatív esetben már az LRU algoritmusnak is van szerepe, azt is nyomon kell követni, hogy melyik blokkot mikor hivatkoztuk utoljára. A ”tag”, vagyis a tárolt blokk száma mellett ezért a blokkok korát is tárolni és folyamatosan frissíteni kell. Új blokk érkezésekor, ha nincs szabad hely, a legöregebb helyére tesszük. Mivel a teljesen asszociatív szervezés esetén minden blokknak ugyanaz az indexe (nincs indexelés), a cache pillanatnyi állapotát egyetlen sorba, egymás mellé rajzolt 4 blokkal jelöljük. A memóriahivatkozások hatására a cache állapota a következőképpen alakul. Megint csak 2 cache találat volt.

Egy program az alábbi memóriablokkokról olvas (ebben a sorrendben): 1. Feladat Vegyünk egy 256 byte méretű cache-t 64 byte-os blokkmérettel. A cache kezdetben csupa érvénytelen blokkot tartalmaz. Egy program az alábbi memóriablokkokról olvas (ebben a sorrendben): • 1, 3, 8, 4, 3, 6, 8, 1 Adja meg a cache hibák számát és a cache végső tartalmát LRU algoritmus mellett (c) két utas asszociatív szervezés esetén. (c) A két utas asszociatív esetben az első sor (0-ás index) 2 blokkja páros, a második sor (1-es index) 2 blokkja páratlan blokkokat tud tárolni. Először ez alapján kell kiválasztani a megfelelő sort, az LRU algoritmust csak a soron belüli két blokk közül való választáskor kell alkalmazni.

2. Feladat Vegyünk egy 32 kB méretű cache-t 64 byte-os blokkmérettel. A CPU rendelkezzen 32 bites fizikai, 48 bites virtuális címekkel. 4-utas asszociatív szervezés mellett hány darab és hány bites összehasonlítást kell végezni egy keresés során, ha (a) Fizikailag indexelt cache-t használunk, fizikai tag-ekkel A cím alsó 6 bitje az eltolás (26 = 64). A cache-be 32 kB / 64 byte = 512 blokk fér el. Ha 4-utas a szervezés, akkor az index egy adott értékéhez 4 blokk tartozik, vagyis 512/4 = 128 féle indexünk lehet, ami 7 bittel írható le. (a) Ha a cache kizárólag fizikai címekre alapozott, akkor a tag-ek mérete 32-7-6 = 19 bit. Minden egyes kereséskor a 4-utas cache-ben az index által kijelölt 4 blokk 19 bites tag-jeit kell összehasonlítanunk a cím megfelelő bitjeivel. Vagyis egyidejűleg 4 darab 19 bites összehasonlítást kell elvégezni.

2. Feladat Vegyünk egy 32 kB méretű cache-t 64 byte-os blokkmérettel. A CPU rendelkezzen 32 bites fizikai, 48 bites virtuális címekkel. 4-utas asszociatív szervezés mellett hány darab és hány bites összehasonlítást kell végezni egy keresés során, ha (b) Virtuálisan indexelt cache-t használunk, virtuális tag-ekkel (b) Ha virtuális tag-eket használunk, akkor a tag-ek mérete 48-7-6 = 35 bit. Minden egyes kereséskor 4 db 35 bites összehasonlításra van szükség.

3. Feladat Vegyünk egy 512 byte méretű cache-t 64 byte-os blokkmérettel. A cache fizikai címeket használ mind az indexeléshez, mind a tag-ekhez. A fizikai címek 16 bit szélesek. Egy program az alábbi memóriacímekről olvas (ebben a sorrendben): • 13, 136, 490, 541, 670, 74, 581, 980 (a) Adja meg a fenti címekhez tartozó ”tag”, ”index” és ”eltolás” mezőket • teljesen asszociatív szervezés • direkt leképzés • két utas asszociatív szervezés esetén. (a) Az 512 byte-os méret 512/64 = 8 blokk tárolását teszi lehetővé. Mivel a blokkok mérete 64 byte, mindhárom esetben 6 bites lesz az eltolás mező. A további mezők mérete a cache szervezéstől függ: • Teljesen asszociatív szervezés esetén nincs indexelés, minden blokk bárhova kerülhet. Index: 0 bit, tag: 16 − 6 = 10 bit. • Direkt leképzés esetén a cache-nek mind a 8 blokkja ”direktben” az index mezővel kerül kiválasztásra, tehát az index mező 3 bites. A maradék 16 − 3 − 6 = 7 bit lesz a cache tag-ek mérete. • Két utas asszociatív szervezés esetén minden blokk két helyre kerülhet a cache-ben. Tehát a cím indexe alapján a 4 darab 2 utas tároló egyikét kell kijelölni. A 4 féle indexhez 2 bit szükséges, a tag-ek tehát 16 − 6 − 2 = 8 bit szélesek lesznek.

Egy program az alábbi memóriacímekről olvas (ebben a sorrendben): 3. Feladat Vegyünk egy 512 byte méretű cache-t 64 byte-os blokkmérettel. A cache fizikai címeket használ mind az indexeléshez, mind a tag-ekhez. A fizikai címek 16 bit szélesek. Egy program az alábbi memóriacímekről olvas (ebben a sorrendben): • 13, 136, 490, 541, 670, 74, 581, 980 (a) Adja meg a fenti címekhez tartozó ”tag”, ”index” és ”eltolás” mezőket • teljesen asszociatív szervezés • direkt leképzés • két utas asszociatív szervezés esetén. (a) A memóriacímek felbontása ennek megfelelően történik. A blokk szám és az eltolás szétválasztásához a címet el kell osztani 64-el, az eredmény egész része a blokk száma, a maradék a blokkon belüli eltolás. A blokk számból direkt leképzés esetén 8-al, a 2 utas asszociatív esetben pedig 4-el való osztás maradékaként kapjuk az indexet, egész részeként pedig a cache tag-et. 13 (0/13) 136 (2/8) 490 (7/42) 541 (8/29) 670 (10/30) 74 (1/10) 581 (9/5) 980 (15/20) Eltolás 13 8 42 29 30 10 5 20 Tag teljesen asszoc. Tag direkt leképez. Index direkt leképez. Tag két utas asszoc. Index két utas assz.

Egy program az alábbi memóriacímekről olvas (ebben a sorrendben): 3. Feladat Vegyünk egy 512 byte méretű cache-t 64 byte-os blokkmérettel. A cache fizikai címeket használ mind az indexeléshez, mind a tag-ekhez. A fizikai címek 16 bit szélesek. Egy program az alábbi memóriacímekről olvas (ebben a sorrendben): • 13, 136, 490, 541, 670, 74, 581, 980 (a) Adja meg a fenti címekhez tartozó ”tag”, ”index” és ”eltolás” mezőket • teljesen asszociatív szervezés • direkt leképzés • két utas asszociatív szervezés esetén. (a) A memóriacímek felbontása ennek megfelelően történik. A blokk szám és az eltolás szétválasztásához a címet el kell osztani 64-el, az eredmény egész része a blokk száma, a maradék a blokkon belüli eltolás. A blokk számból direkt leképzés esetén 8-al, a 2 utas asszociatív esetben pedig 4-el való osztás maradékaként kapjuk az indexet, egész részeként pedig a cache tag-et. 13 (0/13) 136 (2/8) 490 (7/42) 541 (8/29) 670 (10/30) 74 (1/10) 581 (9/5) 980 (15/20) Eltolás 13 8 42 29 30 10 5 20 Tag teljesen asszoc. 2 7 1 9 15 Tag direkt leképez. Index direkt leképez. Tag két utas asszoc. Index két utas assz.

Egy program az alábbi memóriacímekről olvas (ebben a sorrendben): 3. Feladat Vegyünk egy 512 byte méretű cache-t 64 byte-os blokkmérettel. A cache fizikai címeket használ mind az indexeléshez, mind a tag-ekhez. A fizikai címek 16 bit szélesek. Egy program az alábbi memóriacímekről olvas (ebben a sorrendben): • 13, 136, 490, 541, 670, 74, 581, 980 (a) Adja meg a fenti címekhez tartozó ”tag”, ”index” és ”eltolás” mezőket • teljesen asszociatív szervezés • direkt leképzés • két utas asszociatív szervezés esetén. (a) A memóriacímek felbontása ennek megfelelően történik. A blokk szám és az eltolás szétválasztásához a címet el kell osztani 64-el, az eredmény egész része a blokk száma, a maradék a blokkon belüli eltolás. A blokk számból direkt leképzés esetén 8-al, a 2 utas asszociatív esetben pedig 4-el való osztás maradékaként kapjuk az indexet, egész részeként pedig a cache tag-et. 13 (0/13) 136 (2/8) 490 (7/42) 541 (8/29) 670 (10/30) 74 (1/10) 581 (9/5) 980 (15/20) Eltolás 13 8 42 29 30 10 5 20 Tag teljesen asszoc. 2 7 1 9 15 Tag direkt leképez. Index direkt leképez. Tag két utas asszoc. Index két utas assz.

Egy program az alábbi memóriacímekről olvas (ebben a sorrendben): 3. Feladat Vegyünk egy 512 byte méretű cache-t 64 byte-os blokkmérettel. A cache fizikai címeket használ mind az indexeléshez, mind a tag-ekhez. A fizikai címek 16 bit szélesek. Egy program az alábbi memóriacímekről olvas (ebben a sorrendben): • 13, 136, 490, 541, 670, 74, 581, 980 (a) Adja meg a fenti címekhez tartozó ”tag”, ”index” és ”eltolás” mezőket • teljesen asszociatív szervezés • direkt leképzés • két utas asszociatív szervezés esetén. (a) A memóriacímek felbontása ennek megfelelően történik. A blokk szám és az eltolás szétválasztásához a címet el kell osztani 64-el, az eredmény egész része a blokk száma, a maradék a blokkon belüli eltolás. A blokk számból direkt leképzés esetén 8-al, a 2 utas asszociatív esetben pedig 4-el való osztás maradékaként kapjuk az indexet, egész részeként pedig a cache tag-et. 13 (0/13) 136 (2/8) 490 (7/42) 541 (8/29) 670 (10/30) 74 (1/10) 581 (9/5) 980 (15/20) Eltolás 13 8 42 29 30 10 5 20 Tag teljesen asszoc. 2 7 1 9 15 Tag direkt leképez. Index direkt leképez. Tag két utas asszoc. Index két utas assz.

Egy program az alábbi memóriacímekről olvas (ebben a sorrendben): 3. Feladat Vegyünk egy 512 byte méretű cache-t 64 byte-os blokkmérettel. A cache fizikai címeket használ mind az indexeléshez, mind a tag-ekhez. A fizikai címek 16 bit szélesek. Egy program az alábbi memóriacímekről olvas (ebben a sorrendben): • 13, 136, 490, 541, 670, 74, 581, 980 (a) Adja meg a fenti címekhez tartozó ”tag”, ”index” és ”eltolás” mezőket • teljesen asszociatív szervezés • direkt leképzés • két utas asszociatív szervezés esetén. (a) A memóriacímek felbontása ennek megfelelően történik. A blokk szám és az eltolás szétválasztásához a címet el kell osztani 64-el, az eredmény egész része a blokk száma, a maradék a blokkon belüli eltolás. A blokk számból direkt leképzés esetén 8-al, a 2 utas asszociatív esetben pedig 4-el való osztás maradékaként kapjuk az indexet, egész részeként pedig a cache tag-et. 13 (0/13) 136 (2/8) 490 (7/42) 541 (8/29) 670 (10/30) 74 (1/10) 581 (9/5) 980 (15/20) Eltolás 13 8 42 29 30 10 5 20 Tag teljesen asszoc. 2 7 1 9 15 Tag direkt leképez. Index direkt leképez. Tag két utas asszoc. 3 Index két utas assz.

Egy program az alábbi memóriacímekről olvas (ebben a sorrendben): 3. Feladat Vegyünk egy 512 byte méretű cache-t 64 byte-os blokkmérettel. A cache fizikai címeket használ mind az indexeléshez, mind a tag-ekhez. A fizikai címek 16 bit szélesek. Egy program az alábbi memóriacímekről olvas (ebben a sorrendben): • 13, 136, 490, 541, 670, 74, 581, 980 (a) Adja meg a fenti címekhez tartozó ”tag”, ”index” és ”eltolás” mezőket • teljesen asszociatív szervezés • direkt leképzés • két utas asszociatív szervezés esetén. (a) A memóriacímek felbontása ennek megfelelően történik. A blokk szám és az eltolás szétválasztásához a címet el kell osztani 64-el, az eredmény egész része a blokk száma, a maradék a blokkon belüli eltolás. A blokk számból direkt leképzés esetén 8-al, a 2 utas asszociatív esetben pedig 4-el való osztás maradékaként kapjuk az indexet, egész részeként pedig a cache tag-et. 13 (0/13) 136 (2/8) 490 (7/42) 541 (8/29) 670 (10/30) 74 (1/10) 581 (9/5) 980 (15/20) Eltolás 13 8 42 29 30 10 5 20 Tag teljesen asszoc. 2 7 1 9 15 Tag direkt leképez. Index direkt leképez. Tag két utas asszoc. 3 Index két utas assz.

3. Feladat Vegyünk egy 512 byte méretű cache-t 64 byte-os blokkmérettel. A cache fizikai címeket használ mind az indexeléshez, mind a tag-ekhez. A fizikai címek 16 bit szélesek. Egy program az alábbi memóriacímekről olvas (ebben a sorrendben): • 13, 136, 490, 541, 670, 74, 581, 980 (b) Adja meg a cache végső tartalmát mind a 3 esetben, LRU algoritmus mellett! (A cache kezdetben csupa érvénytelen blokkot tartalmaz) 8 blokknyi hely van a cache-ben, és mi pont 8 adatot akarunk elhelyezni, a teljesen asszociatív szervezés pedig semmilyen megkötést nem ír elő a blokkok elhelyezésére. Teljesen asszociatív szervezés mellett a cache a végső állapotában az összes blokkot tartalmazza, tetszőleges sorrendben.

Egy program az alábbi memóriacímekről olvas (ebben a sorrendben): 3. Feladat Vegyünk egy 512 byte méretű cache-t 64 byte-os blokkmérettel. A cache fizikai címeket használ mind az indexeléshez, mind a tag-ekhez. A fizikai címek 16 bit szélesek. Egy program az alábbi memóriacímekről olvas (ebben a sorrendben): • 13, 136, 490, 541, 670, 74, 581, 980 (b) Adja meg a cache végső tartalmát mind a 3 esetben, LRU algoritmus mellett! (A cache kezdetben csupa érvénytelen blokkot tartalmaz) Direkt leképzés esetén a blokkok elhelyezése egyértelmű, az index meghatározza. Összesen 4-szer fordul elő, hogy korábban már szereplő blokkot felül kell írni, tehát csak 4 blokk lesz a végén a cache-ben. 13 (0/13) 136 (2/8) 490 (7/42) 541 (8/29) 670 (10/30) 74 (1/10) 581 (9/5) 980 (15/20) Tag direkt leképez. 1 Index direkt leképez. 2 7

Egy program az alábbi memóriacímekről olvas (ebben a sorrendben): 3. Feladat Vegyünk egy 512 byte méretű cache-t 64 byte-os blokkmérettel. A cache fizikai címeket használ mind az indexeléshez, mind a tag-ekhez. A fizikai címek 16 bit szélesek. Egy program az alábbi memóriacímekről olvas (ebben a sorrendben): • 13, 136, 490, 541, 670, 74, 581, 980 (b) Adja meg a cache végső tartalmát mind a 3 esetben, LRU algoritmus mellett! (A cache kezdetben csupa érvénytelen blokkot tartalmaz) 2-utas asszociatív esetben 2 azonos indexű blokkot is tárolni tudunk. Ebben a példában egyszer sem fordul elő, hogy felül kell írni egy korábbi blokkot, tehát a végén 8 blokk lesz a cache-ben. 13 (0/13) 136 (2/8) 490 (7/42) 541 (8/29) 670 (10/30) 74 (1/10) 581 (9/5) 980 (15/20) Tag két utas asszoc. 1 2 3 Index két utas assz.

4. Feladat Vegyünk egy 1 kB méretű cache-t 64 byte-os blokkmérettel 4. Feladat Vegyünk egy 1 kB méretű cache-t 64 byte-os blokkmérettel. A cache kezdetben csupa érvénytelen blokkot tartalmaz. Lefuttatjuk az alábbi programot: short int t[32][32]; int sum = 0; for (int i=0; i<32; i++) for (int j=0; j<32; j++) sum += t[i][j]; Feltételezések: a short int 2 byte-os, a t tömb blokkhatáron kezdődik, a két dimenziós tömb a memóriában sor-folytonosan helyezkedik el, a cache direkt leképzést használ. Az i,j változó regiszterekben van tárolva, a cache-t nem terhelik. (a) Hány cache hibát vált ki a fenti algoritmus? Számolja ki a cache hiba-arányt! (a) A blokkméret 64 byte, így pontosan 32 rövid egész fér el egy blokkban. A blokkok száma 16. Az első 16 sor-hivatkozás mindegyike betölt egy blokkot, ez 16 cache-hiba. A második 16 sor is hibát okoz, hiszen a cache már tele van, ez újabb 16 hiba, összesen tehát 32 cache hibánk lesz. A hiba arány 32/1024=3.125%

4. Feladat Vegyünk egy 1 kB méretű cache-t 64 byte-os blokkmérettel 4. Feladat Vegyünk egy 1 kB méretű cache-t 64 byte-os blokkmérettel. A cache kezdetben csupa érvénytelen blokkot tartalmaz. Lefuttatjuk az alábbi programot: short int t[32][32]; int sum = 0; for (int j=0; j<32; j++) for (int i=0; i<32; i++) sum += t[i][j]; Feltételezések: a short int 2 byte-os, a t tömb blokkhatáron kezdődik, a két dimenziós tömb a memóriában sor-folytonosan helyezkedik el, a cache direkt leképzést használ. Az i,j változó regiszterekben van tárolva, a cache-t nem terhelik. (b) Hány cache hibát vált ki a fenti algoritmus, ha megcseréljük a két ciklust? Számolja ki a cache hiba-arányt! (b) Megcserélt ciklus esetén az első oszlopra történő hivatkozás először betölti a 0~15 sort, ezzel megtelik a cache, ezután a 16~31. sor betöltése ismét 16 cache hibát okoz, azaz egyetlen oszlop kezelése 32 hibát okoz. Ez ugyanígy történik az összes oszlop esetén, vagyis 32x32= 1024 cache hiba lesz, a hiba-arány 100%

4. Feladat Vegyünk egy 1 kB méretű cache-t 64 byte-os blokkmérettel 4. Feladat Vegyünk egy 1 kB méretű cache-t 64 byte-os blokkmérettel. A cache kezdetben csupa érvénytelen blokkot tartalmaz. Lefuttatjuk az alábbi programot: short int t[32][32]; int sum = 0; for (int i=0; i<32; i++) for (int j=0; j<32; j++) sum += t[i][j]; Feltételezések: a short int 2 byte-os, a t tömb blokkhatáron kezdődik, a két dimenziós tömb a memóriában sor-folytonosan helyezkedik el, a cache direkt leképzést használ. Az i,j változó regiszterekben van tárolva, a cache-t nem terhelik. (c) Mekkora cache-re lenne szükség, hogy a megcserélt for ciklusokkal is ugyanolyan hibaarányt kapjunk, mint az eredeti algoritmussal? (c) Ha el tudjuk érni, hogy a 16~31. sor ne írja felül a már benn lévő sorokat, akkor minden sort csak egyszer kell betölteni. Ez akkor lehetséges, ha a cache mind a 32 sort képes tárolni, azaz 32x64=2048 bájt méretű gyorsítótár kell.

5. Feladat Vegyünk egy 2 kB méretű cache-t 64 byte-os blokkmérettel 5. Feladat Vegyünk egy 2 kB méretű cache-t 64 byte-os blokkmérettel. A cache kezdetben csupa érvénytelen blokkot tartalmaz. Lefuttatjuk az alábbi programot: double a[32][64]; double b[32][32]; for (int i=0; i<32; i++) for (int j=0; j<32; j++) a[i][2*j] += b[i][16+j/2]; Feltételezések: a double 8 byte-os, a t tömb blokkhatáron kezdődik, a két dimenziós tömb a memóriában sor-folytonosan helyezkedik el, a cache direkt leképezést használ. Az i,j változó regiszterekben van tárolva, a cache-t nem terhelik. (a) Hány cache hibát vált ki a fenti algoritmus? Számolja ki a cache hiba-arányt! a) A külső ciklus minden iterációjában a belső ciklusban a „b” tömb 16 elemére hivatkozunk (bi,16~bi,31), ez 16*8=128 byte, azaz 2 blokk. Ugyan az „a” tömbből csak 32 elemre hivatkozunk, (ezek a páros indexűek: ai,0~ai,62) de a teljes tömböt be kell hozni, ez 64*8=512 bájt, azaz 8 blokk. Így a cache hibák száma: 2+8=10. Ezalatt összesen 3*32 memóriaművelet történik (2 olvasás, 1 írás). A külső ciklust is figyelembe véve 32*10=320 hiba adódik 3*32*32=3072 műveletre, azaz a cache hiba arány 10,4%.

5. Feladat Vegyünk egy 2 kB méretű cache-t 64 byte-os blokkmérettel 5. Feladat Vegyünk egy 2 kB méretű cache-t 64 byte-os blokkmérettel. A cache kezdetben csupa érvénytelen blokkot tartalmaz. Lefuttatjuk az alábbi programot: double a[32][64]; double b[32][32]; for (int j=0; j<32; j++) for (int i=0; i<32; i++) a[i][2*j] += b[i][16+j/2]; Feltételezések: a short double 8 byte-os, a t tömb blokkhatáron kezdődik, a két dimenziós tömb a memóriában sor-folytonosan helyezkedik el, a cache direkt leképzést használ. Az i,j változó regiszterekben van tárolva, a cache-t nem terhelik. (b) Hány cache hibát vált ki a fenti algoritmus, ha megcseréljük a két ciklust? Számolja ki a cache hiba-arányt! b) Nézzük az első ciklust: j=0, 0=i<32 . a[0][0]=a[0][0]+b[0][16] a[1][0]=a[1][0]+b[1][16] …..a[31][0]=a[31][0]+b[31][16] Minden „i” értékhez be kell hozni „a”-ból és „b”-ből is egy blokknyit. A belső ciklus 16. végrehajtása teljesen megtölti a cache-t, minden esetben cache hibát okozva. Ugyanez történik a 16=i<32 esetben is és j minden értékére. Megcserélt ciklusok esetén minden egyes oszlophoz teljesen újra kell tölteni a cache memóriát, ezért a ciklusok megcserélésével 100% lesz a cache hiba arány.

5. Feladat Vegyünk egy 2 kB méretű cache-t 64 byte-os blokkmérettel 5. Feladat Vegyünk egy 2 kB méretű cache-t 64 byte-os blokkmérettel. A cache kezdetben csupa érvénytelen blokkot tartalmaz. Lefuttatjuk az alábbi programot: double a[32][64]; double b[32][32]; for (int i=0; i<32; i++) for (int j=0; j<32; j++) a[i][2*j] += b[i][16+j/2]; Feltételezések: a double 8 byte-os, a t tömb blokkhatáron kezdődik, a két dimenziós tömb a memóriában sor-folytonosan helyezkedik el, a cache direkt leképzést használ. Az i,j változó regiszterekben van tárolva, a cache-t nem terhelik. (c) Mekkora cache-re lenne szükség, hogy a megcserélt for ciklusokkal is ugyanolyan hibaarányt kapjunk, mint az eredeti algoritmussal? c) 64 blokknak (32 az „a” tömbnek, 32 a „b”-nek) kell elférnie a cache-ben, hogy a másik ciklusszervezés is jó legyen, tehát 4kB-os cache szükséges.