Aufgabe 1 - Datenpfad (16 Punkte) --------------------------------- Befehl: move $t1, $t2 # rd = rs a) Dieser Befehl kann ohne eine Datenpfaderweiterung im Single-Cycle-Processor implementiert werden. i) Welcher Befehlstyp wird von Ihnen zur Implementierung genutzt und wie ist er belegt? ii) Geben sie die benötigten Steuersignale an. Setzen sie "don't cares wenn möglich. b) Geben sie die Steuersignale an, die für den Instruction-Fetch bei einem Multi-Cycle-Processor gesetzt sein müssen. Setzen sie "don't care" wenn möglich. Die folgenden Fragen beziehen sich auf den Multicycle-Prozessor. Mehrere Antworten können richtig sein. Fragen, die nicht exakt NUR die richtigen Antworten markiert haben, werden mit 0 Punkten bewertet. c) Wieviele Takte braucht ein R-Typ-Befehl? ( ) 3 ( ) 4 ( ) 5 d)-f) Multiple Choice Fragen, die nicht mehr in Erinnerung geblieben sind Aufgabe 2 - CPI (8 Punkte) --------------------------- Vor Verbesserung: ----------------- ALU Load Store Jump Programm 1 20% 70% 5% 5% Programm 2 20% 30% 30% 10% Nach Verbesserung: ------------------ ALU Load Store Jump Programm 1 35% 20% 30% 15% Programm 2 40% 25% 20% 15% a) Berechne die CPI von Programm1 und Programm2 sowohl vor als auch nach der Verbesserung b) Berechnen sie den Speedup der erreicht wurde (Verbesserungsfaktor). Gehen sie davon aus, dass alle Programme gleich oft ausgeführt werden. GCC ICC LLVM Programm1 7,6s 4,0s 3,3s Programm2 3,8s 6,4s 9,0s c) Welcher Compiler bietet sich an? Man hat vorher den Compiler GCC verwendet und möchte jetzt gegebenenfalls die Verbesserung durch einen Wechsel erfahren. Benutzen Sie das geometrische Mittel. Aufgabe 3 - Pipelining (9 Punkte) ---------------------------------- Es ist ein Pipeline-Prozessor mit Forwarding-Unit gegeben. Code: subi $t0, $t0, 1 addi $a0, a0, 2 lw $t2, 4($t0) sll $t2, $t2, 2 add $t1, $a1, $t2 lw $v0, 0($t1) a) Wie viele Hazards gibt es in diesem Code und was sind es für welche? b) Zeichne in das vorg. Pipeline-Diagramm Forwarding-Pfeile und Stall-Cycles ein. c) Berechne die CPI des gesamten Programms unter der Annahme, dass die Pipeline am Anfang leer ist. Aufgabe 4 - Caches (9 Punkte) ------------------------------ Adresse: +------------------------+ |63 | |5 0| +------------------------+ | +----+ | | +----------------+ +----------------+ +----------------+ +----------------+ | |V|Dirty|Tag|Data| |V|Dirty|Tag|Data| |V|Dirty|Tag|Data| |V|Dirty|Tag|Data| | 0| | | | | 0| | | | | 0| | | | | 0| | | | | | 1| | | | | 1| | | | | 1| | | | | 1| | | | | | 2| | | | | 2| | | | | 2| | | | | 2| | | | | | 3| | | | | 3| | | | | 3| | | | | 3| | | | | | 4| | | | | 4| | | | | 4| | | | | 4| | | | | | 5| | | | | 5| | | | | 5| | | | | 5| | | | | | 6| | | | | 6| | | | | 6| | | | | 6| | | | | | 7| | | | | 7| | | | | 7| | | | | 7| | | | | | +----------------+ +----------------+ +----------------+ +----------------+ | | | | | | | | | | | | | +---------------[=]---------------------[=]---------------------[=]---------------------[=] | | | | | | | | | | | | | +----[&]-+ | +----[&]-+ | +----[&]-+ | +----[&]-+ | | | | | | | | | |+----------------------+ | | | | | ||+---------------------------------------------+ | | | |||+--------------------------------------------------------------------+ | |||| | | | | |||| +----------------------+|+----------------------+ | |||| |||+---------------------------------------------+ |||| 4 |||| ++++--------------/----------[ MUX ] |||| | [ >= 1 ] Data | Hit a) Geben Sie an, wie viel n-fach-assoziativ der gegebene Cache ist (n = # Assozitäten) b) Geben sie die Größe von Index, Tag und Blockoffset in Bit an Gegeben ist folgende Adresse: ----------------------------- 0xA1B2C3D4E5F6 c) Geben sie den Index der Adresse im Oktalsystem an (Zur Basis 8) d) Geben sie die Blockgröße in Bits an e) Geben sie die Anzahl an Bits an, die zur Implementierung dieses Caches nötig sind f) Ist dieser Cache ein Write-through oder ein Write-Back? Begründen sie!