Parallele Programmierung mit MPI



Ähnliche Dokumente
Kurzübersicht über die wichtigsten MPI-Befehle

Modelle der Parallelverarbeitung

4.4. MPI Message Passing Interface

Überblick. Lineares Suchen

13. Binäre Suchbäume

Algorithmen & Datenstrukturen 1. Klausur

Einführung in die Programmierung

Übung 9 - Lösungsvorschlag

MPI-Programmierung unter Windows mit MPICH2. Installieren von MPICH2, Übersetzen, Ausführen und Debuggen von MPI-Programmen. Christian Terboven

Programmieren in C. Rekursive Funktionen. Prof. Dr. Nikolaus Wulff

Binäre Bäume. 1. Allgemeines. 2. Funktionsweise. 2.1 Eintragen

Zahlensysteme: Oktal- und Hexadezimalsystem

Programmierkurs Java

2. Programmierung in C

Algorithmen und Datenstrukturen

Programmierung in C. Grundlagen. Stefan Kallerhoff

Entscheidungsbäume. Definition Entscheidungsbaum. Frage: Gibt es einen Sortieralgorithmus mit o(n log n) Vergleichen?

Infomelde-Server Einstellungen

Updatehinweise für die Version forma 5.5.5

Tel.: Fax: Ein Text oder Programm in einem Editor schreiben und zu ClassPad übertragen.

Objektorientierte Programmierung

Dokumentation. Black- und Whitelists. Absenderadressen auf eine Blacklist oder eine Whitelist setzen. Zugriff per Webbrowser

Grundlagen von Python

SJ OFFICE - Update 3.0

Kontrollstrukturen und Funktionen in C

Algorithmen und Datenstrukturen Suchbaum

EDV-Fortbildung Kombi-Schulung Word-Excel Modul Excel. Informationen zum Programm. Die Programmoberfläche von Excel

Übersicht Die Übersicht zeigt die Zusammenfassung der wichtigsten Daten.

1 Was ist das Mediencenter?

Abschnitt: Algorithmendesign und Laufzeitanalyse

Web Services stellen eine Integrationsarchitektur dar, die die Kommunikation zwischen verschiedenen Anwendungen

Übungsaufgaben. - Vorgehensweise entsprechend dem Algorithmus der schriftlichen Multiplikation

Anleitung zur Nutzung des SharePort Utility

Java Einführung Operatoren Kapitel 2 und 3

Archiv - Berechtigungen

Gesicherte Prozeduren

Übungen Programmieren 1 Felix Rohrer. Übungen

Einführung in PHP. (mit Aufgaben)

Powermanager Server- Client- Installation

4. Network Interfaces Welches verwenden? 5. Anwendung : Laden einer einfachen Internetseite 6. Kapselung von Paketen

Sortieren durch Einfügen. Prof. Dr. W. Kowalk Sortieren durch Einfügen 1

Prozeß P1 Prozeß P2. Zur Synchronisation stehen den beiden Prozessen binäre Semaphore und die beiden Funktionen

Oracle APEX Installer

Softwaretechnologie -Wintersemester 2013/ Dr. Günter Kniesel

Übung Grundlagen der Programmierung. Übung 03: Schleifen. Testplan Testergebnisse

Tutorials für ACDSee 12: Hochladen von Fotos auf Ihren Account bei ACDSeeOnline.com

Herzlich willkommen auf unserer Internet-Seite über Ganztags-Schulen. Hier finden Sie folgende Informationen in Leichter Sprache:

Einfache Arrays. Annabelle Klarl. Einführung in die Informatik Programmierung und Softwareentwicklung

Anleitung für die Synchronisation aus einem iphone-backup

Würfelt man dabei je genau 10 - mal eine 1, 2, 3, 4, 5 und 6, so beträgt die Anzahl. der verschiedenen Reihenfolgen, in denen man dies tun kann, 60!.

Bedienungsanleitung BITel WebMail

Reihungen. Martin Wirsing. in Zusammenarbeit mit Matthias Hölzl und Nora Koch 11/03

Entwurf von Algorithmen - Kontrollstrukturen

Step by Step Remotedesktopfreigabe unter Windows Server von Christian Bartl

Nuetzlicher Kleinkram

Simplex-Umformung für Dummies

ALP I. Funktionale Programmierung

Um über FTP Dateien auf Ihren Public Space Server - Zugang laden zu können benötigen Sie folgende Angaben:

Lösungsvorschläge. zu den Aufgaben im Kapitel 4

Man liest sich: POP3/IMAP

Erklärung zum Internet-Bestellschein

Datenexport aus JS - Software

Übersicht. Datenstrukturen und Algorithmen Vorlesung 5: Rekursionsgleichungen (K4) Übersicht. Binäre Suche. Joost-Pieter Katoen. 20.

Einführung in Java. PING e.v. Weiterbildung Andreas Rossbacher 24. März 2005

Network Controller TCP/IP

Anleitung Office 365 / ausführliche Version. Bestellungs- und Installationsanleitung für Office 365

Datenstrukturen & Algorithmen

Einführung in die C++ Programmierung für Ingenieure

Der große VideoClip- Wettbewerb von Media Markt.

Wir gehen aus von euklidischen Anschauungsraum bzw. von der euklidischen Zeichenebene. Parallele Geraden schneiden einander nicht.

in vielen technischen und wissenschaftlichen Anwendungen erforderlich: hohe Präzision große Dynamik möglich durch Verwendung von Gleitkommazahlen

Grundlagen der Programmierung Prof. H. Mössenböck. 3. Verzweigungen

Web2Lead. Konfiguration

Die Beitrags-Ordnung vom Verein

12. Dokumente Speichern und Drucken

Logistik macht Schule

KidTime Order. Seite 1

ACDSee Pro 3-Tutorials: Fotos (+ Datenbank) auf einen anderen Computer bringen

C++ Grundlagen. ++ bedeutet Erweiterung zum Ansi C Standard. Hier wird eine Funktion eingeleitet

5 Speicherverwaltung. bs-5.1 1

Konfigurationsbeispiel ZyWALL USG

II. Grundlagen der Programmierung. 9. Datenstrukturen. Daten zusammenfassen. In Java (Forts.): In Java:

Professionelle Seminare im Bereich MS-Office

Grundlagen der Informatik (BSc) Übung Nr. 5

Kurze Einführung in die Programmiersprache C++ und in Root

Ein kleiner Einblick in die Welt der Supercomputer. Christian Krohn

Einführung in die Kodierungstheorie

Zahlen und das Hüten von Geheimnissen (G. Wiese, 23. April 2009)

8. Bintec Router Redundancy Protocol (BRRP) 8.1 Einleitung

Statuten in leichter Sprache

Transkript:

Parallele Programmierung mit MPI Marc-Oliver Straub entstanden aus: Parallele Programmierung mit MPI - ein Praktikum

Warum Parallelprogrammierung große numerische Probleme (Simulation) optische Bildverarbeitung (Post) große WWW-Server Datenbanken

Was ist ein paralleles Programm mehrere kooperierende Prozesse 1 Prozess pro Prozessor Kommunikation zwischen den Prozessen über Shared Memory oder Nachrichten

Was ist MPI Bibliothek zur Parallelprogrammierung für nachrichtengekoppelte Rechner besteht aus plattformspezifischer User- Library mit plattformübergreifendem Interface vom Hersteller optimierte Bibliotheken für Cray, IBM SP,...

Distributionen MPICH http://www-unix.mcs.anl.gov/mpi/mpich/ LAM-MPI http://www.lam-mpi.org/ Dokumentation http://www.mpi-forum.org/

Grundlagen Struktur eines MPI-Programmes: Initialisierung: MPI_Init() Berechnung, Kommunikation Cleanup: MPI_Finalize()

Ping Pong #include <mpi.h> MPI_Init(); MPI_Comm_size(&procs); MPI_Comm_rank(&myid); if (myid == 0) MPI_Send(buf, length, MPI_INT, 1, PING); MPI_Recv(buf, length, MPI_INT, 1, PONG, &status); else if (myid == 1) MPI_Recv(buf, length, MPI_INT, 0, PING, &status); MPI_Send(buf, length, MPI_INT, 0, PONG); endif MPI_Finalize();

P2P-Kommunikation Synchron: MPI_Ssend, MPI_Srecv Nichtblockierend: MPI_Isend, MPI_Irecv, MPI_Wait[any], MPI_Test[any] Gepuffert: MPI_Send, MPI_Recv

Kollektive Operationen Synchronisation: MPI_Barrier Datenverteilung: MPI_Broadcast, MPI_Scatter Ergebnissammlung: MPI_Gather, MPI_Reduce

Beispiele Simulation von Zellularautomaten Matrixmultiplikation Sortieren Master-Worker-Schema

Simulation von ZA Major.- regel n 0 1 2 3 4 5 6 7 8 9 f(n) 0 0 0 0 1 0 1 1 1 1

1D-Problemzerlegung P 0 P 1 P 2

1D-Algorithmus MPI_Comm_size(&procs); MPI_Comm_rank(&myid); int prev = (myid-1) % procs; int next = (myid+1) % procs; while(...) MPI_Isend(bufline0+1, rowlen, MPI_INT, prev, U_ROW); MPI_Irecv(buflinen+1, rowlen, MPI_INT, next, U_ROW); MPI_Isend(buflinen, rowlen, MPI_INT, next, L_ROW); MPI_Recv(bufline0, rowlen, MPI_INT, prev, L_ROW); compute(); endwhile;

