Care About Your Craft: Why spend your life developing software unless you care about doing it well? - The Pragmatic Programmer
Hur räkna ut cache träff/miss (assembly)?
För att förstå denna uppgift måste man förstå några grundläggande koncept i en CPU
minne refereras via load/store instruktioner
vilken minnescell man refererar bestäms av ett heltal: minnesadressen
minsta adresserbara enhet kallas "byte" och är på alla moderna CPUer 8 bitar
Vidare måste man förstå följande om en CPU som har en cache för att snabba upp minnet
en cache är organiserad i rader, s.k. "cache-lines", vars storlek typiskt är många bytes. I denna uppgift är en rad 8 bytes, i de flesta moderna CPUer är den 64 bytes (t.ex. dagens x86 och ARM, men finns definitivt variationer här)
den enkla CPU som beskrivs här använder sig av en s.k. direktmappad cache, dvs varje rad i cachen kan hantera minnesadresser som är en jämn multipel av cachens storlek i bytes (256 bytes) plus radens nummer (från noll) multiplicerat med radens storlek på 8 bytes
en rad håller en minnessekvens från en adress som är en jämn multipel av radlängden upp till radlängd plus radlängd minus ett
Sist men inte minst måste man förstå de assembler-instruktioner som ingår här
movi REG,IM laddar ett konstant värde IM och sparar resultatet i CPU-register REG
ldw REG_D, OFFSET(REG_A) hämtar innehållet från den minnecell som ligger på adressen REG_A + OFFSET och lägg det i register REG_D
stw REG_S, OFFSET(REG_A) sparar innehållet i register REG_Still den minnecell som har adressen REG_A + OFFSET
Läser man assemblerprogrammet får man då
a. här sätts register r8 det konstanta värdet 0xBEDA12C4
b. här laddas minnesinnehållet från 0 + r8 (som är 0xBEDA12C4) och läggs i register r10
c. här laddas minnesinnehållet från 8 + r8 (som är 0xBEDA12CC) och läggs i register r11
d. här sparas innehållet i register r10 till minnesadressen 16 + r8 (som är 0xBEDA12D4)
e. här laddas minnesinnehållet från 32 + r8 (som är 0xBEDA12E4) och läggs i register r10
f. här laddas minnesinnehållet från 40 + r8 (som är 0xBEDA12EC) och läggs i register r10
g. här laddas minnesinnehållet från 24 + r8 (som är 0xBEDA12DC) och läggs i register r11
h. här sparas innehållet i register r10 till minnesadressen 4 + r8 (som är 0xBEDA12C8)
i. här laddas minnesinnehållet från 64 + r8 (som är 0xBEDA1304) och läggs i register r10
Det enda som spelar roll för denna uppgift är vilken adress som man gör load/store till då det avgör vilken cache-rad som påverkas. Är också bara de sista 8 bitarna i adressen man behöver fundera på då det är en direktmappad cache med storlek 256. Så titta bara på de två sista hexsiffrorna i den adress som är resultat av OFFSET + REG_A. Vilken byte i en cache-rad som refereras bestäms av adressens tre minst signifikanta bitar (då 2^3 = 8 vilket är storleken på varje rad) medan nästföljande fem bitar bestämmer vilken rad som avses
är inte en minnesoperation så påverkar inte cache
0xC4 byte 4 i rad 24
0xCC byte 4 i rad 25
0xD4 byte 4 i rad 26
0xE4 byte 4 i rad 28
0xEC byte 4 i rad 29
0xDC byte 4 i rad 27
0xC8 byte 0 i rad 25
0x04 byte 4 i rad 0
Då cachen initialt var tom och det är färre minnesaccesser än cache-rader (så inget behövs slängas ut ur cache) så är det nu bara titta på vilken rad som refereras, har den refererats tidigare är det en träff
är inte en minnesoperation så påverkar inte cache
0xC4 byte 4 i rad 24
0xCC byte 4 i rad 25
0xD4 byte 4 i rad 26
0xE4 byte 4 i rad 28
0xEC byte 4 i rad 29
0xDC byte 4 i rad 27
0xC8 byte 0 i rad 25
0x04 byte 4 i rad 0
@yoshman
Tack för ditt svar, hann inte läsa det innan tentan. Fick förklarat av en annan student hur man skulle göra igår. Du kanske kan kolla om mitt svar på tentan blev rätt ;)? Om mitt svar är fel så klarade jag nog tyvärr inte tentan.
Jag diskuterade svaret med några andra efteråt och ingen som fått samma som mig.
Fråga: Vi har följande avsnitt ur ett assembler program
1. movia r8, 0x357B40
2. ldw r10, 0 (r8)
3. ldw r11, 16 (r8)
4. ldw r12, 40 (r8)
5. stw r13, 132 (r8)
6. ldw r14, 8 (r8)
Vi har också ett cacheminne med egenskaper enligt tabellen nedan:
Storlek 512 byte
Radlängd 16 byte
Associativitet 2-vägs
För varje instruktion som läser eller skriver till minnet ska du ange om det blir en träff eller miss i cacheminnet.
Svar: 512/16=32 32/2=16 16=2^4 så både byte och rad är 4
1. 0x357B40=[0011 0101 0111 1011] [0100] [0000] tag rad byte
2. 0x357B40=0100 0000 rad 0100 ger MISS 0x357B40-->0x357B4F
3. 0x357B40+16=0x357B50 0101 0000 rad 0101 ger MISS 0x357B50-->0x357B5F
4. 0x357B40+40=0x357B68 0110 1000 rad 0110 ger MISS 0x357B60-->0x357B6F
5. 0x357B40+132=0x357BC4 1100 0100 rad 1100 ger MISS 0x357BC0-->0x357BCF
6. 0x357B40+8=0x357B48 0100 1000 rad+tag ger TRÄFF
@R45PB3RRY: kommer du ihåg hur man gör? kan du visa hur man göra denna?
cache minne med dessa egenskaper
Storlek 512 bytes
Radlängd 16 byte
associativitet 2 vägs
adress längd 16 bitar
Följande avsnitt ur ett assembler program:
1. movia r8, 0xBEB4
2. ldw r10, 0(r8)
3. ldw r11, 10(r8)
4. ldw r12, 16(r8)
5. stw r13, 4(r8)
6. ldw r14, 12(r8)
7. stw r15, 8(r8)
Cache minnet är tomt från början och instruktionerna sker sekventiellt
ange för varje instruktion som läser eller skriver till minnet om det blir träff eller miss i cacheminnet
- Igår Efter konkursryktena – Louqe är tillbaka 16
- Igår Kunskapsquiz: IT och det moderna försvaret 41
- 17 / 4 Datorhallar åker på miljardstor skattesmäll – ljög om att utvinna krypto 57
- 17 / 4 Veckans fråga: Möss eller ljud – Vad lägger du mest pengar på? 73
- 16 / 4 X kan råda bot på bottar med betallösning 34
- RX 570 från traderaköp når inte angivna boostfrekvenser?5
- X kan råda bot på bottar med betallösning35
- Vad vill ni se i nästa Battlefield?82
- Benify-erbjudanden på Samsung-TV [utbruten tråd]1516
- Dagens fynd — Diskussionstråden49387
- Edge kan få klassisk sci-fi-funktion13
- Hjälp med anslutning till AV-receicer0
- Dags för robotgräsklippare430
- Datorhallar åker på miljardstor skattesmäll – ljög om att utvinna krypto58
- *edit* mITX/mATX bygge - 1440p Warzone / wow Budget: ~20.000kr ?53
- Säljes 12700k | 980 PRO 1tb | Contact Frame TG
- Köpes Söker Dongle till Steelseries Arctis 7X PLUS
- Säljes Diverse PS5-spel, Ritplatta och Motorola Moto G 5g plus!
- Säljes RTX 3050 8 GB ROG STRIX GAMING OC
- Säljes Sennheiser HD560S och RÖDE NT-USB
- Säljes Mp600 Pro 2TB, hel dator gtx 1080,6700k, ryzen 3600 samt gtx 1070
- Säljes AOC AGON PRO PD32M - 32" 4K IPS MiniLED 144 Hz
- Säljes ASUS Z170-A inklusive CPU i7-6700 och kylare "be quiet! Pure Rock"
- Säljes Inno3D 4070 Super
- Säljes Herman Miller Embody + Atlas headrest
- Elgato lanserar tillbehörsserie för ”vanligt folk”5
- Edge kan få klassisk sci-fi-funktion13
- Efter konkursryktena – Louqe är tillbaka16
- Snart ber Microsoft dig överge ditt lokala konto107
- Kunskapsquiz: IT och det moderna försvaret41
- Här är priserna på LG:s nya OLED-arsenal52
- 3dfx grafikkort återuppstår i hobbyprojekt19
- Logitech släpper ”AI-knapp” – snabbgenväg till Chat GPT11
- Här är systemkraven för Ghost of Tsushima till PC30
- Välj rätt TV för ljusa rummet13