diff --git a/aufgaben/blatt05/blatt05.md b/aufgaben/blatt05/blatt05.md index 8b94f8e56e38646bb7be4782505e0c03d1b69530..a5f76745f73e43f04e0bd69c99f9cc84fa3c1362 100644 --- a/aufgaben/blatt05/blatt05.md +++ b/aufgaben/blatt05/blatt05.md @@ -1,5 +1,53 @@ -Title: Blatt 5 +Title: Blatt 4 status: hidden -# Multicore Architekturen / Cache Coherency (**DRAFT**) +# Parallelrechnerarchitekturen 2 + +Führen Sie vor dem Bearbeiten des Blattes wieder ein *git pull* durch. + +## Aufgabe 2: Superlinearer Speedup (*Abgabe war verschoben von Blatt 04*) + +Auf der englischen Wikipedia unter wird folgende Aussage zum Thema +[superlinearer Speedup](https://en.wikipedia.org/wiki/Speedup#Super-linear_speedup) bei +Parallelrechnerarchitekturen gemacht: + +> Sometimes a speedup of more than $A$ when using $A$ processors is observed +> in parallel computing, which is called ''super-linear speedup''. Super-linear +> speedup rarely happens and often confuses beginners, who believe the t +> heoretical maximum speedup should be $A$ when $A$ processors are used. + +Da Sie ja nicht zu den genannten "`Anfängern"' gehören stiftet bei Ihnen +das Auftreten von superlinearem Speedup keine Verwirrung, so dass +Ihnen die folgenden Aufgaben auch keine Probleme bereiten dürften. + +Schreiben Sie ein Benchmark-Programm, das ein von Ihnen definiertes +Problem löst und das bei paralleler Bearbeitung auf einer gem5 Konfiguration mit mehreren Kernen einen superlinearen Speedup zeigt. + +### Fragen + +- Beschreiben Sie mindestens eine Ursache für das Zustandekommen von + superlinearem Speedup bei der Verwendung eines Parallelrechners zur Lösung + eines Problems. + +- Erstellen sie wie in Aufgabe 1 ein Schaubild das den Verlauf des Speedups bei + einer schrittweisen Erhöhung der Anzahl der Rechenkerne zeigt. Wo tritt superlinearer Speedup auf? + +### Tips + +- Wenn Sie versuchen einen superlinearen Speedup durch Cacheeffekte zu erzielen + kann es hilfreich sein den Speicher sehr langsam zu machen. Dazu können + Sie den DDR-RAM in der Beispielkonfiguration durch ein SimpleMemory ersetzen + und die Parameter latency und bandwidth setzen. + + + +### Abgabe + +1. der Quellcode des Programms und die verwendete gem5 konfiguration +2. die Antworten auf die Fragen + + + + + diff --git a/aufgaben/blatt05/neon_convert.c b/aufgaben/blatt05/neon_convert.c new file mode 100644 index 0000000000000000000000000000000000000000..da35a8bfd1c94e2f96623f8efc5777a522337478 --- /dev/null +++ b/aufgaben/blatt05/neon_convert.c @@ -0,0 +1,54 @@ +#include + +#define SIZE 512 + +void reference_convert (uint8_t * __restrict dest, uint8_t * __restrict src, int n){ + int i; + for (i=0; i>8); + } +} + +void neon_convert (uint8_t * __restrict dest, uint8_t * __restrict src, int n){ + int i; + uint8x8_t rfac = vdup_n_u8 (77); + uint8x8_t gfac = vdup_n_u8 (151); + uint8x8_t bfac = vdup_n_u8 (28); + n/= 8; + + for (i=0; i