Verdeckung von Kommunikation MPI_Comm_size(&procs); MPI_Comm_rank(&myid); int prev = (myid-1) % procs; int next = (myid+1) % procs; while(...) compute_first_and_last_line(); MPI_Isend(bufline0+1, rowlen, MPI_INT, prev, U_ROW); MPI_Isend(buflinen, rowlen, MPI_INT, next, L_ROW); MPI_Irecv(newlinen+1, rowlen, MPI_INT, next, U_ROW, &r1); MPI_Irecv(newline0, rowlen, MPI_INT, prev, L_ROW, &r2); compute_remaining_lines(); MPI_Waitall(2, r1, r2); switch_buffers(); endwhile;

Weitere Optimierungen Kommunikation ist langsamer als Berechnung -> Kommunikationsaufwand verringern: nicht nur eine Zeile übertragen, sondern k -> Kommunikation nur alle k Schritte 2D-Quadratzerlegung -> jeder Prozessor erhält sqrt(n) Elemente

Master-Worker Schema Master - Aufgabenverteilung Worker - Rechenknechte

Master-Worker Worker Worker Worker Worker Master Worker Worker Worker Worker

Worker-Code req_buf = WORK_REQUEST; while(...) MPI_Sendrecv(req_buf, req_len, MPI_INT, 0, recv_buf, recv_len, MPI_INT, 0); if (recv_buf == GOT_WORK) process_work(recv_buf, &result_buf); MPI_Send(result_buf, result_len, MPI_INT, 0); else break; fi; od;

Master-Code while(some_work_left()) MPI_Recv(req_buf, req_len, MPI_INT, MPI_ANY_SOURCE, &sender); if (req_buf == REQUEST_WORK) find_some_work(&work_buf); MPI_Send(work_buf, len, MPI_INT, sender, WORK_TAG); else if (req_buf == RESULT) extract_result(req_buf); fi; od;

Sortieren N Elemente liegen unsortiert auf den PEs jedes PE hat n=n/p viele Elemente Nach dem Sortieren soll jedes PE n Elemente in sortierter Reihenfolge besitzen

ingangsdaten 19 7 12 1 11 13 25 4 2 19 7 12 1 9 13 25 4 2 19 7 12 1 9 13 25 4 2 Samples 7 13 25 7 13 25 7 13 25 sortierte Samples 6 7 10 13 17 18 20 21 25 Pivotelemente - 10 18 I 0 I 1 I 2 I 0 I 1 I 2 I 0 I 1 I 2 Klassifi- 1 11 25 6 17 30 3 14 20 zierung 4 12 19 10 13 27 5 18 21 2 13 11 22 8 16 7 16 15

Algorithmus select_random_samples(); MPI_Gather(sample_buf, sample_count, &recv_buf, 0); if (myid == 0) sort_locally(recv_buf, &sorted_buf); select_pivot_elements(sorted_buf, pivot_count, &pivot_buf); fi; MPI_Broadcast(pivot_buf, pivot_count, 0); sort_according_to_pivots(buf, &pivot_buf, &boundary_indices); broadcast_item_counts(boundary_indices, &recv_counts); MPI_Allgatherv(buf, boundary_indices, &recv_buf, recv_counts, recv_displacements);

Matrixmultiplikation Parallele Multiplikation von Matrizen: A * B = C Anfangspermutation der Teilmatrizen, danach einfaches Verschieben

Anfangspermutation b 00 b 11 b 22 a 00 a 01 a 02 b 10 b 21 b 02 a 11 a 10 a 10 b 20 b 01 b 12 a 22 a 20 a 21

Algorithmus permute_matrices(&a, &B); compute_neighbours(&top, &left, &bot, &right); while(...) MPI_Isend(A, n, MPI_DOUBLE, left, A_MATRIX); MPI_Isend(B, n, MPI_DOUBLE, top, B_MATRIX); MPI_Irecv(newA, n, MPI_DOUBLE, right, A_MATRIX, &r1); MPI_Irecv(newB, n, MPI_DOUBLE, bot, B_MATRIX, &r2); mat_mult(a, B, C); MPI_Waitall(2, r1, r2); A = newa; B = newb; od; MPI_Gather(C, n, MPI_DOUBLE, gesamtc, n, 0);

Zusätzliche Funktionen MPI_Barrier: erst, wenn alle PEs diesen Aufruf getätigt haben, wird das Programm fortgesetzt -> Synchronisation MPI_Reduce: Einsammeln von Werten durch Ausführung einer binären Operation, z.b. Summe, Maximum,...

Weiterführende Konzepte Typkonversion in heterogenen Netzen Benutzerdefinierte Datentypen Kommunikatoren Virtuelle Topologien

Interessante Zahlen gibts unter der Adresse: http://liinwww.ira.uka.de/~skampi/ (Vergleich von IBM-SP, Cray T3E,...)