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
- Idag Iphones marknadsandel faller i USA 24
- Igår Airtec Pro Type1 – batteridrivet alternativ till tryckluft på burk 56
- Igår Nu stiger hårddiskpriserna med uppemot 10 procent 15
- Igår Analytiker: Apple har överskattat intresset för Vision Pro 50
- 24 / 4 AMD, Nvidia och Intel – vad är det för skillnad mellan grafikkortstillverkarna? 29
- Max spikar priser inför lanseringen162
- Akira har tjänat en halv miljard kronor på ransomware-attacker18
- Elbilar - Tråden för intresserade23181
- Nintendo-innehåll tas bort från Garrys Mod22
- 12v produkt till 15v cigarett2
- Ubiquiti Unifi2758
- Hjälp Inno3d 4090 RGB kabel (4070,4080 mfl)2
- 1440p dator11
- Köpråd moderkort, cpu och ram2
- Det här med Blocket...9726
- Säljes i3-8100
- Köpes Luftkylning och Fläktar
- Köpes Nvidia Quadro P400,600 eller 620
- Säljes Dell Latitude 7530 15,6”
- Köpes Önskar köpa 6700xt eller 3070
- Säljes Asus Geforce RTX 2070 8GB Strix Gaming OC
- Köpes Köper bärbara datorer, trasiga, utan skärm etc.
- Säljes Lenovo Thinkcentre M73
- Säljes Lenovo Legion Slim 5 14” OLED
- Säljes Asus VG248 24"
- Därför blockerar Windows 11 24H2 Start‑menyhack5
- Iphones marknadsandel faller i USA25
- Konsumentverket granskar tio nätbutiker som lurat kunder15
- Airtec Pro Type1 – batteridrivet alternativ till tryckluft på burk57
- Nintendo-innehåll tas bort från Garrys Mod22
- Nu stiger hårddiskpriserna med uppemot 10 procent15
- Quiz: Vad kan du om Inet?70
- Analytiker: Apple har överskattat intresset för Vision Pro50
- Microsoft rullar ut Startmenyreklam till alla66
- EU röstar igenom ”rätten att reparera”53