HTW Dresden WS 2014/2015
Organisatorisches Praktikum, 4 SWS Do. 15:00-18:20 Uhr, Z136c, 2 Doppelstunden o.g. Termin ist als Treffpunkt zu verstehen Labore Z 136c / Z 355 sind Montag und Donnerstag 15:00-18:20 reserviert, gemeinsam mit anderen Projektseminaren selbständige Arbeiten können gern auch zu anderen Zeiten erfolgen
Aufgabenstellungen und Leistungsnachweis Aufgabenstellung: Individuelle Aufgabenstellungen für Einzelne oder für Gruppen Eintragung für ein Thema in Einschreibliste zu meiner Information Leistungsnachweis: Vorführung des Programms innerhalb des Projektseminars Kurzvortrag (ca. 20 min) der Gruppe mit Präsentation Schriftliche Praktikumsdokumentation der Gruppe Auf das Praktikum wird eine individuelle Note vergeben.
Genutzte Rechnerinfrastruktur PC, 4-Core CPU, NVidia Quadro 600 Grafikkarte, OpenSuse-LINUX, OpenMP, CUDA (inkl. OpenCL) o.g. PC-System ist im Labor Z136c installiert und ist aus dem HTW-Netz erreichbar Linux-PCs im Rechnerlabor Z136c als virtueller Parallelrechner mit MPI, IP-Sockets, HTTP LINUX, ssh-login, ssh -X Programmierung in C, C++, JavaScript und verwandten Sprachen
Multi- und Manycore Prozessoren Vorhersagen: Ende 2008: 8 cores 2011: 32 cores 2014: >128 cores Bildquelle: Intel roadmap Begriffe: Multicore: 20 Manycore:> 20 cores Andere Quellen: many = hundreds of cores Paralleles Programmieren auch für gewöhnliche Rechner
Multi- und Manycore Prozessoren Struktur: P 0 P 1 P 2 P 3 P (p 1) Cache Cache Cache Cache Cache Communication Network MEM MEM MEM MEM MEM Koordination und Kooperation über gemeinsame Variable Auf MPS kann eine einzelne Instanz eines Betriebssystems ausgeführt werden. D.h. das System kann wie ein einzelner Rechner benutzt werden. Architekturmodell zum Teil für GPUs zutreffend, ohne Betriebssystem, ohne Cache
Nutzung des gemeinsamem Speichers Optionen aus Sicht des Programmierers: Multiprocessing: Mehrere Prozesse (durch fork()) und Kommunikation via Shmem-Segmente. Multithreading: Mehrere Threads innerhalb eines Prozesskontexts, direkte Abstraktion des Systems mit gemeinsamem Speicher. Expliziter Nachrichtenaustausch: mehrere Prozesse mit Kommunikation über Pipes oder Sockets, Kommunikationsbibliotheken MPI, PVM OpenMP: Compiler-Direktiven zur Steuerung mehrfädiger Ausführung (Multithreading) bei gemeinsamen Speicher OpenCL und CUDA: Datenparallele Ausführung s.g. Kernel-Funktionen
MPS mit verteiltem Speicher (1) Struktur: MEM MEM MEM MEM MEM Cache Cache Cache Cache Cache P 0 P 1 P 2 P 3 P (p 1) Communication Network Koordination und Kooperation nur durch Nachrichten-Austausch Adressräume getrennt, d.h. eine gleiche Adresse verweist bei unterschiedlichen Knoten auf unterschiedliche Speicherinhalte Keine Speicher- und Cache-Konsistenz Problematik
MPS mit verteiltem Speicher Jeder Knoten führt eine eigene Instanz des Betriebssystems aus, ggf. reduziert auf Mikrokern Abstraktion durch verschiedene UNIX-Prozesse (im Gegensatz zu Threads bei gemeinsamem Speicher) Zum Nachrichtenaustausch stehen auf Betriebssystem-Ebene Socket-Verbindungen zur Verfügung (TCP/IP) Oft besteht Möglichkeit, spezielle Netze (Infiniband, Myrinet) direkt zu nutzen: Infiniband-Verbs, Myrinet-GM Bibliotheken zur Erzeugung und Verwaltung verteilter Prozesse und zur Kommunikation Parallel Virtual Machine (PVM) Message Passing Interface (MPI, Standard)
Programmierung bei verteiltem Speicher Expliziter Nachrichtenaustausch (Message Passing): Gewöhnliche sequentelle Programmiersprachen (Fortran, C, C++, Java) und Funktionserweiterungen zur Prozesserzeugung und Nachrichtenaustausch Programmierbibliotheken: PVM, MPI, MPI-2 gewöhnliche IP-Sockets, oder Austausch über HTTP Message Passing ist auch auf Systemen mit gemeinsamem Speicher möglich
Literaturempfehlungen Allgemein zu Parallelrechnern und deren Programmierung T. Ungerer: Parallelrechner und parallele Programmierung Spektrum Akademischer Verlag, Heidelberg, Berlin, 1997 ISBN 3-8274-0231-X T. Rauber, G. Rünger: Parallele und verteilte Programmierung Springer Verlag, 2000 (Springer Lehrbuch) ISBN: 3-540-66009-7
Aufgaben Thema 1: Atomic Multicast in einer Multi-C/S-Umgebung mehrere Server die Nachrichten von Clients empfangen (RecvFromAny) mehrere Clients ein Client sendet eine Nachricht immer per Multicast an eine Teilmenge der Server
Aufgaben Thema 1: Atomic Multicast in einer... (Fortsetzung) Gefordert: Nachrichtenvermittlung an alle adressierten Server, oder an keinen (vgl. Transaktion, Atomicy) Reihenfolge der Nachrichten von unterschiedlichen Clients muss für jeden Server gleich sein (vgl. Transaktion, Consistency) o.g. Eigenschaften auch beim Ausfall von Clients und Servern ein Prokoll dafür existiert Ziele: Zusicherung o.g. Eigenschaften, hoher Durchsatz, Skalierbarkeit Programmiermodell: Verteilter Speicher mit Nachrichtenaustausch, d.h. mehrere PC s+netzwerk Programmiersprache in: JavaScript (NodeJS), oder C/C++
Aufgaben Thema 2: Parallel Data Deduplication Gegeben: Große Datei mit häufigen Block-Doppelungen Teilaufgaben: Finden gleichartiger Blöcke (z.b. über Vergleich der Hash-Werte) Reduktion mittels Referenzen Reproduktion der Originaldaten Ziele: höhere Geschwindigkeit, größere Datenmenge Programmierung in C/C++, Gemeinsamer Speicher (Threads, OpenMP oder CUDA) Variante für verteilten Speicher möglich (z.b. mit MPI)
Wie gehts weiter? Einschreibung für ein Thema: Thema 1 - Atomic Multicast in einer Multi-C/S-Umgebung Thema 2 - Parallel Data Deduplication Thema 3 - Variation von Thema 1 oder Thema 2 Treffen nächste Woche zum geplanten Termin Login-Zuteilung, Einweisung in Rechner Kick-Off Besprechungen mit einzelnen Gruppen Materialausgabe