Search
A. Za jakou dobu provede procesor s taktovací frekvencí 1GHz 1000 instrukcí za předpokladu, že jednu instrukci provede za jeden takt?
B. Za jak dlouho provede tento procesor 1000 instrukcí za předpokladu, že 20% instrukcí jsou přístupy do paměti. Pro jednoduchost předpokládejme, že jeden přístup do paměti trvá 70 ns.
C. Jak se změní doba potřebná k vykonání instrukcí, když nahradíme procesor 2 GHz verzí, ale paměti zůstanou stejné?
D. Jak se změní doba, když ponechám původní 1 GHz procesor, ale přidám do systému cache? Tato cache má hit rate 80% pro daný program a doba nalezení záznamu v cache je 5ns.
V dalším textu budeme pracovat s adresou délky 12 bitů, data jsou 8bitů široká.
Spusťte simulátor Mips, zobrazte datovou cache a v menu Edit > Cache/Mem Config a na záložce Data Cache nastavte parametry podle obrázku:
Nyní otevře vývojové prostředí MipsIt, přeložte následující program, který řadí 15 čísel (algoritmem známým jako Insertion sort). Nahrajte program do simulátoru Mips a sledujte, jak se mění obsah cache a odpovězte na následující otázky:
#define s0 $16 #define s1 $17 #define s2 $18 #define s3 $19 #define s4 $20 #define s5 $21 .globl pole .data .align 2 pole: .word 5, 3, 4, 1, 15, 8, 9, 2, 10, 6, 11, 1, 6, 9, 12 .text .globl start .ent start start: addi s0, $0, 0 //Pozice pro kterou se aktualne hleda minimum (offset do pole, zvysuje se po 4 bajtech) addi s1, $0, 60 //Maximalni hodnota indexu/offsetu. Slouzi k ukonceni cyklu = pocet prvku v poli * 4 (aktualne 15 * 4) add s2, $0, s0 //Pracovni pozice (offset), prvek // s3 - offset nejmensiho nalezeneho prvku v aktualnim behu // s4 - hodnota nejmensiho nalezeneho prvku // s5 - tmp hlavni_cyklus: beq s0, s1, hlavni_cyklus_end lw s4, pole(s0) add s3, s0, $0 add s2, s0, $0 vnitrni_cyklus: beq s2, s1, vnitrni_cyklus_end lw s5, pole(s2) bgt s5, s4, neni_minimum addi s3, s2, 0 addi s4, s5, 0 neni_minimum: addi s2, s2, 4 j vnitrni_cyklus vnitrni_cyklus_end: lw s5, pole(s0) sw s4, pole(s0) sw s5, pole(s3) addi s0, s0, 4 j hlavni_cyklus hlavni_cyklus_end: //Koncová nekonečná smycka end_loop: j end_loop nop .end start
Aby procesor nezačal vykonávat nesmyslné instrukce za koncem vašeho programu, které by mohli ovlivnit výsledek, je potřeba nakonec přidat nekonečnou smyčku. V té procesor uvázne a nezačne vykonávat nesmyslné instrukce, které mohly zůstat v paměti za koncem vašeho programu.
V simulátoru Mips nastavte datovou cache podle obrázku (Size 4, Block size 1 a Blocks in sets 4).
Nyní spusťte program znovu a sledujte chování cache.
V simulátoru Mips nastavte datovou cache podle obrázku (Size 4, Block size 1 a Blocks in sets 2).