Search
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.
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:
Instrukční cache:
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í.
Doplňující otázky:
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.
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
cg_annotate filename ~/main.cpp
Pozn.: Pri nedostatku casu muzete pouzit bubble sort z cviceni c.3.
Priklad vystupu po anotaci je zde: