Commit b5ec667f authored by Christoph Gerum's avatar Christoph Gerum

Moved benchmarks to topfolder

parent 23d5f70d
......@@ -33,13 +33,11 @@ Auschecken des aktuellen Quellcodes des Simulators
hg clone http://repo.gem5.org/gem5-stable gem5
Für die Aufgaben wird der Simulator für den [ARM](http://infocenter.arm.com/help/index.jsp)-Instruktionssatz verwendet.
Dieser wird im Verzeichnis ```gem5``` übersetzt mit:
scons build/ARM/gem5.opt
Zuletzt wird noch ein compiler zur Erzeugung von ausführbaren Dateien für die Zielarchitektur installiert.
sudo apt-get install gcc-arm-linux-gnueabihf
......@@ -83,9 +81,8 @@ Für einfache Simulationenenthält GEM5 schon beispielkonfigurationen wie ```$(G
Bei aufwändigeren Simulationen und eigenen Erweiterungen müssen allerdings eigene Konfigurationen erstellt werden.
Diese Konfigurationsdateien sind einfache [Pythonskripte](http://python.org), die aber auf dem Simulator (in unserem Fall: ```$(GEM5_ROOT)/build/ARM/gem5.opt```),
und nicht dem Standard-Interpreter ausgeführt werden.
und nicht dem standard Pythoninterpreter ausgeführt werden.
![Abbildung der gewünschten Systemkonfiguration](/aufgaben/figures/system1.svg)
``` python
import m5
......@@ -109,33 +106,50 @@ system.clk_domain.clock = '2GHz'
system.clk_domain.voltage_domain = VoltageDomain()
```
Als nächstes wird der Adressraum der Prozessoren in Teilbereiche für die einzelnen Speicher-/Peripheriegeräte unterteilt.
In diesem Fall reicht ein einzelner bereich für den 512 MB großen Hauptspeicher. Außerdem wird der detailgrad der Speichersimulation
angegeben. Hier ist in den meisten fällen ```timing``` die richtige Wahl. Falls die AtomicSimpleCPU verwendet wird,
muss hier allerdings ```atomic``` angegeben werden.
``` python
system.mem_mode = 'timing'
system.mem_ranges = [AddrRange('512MB')]
system.mem_mode = 'timing'
```
Als nächstes wird das CPU-Modell instanziert. Auch wenn in der Simulation keine Interupts verwendet werden muss immer in
Interrupt-Controller erzeugt werden.
``` python
system.cpu = TimingSimpleCPU()
system.cpu.createInterruptController()
```
Als nächstes wird das Verbindungsnetzwerk für die Speicherzugriffe erzeugt.
``` python
system.membus = SystemXBar()
```
Und mit dem Prozessor verbunden.
``` python
system.cpu.icache_port = system.membus.slave
system.cpu.dcache_port = system.membus.slave
```
Dasselbe wird auch für den Speicher gemacht.
``` python
system.mem_ctrl = DDR4_2400_x64()
system.mem_ctrl.range = system.mem_ranges[0]
system.mem_ctrl.port = system.membus.master
system.system_port = system.membus.slave
```
Abschließend wird das auszuführende Programm geladen.
``` python
process = LiveProcess()
process.cmd = ['./hello.elf']
......@@ -143,13 +157,13 @@ system.cpu.workload = process
system.cpu.createThreads()
```
Und die Simulation gestartet.
``` python
root = Root(full_system = False, system = system)
m5.instantiate()
```
``` python
print "Beginning simulation!"
exit_event = m5.simulate()
......@@ -159,26 +173,50 @@ print 'Exiting @ tick %i because %s' % (m5.curTick(), exit_event.getCause())
Die Konfigurationsdatei finden Sie auch unter [aufgaben/blatt01/simple.py](/aufgaben/blatt01/simple.py).
Erweitern Sie die Konfiguration so, dass wie in der folgenden Abbildung L1 Caches verwendet werden.
![Abbildung der gewünschten Systemkonfiguration](/aufgaben/figures/system1.svg)
Die Caches sollen die folgende Konfiguration haben:
| | L1 Instruction Cache | L1 Data Cache |
|------------------|----------------------|---------------|
| Große | 16 KB | 64 KB |
| Assoziativität | 2 | 4 |
| Replacement | LRU | LRU |
| Hit Latency | 2 Cycles | 3 Cycles |
| Response Latency | 2 Cycles | 2 Cycles |
Die Parameter des Caches können der Datei ```src/mem/cache/BaseCache.py``` im gem5 verzeichnis entnommen werden.
``` python
class L1ICache(BaseCache):
size = '16kB'
...
```
### Fragen
1.
### Abgabe:
Eine Datei ```simple.py``` die das programm hello world auf der angegebenen Systemkonfiguration ausführt.
Eine Datei ```simple_cache.py``` die ein Programm ```./hello.elf``` auf der angegebenen Systemkonfiguration mit L1-Cache ausführt.
## Aufgabe 4: CPU-Typen und Ausführungszeiten
gem5 stellt verschiedene Typen von CPU-Modellen bereit, mit denen Simuliert werden kann. In ILIAS finden Sie den Sourcecode für eine einfache Mathe-Benchmark. Kompilieren Sie diese und führen sie auf den verschiedenen Modellen aus.
* m5out auswerten
* ausführungszeit und simulierte cycles rausfinden
Der GEM5
Beschreiben Sie die Unterschiede und begründen Sie diese.
Im Unterverzeichnis ```simple_cache.py```
### Fragen
1.
2.
3.
1. Wie unterscheiden sich die 3 CPU-Typen? Beschreiben Sie die characteristischen Eigenschaften kurz.
2, Überlegen Sie sich für jede der 3 Varianten einen sinnvollen Einsatzzweck beim Entwurf einer Rechenerarchitektur.
### Abgabe:
* Tabelle mit den Ausführungszeiten (sim_seconds, sim_ticks, host_seconds)
* Erklärung der Unterschiede.
Abzugeben sind: Skript zum ausführen der Messungen, Plot der Ergebnisse sowie antworten auf die Fragen.
......@@ -22,6 +22,7 @@ system.cpu.dcache_port = system.membus.slave
system.mem_ctrl = DDR4_2400_x64()
system.mem_ctrl.range = system.mem_ranges[0]
system.mem_ctrl.port = system.membus.master
system.system_port = system.membus.slave
process = LiveProcess()
process.cmd = ['./hello.elf']
......@@ -31,9 +32,7 @@ system.cpu.createThreads()
root = Root(full_system = False, system = system)
m5.instantiate()
print "Beginning simulation!"
exit_event = m5.simulate()
print 'Exiting @ tick %i because %s' % (m5.curTick(), exit_event.getCause())
This diff is collapsed.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment