Commit abd1ebab authored by Christoph Gerum's avatar Christoph Gerum

Enable minor cpu in MCConfig

parent ac492513
......@@ -5,15 +5,13 @@ import sys
import shlex
from m5.util import addToPath
addToPath('/home/vagrant/parallel_computer_architecture/gem5/configs/common')
# import Options
parser = argparse.ArgumentParser(description='Simulate')
parser = argparse.ArgumentParser(description='Simulation options')
parser.add_argument('-c', help='binary to execute')
parser.add_argument('-o', help='The options to pass to the binary, use " " around the entire string')
parser.add_argument('-w', help='width of pipeline')
parser.add_argument('-n', help='Number of CPUs')
parser.add_argument('--cpu-type', help='CPU Type (one of: o3, timing)')
parser.add_argument('--cpu-type', help='CPU Type (one of: o3, timing, minor)')
args = parser.parse_args()
......@@ -44,10 +42,12 @@ num_cpus = int(args.n) if args.n else 2
if args.cpu_type and args.cpu_type == "timing":
system.cpu = [TimingSimpleCPU(cpu_id=idx) for idx in xrange(num_cpus)]
if args.cpu_type and args.cpu_type == "minor":
system.cpu = [MinorCPU(cpu_id=idx) for idx in xrange(num_cpus)]
else:
system.cpu = [DerivO3CPU(cpu_id=idx) for idx in xrange(num_cpus)]
if args.cpu_type != "timing":
if (not args.cpu_type) or args.cpu_type == "o3":
for CPU in system.cpu:
# width of pipeline configuration
width = 8 if args.w is None else args.w
......
Title: Blatt 6
status: hidden
# Heterogene Systeme (**DRAFT**)
# Cache Kohärenz und Speicherkonsistenz
## Aufgabe 1 - False Sharing
Ein Problem das bei der Erstellung von parallelen Programmen für Rechnerarchitekturen mit
Cachekohärenz häufig übersehen wird ist das sogenannte *false sharing*.
Dieses tritt auf wenn die Prozessoren eines Multiprozessorsystems auf Daten zugreifen,
die im Speicher sehr nahe beieinander liegen.
Demonstrieren Sie anhand von selbst entwickelten Programmen die Auswirkungen von false sharing.
Erstellen Sie dazu eine sequentielle Implementierung eines Programms sowie eine parallele Implementierung
mit false sharing und eine ohne false sharing und geben Sie die jeweiligen Ausführungszeiten auf einem mit gem5
simulierten multicoresystem an.
## Aufgaben
1. Beschreiben Sie in eigenen Worten wie false sharing auftreten kann und warum dies ein Problem für die Performance von Rechnerarchitekturen darstellt.
## Abgabe
Geben Sie den Quelltext der erstellten Programme, die Antwort auf die Frage und die erstellten Messungen ab.
## Aufgabe 2 - Speicherkonsistenzmodelle
Betrachten Sie das im folgenden angegebene Programm.
```c
#include <stdio.h>
#include <omp.h>
volatile int x, y, tmp1, tmp2;
int main (void)
{
while (1) {
x = y = tmp1 = tmp2 = 0;
#pragma omp parallel
{
int tid = omp_get_thread_num();
if(tid == 0){
x = 1;
tmp1 = y;
}
if(tid == 1){
y = 1;
tmp2 = x;
}
}
printf ("%d %d\n", tmp1, tmp2);
if (tmp1==0 && tmp2==0) break;
}
return 0;
}
```
## Fragen
1. Welche Werte können die Variablen tmp1, tmp2 bei der Überprüfung der Schleifenbedingung annehmen, wenn das Programm auf einem sequentiell konsistenten System ausgeführt wird? Wird die Schleife auf einem sequentiell konsistenten System jemals verlassen? Falls Konsistenzmodelle in der Vorlesung noch nicht behandelt wurden überlegen Sie stattdessen was ihre persönlich Erwartung als Programmierer wäre.
2. Übersetzen Sie das Programm für ein gem5 system und testen Sie ob das System ihren Erwartungen entspricht.
## Abgabe
Geben Sie die Ausgabe des Programms und die Antworten auf die Fragen ab.
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