Matrix Transposition mit gaspi_read_notify. Vanessa End HPCN Workshop 11. Mai 2016

Ähnliche Dokumente
GASPI. HPCN Braunschweig

T-Systems SfR - HPCN Workshop

Computergrundlagen Moderne Rechnerarchitekturen

Computergrundlagen Moderne Rechnerarchitekturen

Einige Grundlagen zu OpenMP

Konzepte der parallelen Programmierung

OpenMP - Geschichte. 1997: OpenMP Version 1.0 für Fortran

Parallele und verteilte Programmierung

Universität Karlsruhe (TH)

Erfahrungen bei der Installation und vergleichende Messungen zu verschiedenen MPI Implementierungen auf einem Dual Xeon Cluster

Master-Thread führt Programm aus, bis durch die Direktive

Homogene Multi-Core-Prozessor-Architekturen

Rainer Oechsle. Parallele und verteilte. Anwendungen in Java. 4., neu bearbeitete Auflage. Mit 165 Listings, 5 Tabellen und 71 HANSER

Beispiel: Schleifenparallelisierung

Verteilte Betriebssysteme

Seminarvortrag: Direktivenbasierte Programmierung von Beschleunigern mit OpenMP 4.5 und OpenACC 2.5 im Vergleich

Hochleistungsrechnen in Darmstadt: Der Lichtenberg- Hochleistungsrechner. Dr. Andreas Wolf. Gruppenleiter Hochleistungsrechnen Hochschulrechenzentrum

Optimierungsstrategien für selbstorganisierende Speicherstrukturen

Hochleistungsrechnen Hybride Parallele Programmierung. Prof. Dr. Thomas Ludwig Universität Hamburg Informatik Wissenschaftliches Rechnen

Shared-Memory Programmiermodelle

OpenMP. Viktor Styrbul

Interaktionsdiagramme in UML

Verteilte Systeme - Java Networking (Sockets) -

Wissenschaftliches Rechnen im SoSe 2015 Dr. J. Kunkel, Hans Ole Hatzel Abgabe:

Übung zur Vorlesung Wissenschaftliches Rechnen Sommersemester 2012 Auffrischung zur Programmierung in C++, 2. Teil

Nutzung paralleler Prozesse bei der Umweltsimulation

High Performance Computing

Systeme I: Betriebssysteme Kapitel 4 Prozesse. Maren Bennewitz

OpenMP - Threading- Spracherweiterung für C/C++ Matthias Klein, Michael Pötz Systemprogrammierung 15. Juni 2009

TensorFlow Open-Source Bibliothek für maschinelles Lernen. Matthias Täschner Seminar Deep Learning WS1718 Abteilung Datenbanken Universität Leipzig

Georg Hager Regionales Rechenzentrum Erlangen (RRZE)

RRZE Benchmark Suite: Eine standardisierte Benchmarkumgebung für Ausschreibungen und Evaluierungen

Hochleistungsrechnen auf dem PC

Evaluation. Einleitung. Implementierung Integration. Zusammenfassung Ausblick

X10 Performance and Productivity at Scale

Multi-threaded Programming with Cilk

Nebenläufige Programmierung in Java: Threads

librtipc - Bibliothek für echtzeitfähige Interprozesskommunikation

Intel Thread Checker

Klausur zu High Performance Computing 09. Juli 2011, SS 2011

Self-aware Memory: Hardware-Prototyp eines Prozessorknotens

2. Der ParaNut-Prozessor "Parallel and more than just another CPU core"

Memory Models Frederik Zipp

Multi- und Many-Core

Parallele und funktionale Programmierung Wintersemester 2016/ Übung Abgabe bis , 16:00 Uhr

Shared-Memory Parallelisierung von C++ Programmen

Foliensatz. Theorie und Einsatz von Verbindungseinrichtungen in parallelen Rechnersystemen

Parallele und verteilte Anwendungen in Java

Parallele Programmierung mit OpenMP

X10. Seminar Multicore Programming Uni Passau SS Alex von Rhein

Systeme I: Betriebssysteme Kapitel 4 Prozesse. Wolfram Burgard

Pthreads. David Klaftenegger. Seminar: Multicore Programmierung Sommersemester

