Britta Nestler, Alexander Vondrous, Johannes Hötzer, Marcus Jainta Fakultät IWI, Hochschule Karlsruhe Klausur zu High Performance Computing 7. Februar 2014 Es sind keine Hilfsmittel zugelassen. Bearbeitungszeit: 90 Minuten Aufgabe 1: Parallele Datenverarbeitung (2P) Die immer noch schnelle Entwicklung der Halbleitertechnologie führt dazu, dass die Leistung eines heute handelsüblichen PCs der Rechenleistung des schlechtesten Supercomputers vor 8 bis 10 Jahren entspricht. Der jetzige schlechteste Supercomputer besitzt 22 212 Prozessoren und verfügt über eine Rechenleistung von 117,8 TFlop/s. a) Erläutern Sie in wenigen Worten welche Konsequenz dieser Leistungszuwachs (0,5P) für die Entwicklung von leistungsstarker Software hat, damit auch in 5 bis 10 Jahren von dem Leistungszuwachs profitiert werden kann. b) Auf Supercomputern werden häufig Simulationen durch geführt um Phänome- (1,5P) ne und Zusammenhänge zu untersuchen. Nennen Sie sechs Gründe die für den Einsatz von Simulationen sprechen. Aufgabe 2: Parallele Leistungsmaße Teil 1 von 2 (3P) Gültige Stargate Adressen durch Versuch und Irrtum heraus zu finden ist nahezu unmöglich. Weil die Symbole auf dem Gate und auf dem DHD (Dial Home Device) auf Sternenkonstellationen beruhen ist es einfacher eine Anwendung zu entwickeln, die alle bekannten Sternsysteme nach diesen Symbolen durchsucht. Daniel Jackson hat eine Anwendung implementiert, die gültige Stargate Adressen mit Hilfe eines Hochleistungsrechners sucht. Tests mit einer künstlichen Adresse und dem Hochleistungscluster des Cheyenne Mountain Complexes haben folgende Laufzeiten ergeben. CPUs Laufzeit Speedup Effizienz 1 120 000 - - 4 40 000 15 10 000 220 600 1 500 100 a) Berechnen Sie Speedup und Effizienz der Testläufe. Tragen Sie Ihre Ergebnisse (2P) in die Tabelle ein. b) Welche Konfiguration würden Sie für den Produktiveinsatz vorschlagen, wenn (0,5P) es auf die Laufzeit ankommt? Begründen Sie Ihre Antwort mit wenigen Worten. c) Welche Konfiguration würden Sie für den Produktiveinsatz vorschlagen, wenn (0,5P) es auf effiziente Verarbeitung ankommt? Begründen Sie Ihre Antwort mit wenigen Worten.
Aufgabe 3: Parallele Leistungsmaße Teil 2 von 2 (2P) General Hammond hat die Untersuchungen von Sam und Daniel ausgewertet als das SG-1 Team auf PB2-908 rätselhafte Schriftzeichen übersetzt. Nachdem das Team zurück kehrt müssen Sie erste einmal die Analyse auf Plausibilität prüfen. Betrachten Sie Abbildung 1 und beurteilen Sie die 4 verschiedenen angeblichen Messergebnisse. Abbildung 1: Untersuchung von 4 unterschiedlichen Konfigurationen einer parallelen Anwendung. a) Welche Setups sollten ein zweites mal untersucht werden? Begründen Sie Ihre (1P) Antwort in wenigen Worten. b) Wie kann ein höherer Speedup erzielt werden als ideal möglich wäre und wie (1P) wird diese Form von Speedup genannt? Aufgabe 4: Amdahl und Gustafson (3P) Der Boardcomputer der USS Daedalus wurde mit 33 Prozessoren (P = 33) ausgerüstet. Ihre Aufgabe ist das Laufzeitverhalten der bestehenden Anwendungen zu untersuchen. Ihnen wird als Messergebnis eine Effizienz von 63,6% (E = 7 ) vorgelegt. Sie müssen als leitender Techniker t s und t p nach Amdahl für Ihren Bericht 11 berechnen. a) Berechnen Sie t s und t p nach Amdahl. (1,5P) b) Berechnen Sie welcher Speedup nach Amdahl höchstens erreicht werden kann? (1P) Lassen Sie die Anzahl der Prozessoren gegen unendlich streben. c) Bestimmen Sie t s und t p nach Gustafson. (0,5P)
Aufgabe 5: Pattern (1P) Dr. Samantha Carter hat es mit Hilfe der XKeyscore Technologie geschafft, die ein Yotta Byte große Datenbank der Antiker in Textform in einen neu gebauten Supercomputer aus PC Komponenten der N(A)SA in Utah zu laden. Welcher parallele Algorithmus eignet sich besonders gut um diese große Datenmenge nach Stichwörtern und Zusammenhängen zu durchsuchen? In welche Phasen lässt sich ein Programm einteilen, dass diesen Algorithmus nutzt? Beschreiben Sie kurz was in diesen Phasen passiert. (0,5P) (0,5P) Aufgabe 6: OpenMP Teil 1 von 2 (2P) Auf Atlantis muss bei der jährlichen Reinigung auch die Software geprüft werden. Sie sind über eine Stelle im Lebenserhaltungssystemen gestoßen, welches den geringen Sauerstoffgehalt in manchen Teilen der Stadt und seine schlechte Reaktionszeit erklären könnte. a) Erläutern Sie wieso in Version 1 die Anzahl der Sauerstoffatome fehlerhaft (1P) berechnet wird und schlagen Sie eine schnelle Fehlerkorrektur vor ohne auf die parallele Laufzeit Rücksicht zu nehmen. b) Bei Version 2 wird die Anzahl der Atome fehlerfrei berechnet. Die parallele (1P) Laufzeit ist schlechter als die sequentielle Laufzeit und muss verbessert werden. Erklären Sie wieso die parallele Laufzeit höher ist als die sequentielle? Schlagen Sie eine Verbesserung vor. Version 1 Version 2 int counto2(atom *atoms, int n) { int i; int count = 0; #pragma omp parallel for for (i = 0; i < n; ++i) { if (isoxygen(atoms[i]) == true) { ++count; return count; int counto2(atom *atoms, int n) { int i; int count; int private_count[omp_get_num_threads()]; for (i = 0; i < omp_get_num_threads() ; ++i) { private_count[i] = 0; #pragma omp parallel { #pragma omp for schedule(static) for (i = 0; i < n; ++i) { if (isoxygen(atoms[i]) == true) { ++private_count[omp_get_thread_num()]; #pragma omp atomic count += private_count[omp_get_thread_num()]; return count;
Aufgabe 7: OpenMP Teil 2 von 2 (2P) Bei der jährlichen Reinigungsaktion bemerken Sie eine weitere Stelle in der Anwendung zur Ansteuerung des Ringtransporters. Manchmal funktioniert die Ansteuerung nicht richtig. a) Finden und beschreiben Sie die Fehlerquelle in der Funktion foobar(). Wieso (1P) funktioniert es manchmal und manchmal nicht. b) Welche OpenMP Direktive vereinfacht die Funktion foobar() wesentlich und (1P) korrigiert den Fehler? Implementieren Sie die vereinfachte und Version in Pseudocode. void foobar(data* points, int n) { #pragma omp parallel { int i; int id = omp_get_thread_num(); int threads = omp_get_num_threads(); for (i=id*n/threads; i < (id+1)*n/threads; i++) { bar(points[i]);
Aufgabe 8: MPI (2P) Zur Dekodierung der Stargate Adressen hat Sam angefangen den Master-Worker Algorithmus zu implementieren. Jedoch musste sie dringend nach Altanis reisen und so hat Dr. Rodney McKay versucht das Programm fertig zu schreiben, um Sam zu Beweisen das er die parallele Programmierung beherrscht. Helfen Sie Dr. Rodney McKay die Lievelocks zu entfernen, die korrekte Datenübertragung sicher zu stellen, sowie dafür zu sorgen, dass das Programm terminiert. Achten Sie auf Klammern. Beeilen Sie sich und stellen Sie das Programm fertig bevor Sam zurück ist bzw. die Klausur vorbei ist. #include "mpi.h" #include <stdio.h> int main(int argc, char *argv[]) { int rank, numprocs, left, right; int buffer[10]; MPI_Request request; MPI_Status status; MPI_Init(&argc, &argv); MPI_Comm_size(MPI_COMM_WORLD, &numprocs); MPI_Comm_rank(MPI_COMM_WORLD, &rank); if (rank!= 0) { // Master while (true) { for (int i = 0; i < numprocs; i++) { MPI_Irecv(buffer, 10, MPI_INT, i, 576766, MPI_COMM_WORLD, &request); int flag; MPI_Test(&request, &flag, &status); if (!flag) { decodegateadress(); // Do something useful while waiting for data MPI_Wait(&request, &status); testgateadress(buffer); storegateadress(buffer); else { // Worker decodegateadress(buffer); MPI_Isend(buffer, 5, MPI_INT, 4, 6656665, MPI_COMM_WORLD, &request); MPI_Isend(buffer, 5, MPI_INT, 4, 6656665, MPI_COMM_WORLD, &request); MPI_Finalize(); return 0;
Aufgabe 9: Performance Modellierung (2P) Ein Programm zur Simulation des Wärmetransportes entlang einer Energieleitung soll mit dem Performance Modell nach Van der Velde untersucht werden. Das eindimensionales Array value der Länge N + 2 enthält die Startbedingungen. An dem linken und rechtem Rand werden keine Berechnungen durchgeführt. Die Berechnungen der Zählervariablen im Schleifenkopf werden nicht berücksichtigt. Jede Sendeoperation und jede Empfangsoperation ist jeweils eine Kommunikationsopertation. Zuweisungen werden nicht als einer Berechnungsoperation gewertet. Hinweise: Verwenden Sie die Notation der folgenden Tabelle N Problemgröße (ohne Rand) t a Rechenzeit je Operation T s Sequentielle Laufzeit p Anzahl Prozesse t k Kommunikationszeit T p Parallele Laufzeit Sequentiell for (time = 0; time < 1000; time++) { for (i = 1; i < N1; i++) { // insgesamt N Iterationen: N1 = N+1 value[i] = value[i] + dt * (value[i-1] - 2 * value[i] + value[i+1])/dx; Parallel for (time = 0; time < 1000; time++) { for (i = 1; i < Np1; i++) { // Insgesamt N/p viele Iterationen: Np1 = N/p + 1 value[i] = value[i] + dt * (value[i-1] - 2 * value[i] + value[i+1])/dx; send value[1] to previous receive value[0] from previous send value[np] to next receive value [Np1] from next a) Erstellen Sie das Performance Modell nach Van der Velde für das sequentielle (1P) Programm. b) Erstellen Sie das Performance Modell nach Van der Velde für das parallele (2P) Programm. c) Berechnen Sie den Speedup mit folgendem Parametersatz: (1P) N = 300 t a = 1 p = 50 t k = 3
Aufgabe 10: GPU (3P) Auf Atlantis soll ein neuer Zentralrechner aufgebaut werden. Es entbrennt eine Debatte ob hauptsächlich CPUs oder GPUs verwendet werden sollen. Helfen Sie bei der Diskussion. a) Beschreiben Sie zwei grundlegende Unterschiede bei der Datenverarbeitung (1P) mit GPUs und mit CPUs b) Welche Operationen lassen sich mit GPUs besonders schnell berechnen? (0,5P) c) Welche der folgenden Anwendungen eignen sich besonders gut zur Berechnung (1,5P) auf GPUs und welche eignen sich besser für CPUs? Begründen Sie ggf. Ihre Antwort. 1) Prozess scheduling (Betriebssystem) 2) Rendering/Raytracing (Lineare Algebra) 3) Video encoding (Verarbeitung von Bildern) 4) Graph Algorithmen (z.b. Diskstra - kürzester Weg) 5) Wärmeleitung auf regelmäßigen Gittern 6) Zustandsautomaten CPU GPU
Aufgabe 11: OpenCL (1P) Weil Sam und Daniel gerade keine Torverbindung zur Erde bekommen, versuchen Sie sich die Zeit mit Programmieren zu vertreiben. Der zelluläre Automat Game of Life soll mit OpenCL implementiert werden. Wer als erstes fertig ist gewinnt Ruhm (Pizza) und Ehre (ein Getränk). Sie als dritte Person nehmen die Herausforderung an. Ihnen fehlt noch eine kleiner Teil. Berechnen Sie die Koordinaten für den Zugriff auf die benachbarten Zellen wie in der folgenden Abbildung gezeigt. Das Array cell ist linear indiziert und für jede cell wird ein eigener OpenCl Thread gestartet. Die Wahl der Achsen ist Ihnen überlassen. Hinweis: Sie müssen keine Randbehandlung durch führen. // Game of Life kernel void gameoflife( global int* cell, int numx, int numy) { // get thread id int threadid = get_global_id(0); activecells = 0; int L= int R= int O= int U= int LO= int RO= int LU= int RU= // get neighbor cells values if (cell[l]) activecells++; if (cell[r]) activecells++; if (cell[o]) activecells++; if (cell[u]) activecells++; if (cell[lo]) activecells++; if (cell[ro]) activecells++; if (cell[lu]) activecells++; if (cell[ru]) activecells++; [...]
Aufgabe 12: Kommunikationsnetze Teil 1 von 2 (2,5P) Auf einer noch unbekannten Galaxie befindet sich das Vorgängermodell der heutigen Stargatetechnologie. Die Tore sind direkt verbunden und Sprünge erreichen nicht jedes Gate direkt. Es müssen also mehrere Sprünge durchgeführt werden um ein bestimtes Ziel zu erreichen. Untersuchen Sie das Netz und tragen Sie die Kenngrößen in die Tabelle ein. Abbildung 2: Kleines fest verdrahtetes Stargatenetz einer kleinen Galaxie am Rande des Universums. Durchmesser Grad (max/min) / Bisektionsbandbreite Konnektivität Viel Erfolg! There is no place like