-
Notifications
You must be signed in to change notification settings - Fork 0
/
Aufgabe.txt
39 lines (27 loc) · 2.22 KB
/
Aufgabe.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
Aufgabe Labor COMPARCH
Thema:
Geschwindigkeitsoptimierung von Prozessoren mittels Pipelining und Superskalarer-Architektur
Hilfsmittel:
- DLX-Simulator
- Papier
- Stift
- Tannenbaum "Rechnerarchitektur"
- Editor nach Wahl
- Beispiel example_6_input.s
0. Vorbereitung:
Lesen Sie sich in die Dokumentation des DLX-Simulators (EinführungDLX.pdf) ein.
Beachten Sie auch das Konzept von Traps, diese werden für den Versuch gebraucht. Im Tannenbaum sind diese im Kapitel 5.6.4 nachzulesen.
Weiterhin ist es Hilfreich das Dokument "Befehlssatz.pdf" (ausgedruckt) mit zu bringen.
Beachten Sie, dass die Angaben für die Standardoptionen ("use-forwarding:true" und "Mips-compatibility-Mode= true", die Branchprediction ist None)
1. Schreiben Sie ein Programm für den DLX-Simulator.
Das Programm soll zunächst 4 Integer-Zahlen aus einer Datei lesen, danach sollen diese möglichst performant miteinander multipliziert werden.
Das Ergebnis soll auf der Konsole ausgegeben werden.
Orientieren Sie sich dabei am Beispiel example_6_input.s aus den DLX Beispielen.
Sie sollten etwa 20 Zeilen Code hinzufügen.
2. Simulieren sie nun die Abarbeitung des Programms auf dem DLX Simulator, benutzen sie dabei Zahlen < 10 wie viele Zyklen braucht das Programm?
-> 192
3. Benutzen sie zahlen > 10 und erklären Sie den Unterschied der Ausführungszeit. Dafür können Sie die Theorien mit dem Simulator überprüfen.
4. Springen Sie in ihrem Programm vor die Stelle wo die Multiplikationen ausgeführt werden (~ab Cycle 150).
Legen Sie da ob und wenn ja warum, wenn nein warum nicht, das Einführen einer Superskalaren-Architektur (Zwei ALUs) sinnvoll ist. Nehmen Sie dabei an, dass Rechenoperationen (addi, multi, etc.) jeweils 2 Zyklen für jede Berechnung brauchen. Die Restlichen Stufen (außer das Speichern) der Pipeline jeweils nur einen.
5. Würde der Simulator auch Floatingpointoperationen unterstützen (was er nicht tut) und man würde zwei der Integer werte mit Floationpoint Zahlen ersetzten, würde die Reihenfolger der Operationen bei einer superskalaren Architektur (mit zwei Integer ALUs und einer FloatingpointALU) einen Unterschied machen?
Wenn ja, was wäre die Optimale Reihenfolge der Operationen um das Produkt aller vier Faktoren zu bekommen?