Warning
This page is located in archive.

5. Hierarchický koncept pamětí, cache - 2. část

Náplň cvičení

Cílem tohoto cvičení je prohloubit znalosti o cache, ujasnit a na příkladu ukázat principy časové a prostorové lokality, a zamyslet se nad otázkou optimalizace parametrů cache.

Úkol A

Uvažujte níže uvedený program.

#define s0 $16
#define s1 $17
#define s2 $18

.globl    pole
.data
.align    2

pole:
.word    1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12
.text
.globl start
.ent start

start:

la   s0, pole       // adresa zacateku pole do registru s0
addi s1, $0, 3      // Pocet pruchodu cyklem (pocet iteraci)
nop                 // Proc je zde nop? Zkuste jej odranit.. Zmeni se hit rate?

loop:
    beq s1,$0, konec
    lw s2, 0(s0)      // Cteni 0-teho prvku pole
    lw s2, 4(s0)      // Cteni 1. prvku (4/4=1)

    lw s2, 36(s0)     // Cteni 9. prvku (36/4=9)
    lw s2, 40(s0)     // Cteni 10.prvku (40/4=10)
   
    addi s1, s1, -1
    j loop

konec:
nop  

end_loop:           //Koncova nekonecna smycka
    j end_loop
    nop

.end start

Dále uvažujte instrukční a datovou slovně zarovnanou cache, každou o velikosti 8 slov (1 slovo = 4B), strategie nahrazování (Replacement policy) LRU. Vyplňte následující tabulku pro instrukční a pro datovou cache. Detailně sledujte vykonávání programu a přístupy do cache.

Datová cache:

Přímo mapovaná Se sníženým
stupňem
asociativity
Plně asociativní
Size/Block size/Blocks in sets: 8/1/1 8/2/1 8/8/1 8/2/2 8/4/2 8/2/4 8/1/8
Hit Count:
Miss Count:
Hit Rate:


Instrukční cache:

Přímo mapovaná Se sníženým
stupňem
asociativity
Plně asociativní
Size/Block size/Blocks in sets: 8/1/1 8/2/1 8/8/1 8/2/2 8/4/2 8/2/4 8/1/8
Hit Count:
Miss Count:
Hit Rate:


Kontrolní otázky

  • K jakému závěru jste přišli? Která cache je nejlepší?
  • Je plně asociativní cache vždy nejlepší?
  • Závisí Hit rate od vykonávaného programu, nebo je to parametr cache?
  • Můžou být v cache data, která procesor nikdy nevyužije? (data, které nežádá, nebo instrukce, které nikdy nevykoná)
  • Jaká je ideální velikost bloku? Od čeho se tento parametr odvíjí?
  • Která cache je pro danou velikost nejlevnější?
  • Co všechno se do cache ukládá?
  • Jakou instrukční a datovou cache má procesor Vašeho počítače? Uveďte parametry velikost cache, počet cest a velikost bloku.
Přímo mapovaná cache má právě jeden blok v jednom set-u. Plně asociativní cache má právě tolik cest (ways), kolik obsahuje bloků.

Úkol B

Uvažujte program z minulého cvičení (insert sort) a cache o velikosti 8 slov. Pro jakou strategii nahrazování (Replacement policy) lze očekávat dosažení nejlepších výsledků? Uvažujte i pro datovou i pro instrukční cache. Ověřte simulací.

Kontrolní otázky

  • Bude cache dosahovat nejlepší Hit rate pro ty samé parametry (Size/Block size/Blocks in sets) jako v předchozím příkladu?
  • Znáte i jiné strategie nahrazování než ty, které jsou k dispozici v simulátoru Mips? Najděte na internetu nebo v přednáškách.
  • Pro jakou strategii zápisu (Write policy) lze očekávat, že datová cache nebude zbytečně zaťežovat sběrnici?

Úkol C - Virtuální paměť

Doplňující otázky:

  • Jak funguje překlad virtuální adresy na adresu fyzickou?
  • K čemu slouží “page directory base register”?
  • Jaké informace jsou uloženy v položce tabulky stránek?
  • Pokud jednotka pro správu paměti 32-bit procesoru s 32-bit virtuální i fyzickou adresou používá pro mapování fyzické paměti do virtuálních adresních prostorů systém stránkování a velikost jedné stránky je 4 kB, kolik úrovní tabulek bude využito, pokud je požadované, aby se části stránkovací tabulky každé úrovně vešly právě do jedné stránky paměti a jak bude virtuální adresa rozdělena? Velikost jedne polozky strankovaci tabulky je 4B.

Úkol D

Napište program v C/C++, který zjistí a na obrazovku vypíše parametry cache pamětí Vašeho procesoru (procesoru, na kterém program běží) a velikost stránky virtuální paměti.

Úkol E

Prepiste program insert sort z minuleho cviceni do jazyka C/C++. Zmerte hit rate instrukcni a datove cache prvni urovne, a dale hit rate cache posledni urovne – pokud program spustite na Vasem pocitaci (ucebna KN:2). Kolik pristupu do datove pameti se realizovalo? Kolik se vykonalo instrukci celkem? Zkuste menit uroven optimalizaci pri kompilaci.

Napoveda:Vyhodnotit jak program pracuje s cahce lze pomocí nástroje cachegrind.

 
valgrind --tool=cachegrind ./a.out
kde a.out je Vas program. Pokud chcete program analyzovat detailněji, můžete využít nástroje cg_annotate. Příklad:
cg_annotate filename ~/main.cpp
kde filename je jméno souboru vygenerovaného pomocí cachegrind. Cestu k Vašemu zdrojovému souboru (main.cpp) uvádějte absolutní. Pozor, program kompilujte s priznakem g (debug info).

Pozn.: Pri nedostatku casu muzete pouzit bubble sort z cviceni c.3.

Priklad vystupu po anotaci je zde:

courses/b35apo/tutorials/04-ii/start.txt · Last modified: 2018/04/10 10:02 by stepami9