Linux High Availability out of the Box der Thomas Krenn Cluster

Neuer Funkrufmaster: DAPNET Folien: Daniel Sialkowski und Ralf Wilke. 2. Hamnettagung in Aachen,

Literatur. VA SS Teil 5/Messages

Kommunikationsmodelle

Zum Aufwärmen nocheinmal grundlegende Tatsachen zum Rechnen mit reelen Zahlen auf dem Computer. Das Rechnen mit Gleitkommazahlen wird durch den IEEE

Parallel Regions und Work-Sharing Konstrukte

Einsatz von GPFS an der JGU

Versionsverwaltung. Seminar Softwareentwicklung in der Wissenschaft Robert Wiesner

ZKI AK Supercomputing 2017 Frühjahrstreffen , Duisburg-Essen

Praktikum: Paralleles Programmieren für Geowissenschaftler

Praktikum Parallele Programmierung. Travelling Salesman Problem (TSP)

Erfahrungen mit LSF an der RWTH. Eine kurze Geschichte der LoadSharingFacility

Vorlesung Betriebssysteme II

Lebenszyklus von Threads

MYTHOS VIELKERN-BETRIEBSSYSTEME FÜR HPC

Systeme I: Betriebssysteme Kapitel 4 Prozesse. Maren Bennewitz

Brewer s Conjecture and the Feasibility of Consistent, Available, Partition-Tolerant Web Services Sigact News, 33(2), June 2002

Simulation digitaler Schaltungen auf GPUs

Globale Variablen Diverses. Globale Variablen. Globale Variablen

parallele Prozesse auf sequenziellen Prozessoren Ein Process ist ein typisches Programm, mit eigenem Addressraum im Speicher.

Peg-Solitaire. Florian Ehmke. 29. März / 28

Betriebssysteme. Vorlesung im Herbstsemester 2010 Universität Mannheim. Kapitel 6: Speicherbasierte Prozessinteraktion

Inhaltsverzeichnis. Rainer Oechsle. Parallele und verteilte Anwendungen in Java ISBN: Weitere Informationen oder Bestellungen unter

Parallelisierung eines Lagrange schen Partikelausbreitungsmodells

Inhaltsverzeichnis. Carsten Vogt. Nebenläufige Programmierung. Ein Arbeitsbuch mit UNIX/Linux und Java ISBN:

Blockchain-basiertes Föderiertes Identity Management am Beispiel von Ethereum Smart Contracts

Javakurs für Fortgeschrittene

Sprechen Sie Java? Hanspeter Mössenböck. Tm\ dpunkt.verlag. Eine Einführung in das systematische Programmieren

Speicherarchitektur (23) Suchen einer Seite:

Objektorientierte Programmierung

Harmonisierung von Anforderungs- und Änderungsmanagement in der Verkehrstechnik mit den Werkzeugen Telelogic Doors und IBM Rational ClearQuest

Automatische Parallelisierung

Chameleon - Eine Taskbasierte Programmierumgebung zur Entwicklung reaktiver HPC Anwendungen

Visualisierung paralleler bzw. verteilter Programme

Sicherheitsmechanismen für CANbasierte Dienstlokalisierung in Sensornetzen

Raytracing in GA mittels OpenACC. Michael Burger, M.Sc. FG Scientific Computing TU Darmstadt

Ant Colony Optimization (ACO)

Architekturen für ein Collaborative Workspace

MOGON. Markus Tacke HPC ZDV. HPC - AHRP Markus Tacke, ZDV, Universität Mainz

Konzepte von Betriebssystemkomponenten. Gerätetreiber. Mario Körner

Algorithmen für Ad-hoc- und Sensornetze

Big Data. Professional IT Master. Prof. Dr. Ingo Claßen. Überblick. Verarbeitungsmodell. Verarbeitungsablauf. Verteilte Daten. Ressourcenmanagement

MPI Message Passing Interface. Matus Dobrotka Jan Lietz

5.1 Verteilung von Aktualisierungshinweisen

Objektorientiertes Programmieren

Transkript:

Matrix Transposition mit gaspi_read_notify Vanessa End HPCN Workshop 11. Mai 2016

Überblick Motivation Matrix Transposition GASPI Matrix Transposition in GASPI Zusammenfassung und Ausblick 2

Motivation Bottleneck vieler HPC Anwendungen ist die Kommunikation Keine Aussicht auf Besserung bei Exascale Neue Kommunikations- und Programmiermodelle RDMA einseitige Kommunikation PGAS UPC OpenSHMEM GASPI Hybride Programmierung: MPI oder GASPI + OpenMP pthreads 3

Motivation Einseitige, asynchrone Kommunikationsroutinen erfordern ein Umdenken in HPCtypischen Kommunikationsschemata, wie zum Beispiel Halo Exchange Alltoall Matrix Transposition Stencil Kleine Sammlung von Benchmarks auf GitHub: https://github.com/pgas-community-benchmarks 4

Motivation Einseitige, asynchrone Kommunikationsroutinen erfordern ein Umdenken in HPCtypischen Kommunikationsschemata, wie zum Beispiel Halo Exchange Alltoall Matrix Transposition Stencil Kleine Sammlung von Benchmarks und Kommunikationskerneln auf GitHub: https://github.com/pgas-community-benchmarks 5

Matrix Transposition Matrix Transposition ist eine Erweiterung einer allgemeinen Alltoall Funktion 6

Matrix Transposition Matrix Transposition ist eine Erweiterung einer allgemeinen Alltoall Funktion Nach der Kommunikation folgt die lokale Transposition Multithreaded, im Idealfall 7

Matrix Transposition in MPI https://github.com/pgas-community-benchmarks/pipelined-transpose 8

Matrix Transposition in MPI - Probleme - Keine Überlappung von Kommunikation und lokaler Transposition Barrier für die Threads notwendig Lösung: Überlappung durch einseitige Kommunikation (GASPI) 9

GASPI BMBF Projekt bis 06/2015 PGAS Standard www.gaspi.de Skalierbarkeit Asynchrones, einseitiges Kommunikationsmodell Fehlertoleranz Timeouts und variable Knotennutzung Status einzelner Knoten mit dem Statevector überwachbar Flexibilität Interoperabel mit MPI Kein festgelegtes Speichermodell Segmente 10

GASPI Segmente 11

GASPI Einseitige Kommunikation U.a. gaspi_read und gaspi_write Queues Einfache Benachrichtigung des passiven Prozesses U.a. gaspi_notify und gaspi_notify_waitsome Passive Kommunikation Gruppen und kollektive Operationen Global Atomics GPI2 implementiert GASPI www.gpi-site.com 12

Einseitige Kommunikation und Queues gaspi_write und gaspi_read erstellen Kommunikationsaufträge in verschiedenen Queues, die dann vom Netzwerk abgearbeitet werden. gaspi_wait pollt auf eine bestimmte Queue, bis alle einseitigen Kommunikationsaufträge in dieser Queue abgearbeitet sind. 13

GASPI Notifications Notifications zur Benachrichtigung des passiven Prozesses durch gaspi_write und gaspi_notify oder gaspi_write_notify Überprüfung der Notifications mit gaspi_notify_waitsome 14

GASPI Notifications Notifications zur Benachrichtigung des passiven Prozesses durch gaspi_write und gaspi_notify oder gaspi_write_notify Überprüfung der Notifications mit gaspi_notify_waitsome Notification erst dann sichtbar, wenn zuvorgehende writes an gleiches Segment, gleichen Knoten und gleiche Queue geschrieben wurden 15

Matrix Transpose mit gaspi_write_notify https://github.com/pgas-community-benchmarks/pipelined-transpose #pragma omp parallel{ if(tid == 0){ for (rank!= my_rank) gaspi_write_notify(submatrix[rank]) while (!complete){ gaspi_notify_waitsome(&my_submatrix) transpose(&my_submatrix) Kein Barrier mehr Alle Kommunikationsanfragen werden vom Netzwerk behandelt, während gleichzeitig lokal transponiert wird Gezielte Abfrage geschriebener Daten möglich 16

