A memória működése szoftverfejlesztői szemmel. Smidla József Operációkutatási Laboratórium 2013. november 20.



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

elektronikus adattárolást memóriacím

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

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

Assembly. Iványi Péter

statikus RAM ( tároló eleme: flip-flop ),

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

Számítógép architektúrák. Tartalom. A memória. A memória

Cache, Cache és harmadszor is Cache

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

OPERÁCIÓS RENDSZEREK. Elmélet

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

5. tétel. A számítógép sematikus felépítése. (Ábra, buszok, CPU, Memória, IT, DMA, Periféria vezérlő)

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

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

Ismerkedjünk tovább a számítógéppel. Alaplap és a processzeor

MEMÓRIA TECHNOLÓGIÁK. Számítógép-architektúrák 4. gyakorlat. Dr. Lencse Gábor. tudományos főmunkatárs BME Híradástechnikai Tanszék

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

Négyprocesszoros közvetlen csatolású szerverek architektúrája:

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

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

Digitális rendszerek. Mikroarchitektúra szintje

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

Dr. Oniga István. DIGITÁLIS TECHNIKA 10 Memóriák

Feladatlap: Számítógép összetevők keresése

Digitális rendszerek. Memória lapkák

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

Az interrupt Benesóczky Zoltán 2004

Számítógép architektúrák. Tartalom. A memória. A memória

Programozás I. zárthelyi dolgozat

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

A Számítógépek hardver elemei

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

Dr. Oniga István. DIGITÁLIS TECHNIKA 10 Memóriák

8. témakör. Memóriák 1. Számítógép sematikus felépítése: 2.A memória fogalma: 3.A memóriák csoportosítása:

A 32 bites x86-os architektúra regiszterei

Bevitel-Kivitel. Bevitel-Kivitel és Perifériák. Algoritmusok és Alkalmazásaik Tanszék Budapest december 16.

7. Fejezet A processzor és a memória

Számítógép fajtái. 1) személyi számítógép ( PC, Apple Macintosh) - asztali (desktop) - hordozható (laptop, notebook, palmtop)

Tartalom. Számítógép architektúrák. A memória. A tárak implementációja. A félvezető tárolók. Egy cella

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

Adatelérés és memóriakezelés

Digitális rendszerek. Digitális logika szintje

Paraméter átadás regisztereken keresztül

Architektúra, memóriák

Bepillantás a gépházba

A számítógép egységei

Digitális eszközök típusai

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

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

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

Magas szintű optimalizálás

Architektúra, megszakítási rendszerek

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

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

A PC vagyis a személyi számítógép. VIII. rész

MEM 5. A DIGITÁLIS ADATTÁRAK (MEMÓRIÁK) A FÉLVEZETŐ ALAPÚ MEMÓRIÁK

Újrakonfigurálható technológiák nagy teljesítményű alkalmazásai

Készítette: Trosztel Mátyás Konzulens: Hajós Gergely

Informatika érettségi vizsga

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

Processzor (CPU - Central Processing Unit)

Mikrorendszerek tervezése

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

Alaplap. Az alaplapról. Néhány processzorfoglalat. Slot. < Hardver

Mikrorendszerek tervezése

Vé V g é r g e r h e a h j a tá t s á i s s z s ál á ak a Runnable, Thread

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

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

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

Máté: Assembly programozás

Bevezetés az informatikába

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

Dr. Illés Zoltán

Számítógép architektúrák. A memória

Assembly Utasítások, programok. Iványi Péter

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

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

7.hét: A sorrendi hálózatok elemei II.

találhatók. A memória-szervezési modell mondja meg azt, hogy miként

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

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

Mutatók és mutató-aritmetika C-ben március 19.

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

BEVEZETÉS AZ INFORMATIKÁBA - SZÁMÍTÓGÉP ARCHITEKTÚRÁK. Háber István Ihaber@pmmik.pte.hu

Jelfeldolgozás a közlekedésben

Dr. Oniga István DIGITÁLIS TECHNIKA 8

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

SZÁMÍTÓGÉPARCHITEKTÚRÁK

VEZÉRLŐEGYSÉGEK. Tartalom

I. el adás, A számítógép belseje

6. óra Mi van a számítógépházban? A számítógép: elektronikus berendezés. Tárolja az adatokat, feldolgozza és az adatok ki és bevitelére is képes.

Adatok ábrázolása, adattípusok

Alaplap. Slot. Bővítőkártyák. Csatolható tárolók. Portok. < Hardver

Programozás alapjai C nyelv 5. gyakorlat. Írjunk ki fordítva! Írjunk ki fordítva! (3)

Nagy Gergely április 4.

2016/08/31 02:45 1/6 Hardver alapok

Programozás I gyakorlat

SzA19. Az elágazások vizsgálata

Átírás:

A memória működése szoftverfejlesztői szemmel Smidla József Operációkutatási Laboratórium 2013. november 20. 1

Tartalom A memória felépítése Cache memória Mérési adatok Cache detektáló program 2

Architektúra FSB: Front Side Bus, az északi hidat köti össze a processzorokkal Északi híd: Memóriavezérlő, összeköti az FSB-t a memóriával, és néhány perifériával Szűk keresztmetszet csökkentése: DMA (Direct Memory Access) Északi híd és memória közötti szűk keresztmetszett csökkent- hető több csatornával (DDR2-nél 2 csatorna) 3

Memória fajták SRAM: Static RAM 0 és 1 állapotok egyikét tárolja 1 db cella 6 tranzisztort igényel (4 tranzisztorral is megoldható, de van hátránya) Folyamatos áram ellátást igényel Ha a WL vonalat felhúzzuk, a kimeneten egyből megjelenik a tartalom, nem kell várakozni Stabil állapot, nem kell frissíteni Drága 4

Memória fajták DRAM: Dynamic RAM 1 tranzisztor és 1 kondenzátor Ha az AL vonalat bekapcsoljuk, akkor a DL felé a C kondenzátor töltöttségétől függően töltés áramlik, vagy nem Probléma: az olvasás kiüríti a kondenzátort, ezért vissza kell tölteni a tartalmát Idővel a kondenzátor tartalma szivárog A legtöbb DRAM chipben a cellákat 64 ms-ként frissíteni kell Lassabb, mint az SRAM De legalább olcsó 5

DRAM elérés Minden cellának egyedi címe van A címet elfelezzük, az egyik felével az oszlopot, a másikkal a sort címezzük meg (különben egy túl nagy demultiplexerre lenne szükség) 6

DRAM elérés Először a címvonalra rakjuk a sor címet, közben az RAS vonal aktív Majd t RCD idő elteltével a címvonalra rakjuk az oszlop címet is, ezt a CAS vonallal jelezzük Végül CL idő elteltével megjelenik az adat a DQ vonalon 7

DRAM elérés A következő eléréshez a RAS vonalnak újra kell töltődnie, ehhez t RP idő kell A t RP 1 ciklussal tovább tart, mint az átvitel A példában 7 ciklusból 2 ciklusban van adat átvitel 8

Cache A fő memória DRAM-ból áll A mai számítógépeken nem ugyanolyan magas órajelen működik a CPU és a memória (nagyon nehéz, és költséges a memóriát is ilyen sebességgel működtetni) A memória modul távol van a CPU-tól, a vezeték is sokat késleltet A DRAM lassabb, mint az SRAM 9

Cache A CPU és a memória közé illesszünk cache-t A cache-ben tároljuk a gyakran használt adatokat A cache tartalmát hamarabb kiolvashatjuk 10

Cache szintek Manapság több szintű cache-t alkalmaznak Minél magasabb a cache szintje, annál messzebb van a CPU-tól Az L1 cache szétválik utasítás és adat cache-re Cél Órajel ciklusok Regiszterek 1 L1d cache ~ 3 L2 cache ~ 14 Memória ~ 240 Pentium M processzor 11

Cache megosztás Több processzor esetén minden CPU külön cache-el rendelkezik Egy CPU-n belül minden mag saját L1 cache-el rendelkezik A CPU magasabb szintű cache-ein osztoznak a magok 12

A cache használata A CPU-nak szüksége van egy bizonyos memóriacímen lévő adatra A CPU megnézi, hogy ez az adat szerepel-e a cache-ben, ha nem, akkor betölti azt Ha 4 bájtra van szükségünk, akkor nem csak azt a 4 bájtot töltjük be, hanem 32, vagy 64 bájtot, azaz egy teljes cache line-t A cache line beolvasása hatékonyan megoldható külön RAS és CAS jelek nélkül 13

