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())
......@@ -9,8 +9,8 @@
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="531.49603"
height="531.49603"
width="425.19684"
height="496.06299"
id="svg2"
version="1.1"
inkscape:version="0.47 r22583"
......@@ -52,6 +52,41 @@
inkscape:vp_y="0 : 1000 : 0"
inkscape:vp_x="0 : 0.5 : 1"
sodipodi:type="inkscape:persp3d" />
<inkscape:perspective
id="perspective2901"
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
inkscape:vp_z="1 : 0.5 : 1"
inkscape:vp_y="0 : 1000 : 0"
inkscape:vp_x="0 : 0.5 : 1"
sodipodi:type="inkscape:persp3d" />
<inkscape:perspective
id="perspective2930"
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
inkscape:vp_z="1 : 0.5 : 1"
inkscape:vp_y="0 : 1000 : 0"
inkscape:vp_x="0 : 0.5 : 1"
sodipodi:type="inkscape:persp3d" />
<inkscape:perspective
id="perspective2959"
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
inkscape:vp_z="1 : 0.5 : 1"
inkscape:vp_y="0 : 1000 : 0"
inkscape:vp_x="0 : 0.5 : 1"
sodipodi:type="inkscape:persp3d" />
<inkscape:perspective
id="perspective2988"
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
inkscape:vp_z="1 : 0.5 : 1"
inkscape:vp_y="0 : 1000 : 0"
inkscape:vp_x="0 : 0.5 : 1"
sodipodi:type="inkscape:persp3d" />
<inkscape:perspective
id="perspective3142"
inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
inkscape:vp_z="1 : 0.5 : 1"
inkscape:vp_y="0 : 1000 : 0"
inkscape:vp_x="0 : 0.5 : 1"
sodipodi:type="inkscape:persp3d" />
</defs>
<sodipodi:namedview
id="base"
......@@ -62,9 +97,9 @@
inkscape:pageshadow="2"
inkscape:zoom="1.4"
inkscape:cx="156.61426"
inkscape:cy="233.8097"
inkscape:cy="81.225769"
inkscape:document-units="px"
inkscape:current-layer="g2939"
inkscape:current-layer="g3085"
showgrid="false"
units="mm"
inkscape:showpageshadow="false"
......@@ -96,7 +131,7 @@
inkscape:label="Ebene 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(0,-520.86614)">
transform="translate(0,-556.29924)">
<flowRoot
xml:space="preserve"
id="flowRoot3772"
......@@ -107,204 +142,288 @@
height="47.982246"
x="23.738585"
y="299.78244" /></flowRegion><flowPara
id="flowPara3778" /></flowRoot> <g
id="g2939">
id="flowPara3778" /></flowRoot> <text
xml:space="preserve"
style="font-size:20px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
x="83.571426"
y="92.924606"
id="text2965"
transform="translate(0,520.86614)"><tspan
sodipodi:role="line"
id="tspan2967"
x="83.571426"
y="92.924606" /></text>
<g
id="g2859"
transform="translate(9.2857143,37.857143)" />
<g
id="g3085">
<g
transform="translate(-12.142857,-179.28571)"
id="g3693">
id="g3693"
transform="matrix(1.1199292,0,0,1,-5.6441267,-141.42857)">
<rect
style="fill:none;stroke:#000000;stroke-width:1.26180053px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
id="rect2816"
width="314.4007"
height="77.01487"
y="710.5564"
x="23.869484"
y="710.5564" />
height="77.01487"
width="314.4007"
id="rect2816"
style="fill:none;stroke:#000000;stroke-width:1.26180053px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
<text
xml:space="preserve"
id="text3590"
y="760.85193"
x="31.895706"
style="font-size:40px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
x="87.256363"
y="762.85193"
id="text3590"><tspan
sodipodi:role="line"
xml:space="preserve"><tspan
style="font-size:34.01787949px"
y="760.85193"
x="31.895706"
id="tspan3592"
x="87.256363"
y="762.85193">ARM-CPU</tspan></text>
sodipodi:role="line">TimingSimpleCPU</tspan></text>
</g>
<rect
y="653.62274"
x="11.826296"
height="98.242393"
width="151.8562"
style="fill:none;stroke:#000000;stroke-width:1.17176269999999993;stroke-opacity:1"
id="rect3598-5-2"
style="fill:none;stroke:#000000;stroke-width:1.1717627;stroke-opacity:1" />
width="151.8562"
height="98.242393"
x="11.826296"
y="653.62274"
transform="translate(9.2857143,37.85714)" />
<text
id="text3644"
y="691.04596"
x="19.676949"
xml:space="preserve"
style="font-size:40px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
xml:space="preserve"><tspan
y="691.04596"
x="19.676949"
x="19.676949"
y="691.04596"
id="text3644"
transform="translate(9.2857143,37.85714)"><tspan
sodipodi:role="line"
id="tspan3646"
sodipodi:role="line">L1 Inst</tspan><tspan
id="tspan3648"
y="741.04596"
x="19.676949"
sodipodi:role="line">Cache</tspan></text>
y="691.04596">L1I-</tspan><tspan
sodipodi:role="line"
x="19.676949"
y="741.04596"
id="tspan3648">Cache</tspan></text>
<rect
y="653.6955"
x="174.84319"
height="99.24659"
width="151.85025"
style="fill:none;stroke:#000000;stroke-width:1.17771303999999999;stroke-opacity:1"
id="rect3598-5-2-5"
style="fill:none;stroke:#000000;stroke-width:1.17771304;stroke-opacity:1" />
<text
id="text3644-3"
y="691.62079"
x="180.69086"
style="font-size:40px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
xml:space="preserve"><tspan
style="font-size:36px"
y="691.62079"
x="180.69086"
id="tspan3646-3"
sodipodi:role="line">L1 Data</tspan><tspan
style="font-size:36px"
id="tspan3648-3"
y="736.62079"
x="180.69086"
sodipodi:role="line">Cache</tspan></text>
width="151.85025"
height="99.24659"
x="174.84319"
y="653.6955"
transform="translate(9.2857143,37.85714)" />
<path
id="path3700"
style="opacity:0.11000001000000000;fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 80.286101,607.40635 0,19.69797"
style="opacity:0.11000001;fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
id="path3700"
transform="translate(9.2857143,37.85714)" />
<path
id="path3702"
style="fill:none;stroke:#000000;stroke-width:1.18904614000000008px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 79.370471,608.00594 0.316031,44.50894"
style="fill:none;stroke:#000000;stroke-width:1.18904614px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
id="path3702"
transform="translate(9.2857143,37.85714)" />
<path
id="path3704"
style="fill:none;stroke:#000000;stroke-width:1.19531012000000003px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 246.55385,608.51416 0.30976,44.71187"
style="fill:none;stroke:#000000;stroke-width:1.19531012px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
id="path3704"
transform="translate(9.2857143,37.85714)" />
<rect
y="797.25159"
x="11.595728"
height="58.588848"
width="317.1879"
style="fill:none;stroke:#000000;stroke-width:1.04787219000000009;stroke-opacity:1"
id="rect3731"
style="fill:none;stroke:#000000;stroke-opacity:1" />
width="348.5686"
height="58.540977"
x="11.619664"
y="797.27551"
transform="translate(9.2857143,37.85714)" />
<text
inkscape:transform-center-y="-23.233509"
inkscape:transform-center-x="-44.951788"
id="text3741"
y="840.68811"
x="80.286102"
xml:space="preserve"
style="font-size:40px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
xml:space="preserve"><tspan
y="840.68811"
x="80.286102"
x="54.286102"
y="838.68811"
id="text3741"
inkscape:transform-center-x="-44.951788"
inkscape:transform-center-y="-23.233509"
transform="translate(9.2857143,37.85714)"><tspan
sodipodi:role="line"
id="tspan3743"
sodipodi:role="line">Membus</tspan></text>
x="54.286102"
y="838.68811">SystemXBar</tspan></text>
<path
id="path3745"
style="fill:none;stroke:#000000;stroke-width:1.71061933000000010px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 78.811482,753.21178 0,42.86093"
style="fill:none;stroke:#000000;stroke-width:1.71061933px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
id="path3745"
transform="translate(9.2857143,37.85714)" />
<path
id="path3747"
style="fill:none;stroke:#000000;stroke-width:1.25056755999999991px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 246.62209,753.66329 0.2545,43.89156"
style="fill:none;stroke:#000000;stroke-width:1.25056756px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
id="path3747"
transform="translate(9.2857143,37.85714)" />
<rect
y="899.45715"
x="10.0805"
height="53.538086"
width="320.21835"
style="fill:none;stroke:#000000;stroke-width:1.04633820000000011;stroke-opacity:1"
id="rect3780"
style="fill:none;stroke:#000000;stroke-opacity:1" />
width="350.88629"
height="53.491745"
x="10.103668"
y="899.48029"
transform="translate(9.2857143,37.85714)" />
<text
id="text3782"
y="937.70087"
x="77.925713"
xml:space="preserve"
style="font-size:40px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
xml:space="preserve"><tspan
y="937.70087"
x="77.925713"
x="11.925713"
y="937.70087"
id="text3782"
transform="translate(9.2857143,37.85714)"><tspan
sodipodi:role="line"
id="tspan3784"
sodipodi:role="line">Speicher</tspan></text>
x="11.925713"
y="937.70087"> DDR4_2400_x64</tspan></text>
<path
id="path3811"
style="fill:none;stroke:#000000;stroke-width:1.98492311999999993px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 171.19983,853.68773 0,45.7691"
style="fill:none;stroke:#000000;stroke-width:1.98492312px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
</g>
<text
xml:space="preserve"
style="font-size:20px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
x="83.571426"
y="92.924606"
id="text2965"
transform="translate(0,520.86614)"><tspan
sodipodi:role="line"
id="tspan2967"
x="83.571426"
y="92.924606" /></text>
<rect
style="fill:none;stroke:#000000;stroke-width:1.01337826;stroke-opacity:1"
id="rect2969"
width="518.55804"
height="516.41522"
x="5.7209749"
y="525.94031" />
<text
xml:space="preserve"
style="font-size:20px;font-style:normal;font-weight:normal;fill:#000000;fill-opacity:1;stroke:none;font-family:Bitstream Vera Sans"
x="9.2857141"
y="1030.9336"
id="text2971"><tspan
sodipodi:role="line"
id="tspan2973"
x="9.2857141"
y="1030.9336">System</tspan></text>
<g
id="g3020"
transform="translate(-5.4285714,-12.142857)">
id="path3811"
transform="translate(9.2857143,37.85714)" />
<rect
style="fill:none;stroke:#000000;stroke-width:0.86383051000000000;stroke-opacity:1"
id="rect2969"
width="402.27902"
height="483.70761"
x="5.6462011"