Matrix Transpose mit gaspi_write_notify https://github.com/pgas-community-benchmarks/pipelined-transpose #pragma omp parallel{ if(tid == 0){ for (rank!= my_rank) gaspi_write_notify(submatrix[rank]) while (!complete){ gaspi_notify_waitsome(&my_submatrix) transpose(&my_submatrix) Alle Nachrichten werden gleichzeitig an das Netzwerk abgegeben Statische Aufteilung der Untermatrizen auf die Threads Kein Barrier mehr Alle Kommunikationsanfragen werden vom Netzwerk behandelt, während gleichzeitig lokal transponiert wird Gezielte Abfrage geschriebener Daten möglich 17

Motivation für Matrix Transposition mit reads Nicht alle Daten müssten sofort kommuniziert werden Entlastung des Netzwerks Bessere Überlappung von Kommunikation und lokaler Transposition, bessere Auslastung der Threads möglich ABER: gaspi_read und gaspi_notify funktionieren nicht so, wie gaspi_write und gaspi_notify Lösung: Implementierung von gaspi_read_notify http://www.gaspi.de/readings/read_notify_gaspi.pdf 18

gaspi_read_notify als GASPI Applikation https://github.com/pgas-community-benchmarks/pipelined-transpose Emulation eines read_notify als GASPI Applikation innerhalb des Pipelined Transpose Pro Queue 1 read Warten bis zuvor gestarteter read fertig ist Notify auf eigenes Segment Nächsten read starten 19

Pipelined Transpose mit read_notify Emulation https://github.com/pgas-community-benchmarks/pipelined-transpose #pragma omp parallel{ if(tid == 0){ for (rank!= my_rank){ read_notify_em(submatrix[rank]) while (!complete){ gaspi_notify_waitsome(&my_submatrix) transpose(&my_submatrix) Es werden nur dann neue reads abgesetzt, wenn auch Kapazitäten frei sind (wait auf Queue) Weiterhin Überlappung von Kommunikation und Transposition 20

Community Benchmark Ergebnisse https://github.com/pgas-community-benchmarks/pipelined-transpose/wiki InfiniBand 7D Enhanced Hypercube 12 Cores/Prozess native Implementierung von gaspi_read_notify 21

gaspi_read_notify Implementierung Innerhalb der GPI2-1.1.1 Direkt auf ibverbs 2 aufeinanderfolgende, geordnete reads read2 read1 22

Pipelined Transpose mit read_notify Variante 1 Statische Verteilung der reads und der bearbeiteten Blöcke #pragma omp parallel for(i < num_initial_reads){ gaspi_read_notify(&i) while(!complete) if(!my_submatrix.transpose) if(gaspi_notify_waitsome(&my_submatrix, GASPI_TEST) == GASPI_SUCCESS){ transpose(&my_submatrix) if(my_reads!= complete){ gaspi_read_notify(&next_read) 23

Pipelined Transpose mit read_notify Variante 2 Dynamische Verteilung der reads und der bearbeiteten Blöcke #pragma omp parallel for(i < num_initial_reads){ gaspi_read_notify(&i) while(!complete) if(gaspi_notify_waitsome(&any_submatrix, GASPI_TEST) == GASPI_SUCCESS){ transpose(&any_submatrix) if(reads!= complete){ gaspi_read_notify(&next_read) 24

Eigene Ergebnisse Cluster 1 InfiniBand QDR Fat Tree 6 Cores/Prozess Intel(R) Xeon(R) X5670 @ 2.93GHz 25

Eigene Ergebnisse Cluster 2 InfiniBand FDR10 Fat Tree 8 Cores/Prozess 2x Intel(R) Xeon(R) E5-2670 @ 2.6 GHz 26

Zusammenfassung Neue Programmierparadigmen ermöglichen und erfordern ein Neugestalten der Kommunikation Relevante Kommunikationsschemata können als Kernel implementiert werden PGAS Community Benchmarks gaspi_write_notify ist ein mächtiges Werkzeug für die Umgestaltung der Kernel Ein notified read scheint vielversprechend Implementierung noch ausbaufähig 27

Ausblick Implementierungsalternativen für gaspi_read_notify Wechsel des Anwendungsfalls Graph Traversal Forschungsergebnisse gegebenenfalls nutzbar für teilevaluierbaren, asynchronen Alltoall(v) 28

Fragen, Anregungen und Diskussionen sind herzlich willkommen! THE END 29