A cache használata A kiolvasott információ az L1 cache-be töltődik be Ha a cache line 64 bájt, akkor a cache line-on belül minden bájtot 6 bittel címezhetjük meg (offset) A memóriacím többi részét arra használjuk, hogy a bájtot megkeressük a cache-en belül Ha írunk egy adott címre, akkor a hozzá tartozó cache line-t be kell tölteni a cache-be Részleges cache line nem tárolható a cache-ben 14

A cache használata Mi történik, ha nincs elég hely az új adatnak az L1 cache-ben? A CPU kiválaszt egy cache line-t, és azt az L2-be, ha ott sincs hely, akkor az L3-ba, végül a fő memóriába dobja Exlusive cache: minden adat legfeljebb csak 1 cache-ben szerepel (AMD, VIA processzorok) A cache line betöltése gyors Inclusive cache: Az alacsonyabb szintű cache-ek tartalma részhalmaza a magasabb szintűnek (Intel) A cache line kidobása gyors 15

Cache koherencia Ha egy CPU írja a memóriát, akkor a megfelelő cache line-t megjelöli (dirty, nem ugyanaz van a cache-ben, mint a memóriában, majd valamikor visszakerül a tartalom a memóriába) Ha több CPU van, akkor a memóriát ugyanolyannak kell látniuk: cache koherencia Cache koherencia protokollok, például MESI Alapelv: A dirty cache line csak 1 cache-ben létezhet, a tiszta másolatok (clean copy) akármennyiben 16

Full associative cache A memóriacímet egy tag és egy offset részre osztjuk Minden cache line tag-jét tároljuk Egy memóriacím tag-ét párhuzamosan összehasonlítunk minden eltárolt tag-el Gyors Technikailag nagyon nehéz egyszerre sok komparátort működtetni A mérete limitált, csak speciális cache-ekben alkalmazzuk (TLB) 17

Direct-Mapped cache A memória címet már 3 részre osztjuk A set adattaggal címezzük meg a cache-ben a cache line-okat A tag-et csak ellenőrzésre használjuk, hogy a különböző, de azonos set-el rendelkező címeket megkülönböztessük Előny: nagyobb lehet, mint a full associative cache Hátrány: Bizonyos, azonos távolságra lévő memóriacímeket nem tárolhatunk egyszerre 18

Set-Associative cache A direct-mapped cache-t egészítjük ki úgy, hogy több azonos set-ű memóriacímet is tárolhatunk Többnyire a set-ek számát növelik Cache méret: asszociativitás * halmazok száma * cache line mérete 19

Set-Associative cache Cache miss: a keresett adatot nem találjuk meg a cache-ben Cache méret és asszociativitás hatására a cache miss arányra: 20

Teszt Tömb bejárás struct l { }; struct l * n; long int pad[npad]; Az NPAD-al állíthatjuk, hogy mekkora legyen az n-ek közti távolság 16 kb L1d, 1 MB L2 cache 21

Szekvenciális bejárás NPAD = 0 Az első két mérés zajjal terhelt A határok nem élesek, mert a rendszer más elemei is használják a cache-t A határok a cache méreteknél vannak: 2 14 bájtig: L1d 2 15 -től 2 20 bájtig: L2 2 21 bájttól: memória is Magyarázat: hatékony prefetch 22

Szekvenciális bejárás NPAD = 0, 7, 15, 31 Az n elemek egyre messzebb kerülnek egymástól Az L1d használatakor nem kell prefetch, a vonalak illeszkednek egymásra NPAD = 7-től az L2 használatakor nem használható a prefetch, az L2 elérési ideje jelenik meg Az L2-n túllépve tovább romlik a helyzet, megint nem használható a prefetch (kis adatokat használunk) A TLB cache is közrejátszik a lassulásan 23

A TLB hatása TLB: a virtuális címet fizikai címmé kell alakítani, a TLB ezt gyorsítja fel Két mérés: a cache line-ok azonos lapokon, illetve külön lapokon Nagy ugrás 2 13 bájtnál 64 bejegyzés van a TLB-ben Ha a TLB nem használható ki, akkor a fizikai cím előállítása hosszadalmasabb, ezért nő a címzési idő 24

Írási sebesség Follow: az eddigi teszt (NPAD most mindig 1) Addnext0: a következő elem hozzáadása a mostanihoz Inc: pad[0] inkrementálása Várakozás: Az Addnext0 lassabb, mert több memória műveletet igényel Azonban: Amíg az L2-ben elfér minden, addig az Addnext0 szoftveresen prefetch-eli a következő adatot! Az L2-t átlépve az Inc és Addnext0 hatására a módosított tartalmat vissza kell írni a memóriába, mivel gyakran kell új cache line-nak helyet csinálni 25

Véletlenszerű elérés Az elemeket véletlenszerű sorrendben járjuk be Nincs prefetch A TLB hatása is érződik 26

Több szálú elérés Ha túlléptük az L2 cache méretét, akkor több szál esetén lassulás figyelhető meg: A memóriához kell nyúlni, ez pedig szűk keresztmetszetet jelent 27

Több szálú elérés Inkrementáláskor drasztikusan romlik a helyzet Fenn kell tartani a cache koherenciát, ez pedig időt vesz igénybe 28

CPUID CPUID: Az Intel processzoraiban elérhető utasítás, amely segítségével rengeteg CPU jellemzőt kiolvashatunk A CPUID előtt feltöltjük az eax, ebx, ecx, edx regisztereket a paraméterekkel Lefuttatjuk a CPUID-t A válasz az eax, ebx, ecx és edx regiszterekben lesz 29

Processzor nevének kiolvasása Az eax-be töltsük be a 80000002h értéket, majd futtassuk a CPUID-t Ekkor a 4 regiszterbe betöltődik a név első 4*4 bájtja Folytassuk ezt a 80000003h és 80000004h értékekkel 30

CPUID meghívása gcc-vel typedef struct Registers { unsigned int eax; unsigned int ebx; unsigned int ecx; unsigned int edx; } Registers; Registers cpuid(registers args) { asm("cpuid" : "=a"(args.eax), "=b"(args.ebx), "=c"(args.ecx), "=d"(args.edx) : "a"(args.eax), "b"(args.ebx), "c"(args.ecx), "d"(args.edx) ); return args; } Inline assembly 31

CPUID meghívása gcc-vel typedef struct Registers { unsigned int eax; unsigned int ebx; unsigned int ecx; unsigned int edx; } Registers; Registers cpuid(registers args) { asm("cpuid" : "=a"(args.eax), "=b"(args.ebx), "=c"(args.ecx), "=d"(args.edx) : "a"(args.eax), "b"(args.ebx), "c"(args.ecx), "d"(args.edx) ); return args; } Az args.eax értéke az eax (az a jelöli) regiszterbe töltődik, és így tovább 32

CPUID meghívása gcc-vel typedef struct Registers { unsigned int eax; unsigned int ebx; unsigned int ecx; unsigned int edx; } Registers; Registers cpuid(registers args) { asm("cpuid" : "=a"(args.eax), "=b"(args.ebx), "=c"(args.ecx), "=d"(args.edx) : "a"(args.eax), "b"(args.ebx), "c"(args.ecx), "d"(args.edx) ); return args; } Az args.eax értéke az eax (az a jelöli) regiszterből töltődik vissza, miután az assembly kód lefutott 33

Cache detektálás: struktúra typedef enum CACHE_TYPE { DATA_CACHE = 1, INSTRUCTION_CACHE = 2, UNIFIED_CACHE = 3 } CACHE_TYPE; typedef struct CacheInfo { int threads; int fullassociative; int level; CACHE_TYPE type; int associativity; int linepartitions; int linesize; int sets; int size; } CacheInfo; 34

Cache detektálás: kód CacheInfo getcacheinfo(int cacheid) { Registers regs; regs.eax = 4; regs.ecx = cacheid; regs.ebx = regs.edx = 0; regs = cpuid(regs); CacheInfo info; info.threads = getbits(regs.eax, 0, 4) + 1; info.fullassociative = getbits(regs.eax, 9, 9); info.level = getbits(regs.eax, 5, 7); info.type = getbits(regs.eax, 0, 4); info.associativity = getbits(regs.ebx, 22, 31) + 1; info.linepartitions = getbits(regs.ebx, 12, 21) + 1; info.linesize = getbits(regs.ebx, 0, 11) + 1; info.sets = regs.ecx + 1; info.size = info.associativity * info.linepartitions * info.linesize * info.sets; return info; } 35

Eredmény 36

Források Ulrich Drepper: What Every Programmer Should Know About Memory 37

Köszönöm a figyelmet! 38