Projektseminar Parallele Programmierung

Größe: px
Ab Seite anzeigen:

Download "Projektseminar Parallele Programmierung"

Transkript

1 HTW Dresden WS 2017/2018

2 Organisatorisches Praktikum, 4 SWS Do. 15:10-18:30 Uhr, Z136c, 2 Doppelstunden Labor Z 136c ist Donnerstag 15:10-18:30 reserviert, gemeinsam mit anderen Projektseminaren Selbständige Arbeiten können gern auch zu anderen Zeiten erfolgen

3 Aufgabenstellungen und Leistungsnachweis Aufgabenstellung: Individuelle Aufgabenstellungen oder für 2er-Gruppen Auch Einzelarbeiten möglich 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, ca Seiten Auf das Praktikum wird eine individuelle Note vergeben.

4 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 und Z146a als virtueller Parallelrechner mit MPI, LINUX, ssh-login, ssh -X Programmierung in C, C++, JavaScript und verwandten Sprachen

5 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

6 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

7 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

8 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

9 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) Bibliotheken zur Erzeugung und Verwaltung verteilter Prozesse und zur Kommunikation, MPI

10 OpenMP Parallelisierung für speichergekoppelte Systeme Parallelarbeit wird durch Multithreading erreicht Direktiven im sonst sequentiellen Code

11 OpenMP (1) Satz von Compilerdirektiven und Subroutinen für Programmierung unter gemeinsamen Speicher Zur leichten Erzeugung von mehrfädigen (mutli-threaded) Programmen Für C, C++ und FORTRAN Fork-Join-Parallelität, die dem Programm inkrementell zugefügt wird.

12 OpenMP (2) Typischer Anwendungsfall: Schleifenparallelisierung for (i=0;i<256;i++) #pragma omp parallel for for (j=0;j<256;j++) { img[i,j] = img[i,j]-minpix;m img[i,j] = (int) ( (float)img[i,j]*(float)maxval/ (float)(maxpix-minpix)); } Für Beispiel gilt: Innere Schleife wird von verschiedenen Threads bearbeitet Sehr gutwillige Struktur, da keine gemeinsam benutzten Daten, keine Zugriffskonflikte

13 OpenMP (3) Schrittweise Parallelisierung: Parallele Regionen werden mit parallel und end parallel gekennzeichnet. Es wird dann eine Menge von Threads erzeugt, die den Code redundant bearbeiten, soweit nicht anders angegeben. Aufteilung der Arbeit erfolgt, wenn Schleifen betreten werden Fortran: do und end do C/C++: for(i=0;i<max;i++) Anzahl der gemeinsamen Schleifendurchläufe muss vorab bekannt sein. Direktive barrier zur Synchronisation

14 OpenMP (4) Koordination des Zugriffs auf Daten: exklusiver Zugriff auf gemeinsam genutzte Daten durch critical und end critical erreichbar. Variable können als shared (einmal vorhanden, gemeinsam genutzt) oder private (mehrfach vorhanden, exclusive Kopie) deklariert werden reduction-klausel kann konkurrierenden Zugriff auf gemeinsame Variable ausdrücken (siehe Beispiel)

15 OpenMP (5) Beispiel: Pi-Berechnung h = ((double)1.0)/(double)n; sum = 0.0; # pragma omp parallel private (i,x,sum_local) { sum_local = 0.0; # pragma omp for for(i=1;i<=n;i++) { x = h*((double)i-(double)0.5); sum_local = +f(x); } # pragma omp critical sum += sum_local; } pi = h* sum; Autor: Dieter an May, Rechenzentrum RWTH Aachen

16 OpenMP (6) Beispiel: Pi-Berechnung, jetzt mit Reduction-Klausel h = ((double)1.0)/(double)n; sum = 0.0; # pragma omp parallel private (i,x) { sum_local = 0.0; # pragma omp for reduction(+:sum) for(i=1;i<=n;i++) { x = h*((double)i-(double)0.5); sum = +f(x); } } pi = h* sum; Autor: Dieter an May, Rechenzentrum RWTH Aachen

17 MPI (1) MPI - Message Passing Interface Standard für Laufzeitumgebung und Kommunikationsbibliothek (MPI-Forum) Funktionalität ähnlich PVM Unterschied zu PVM: Prozesse werden per Kommando (mpirun oder mpiexec) mehrfach auf verschiedenen Prozessoren gestartet. Beispiel: mpirun -np32 myprogramm keine Prozesserzeugungen im MPI-Programm erforderlich. Direkte Umsetzung des SPMD-Prinzips, statische Prozessgruppe formiert bei Start der MPI-Anwendung. Ablaufprinzip galt bisher als zu statisch, MPI-2 mit dynamischer Prozesserzeugung und Threads

18 MPI (2) Wichtigste Funktionen: MPI_Init( int *argc,char ***argv) // System initialisiert, jeder Knoten mit eindeutige Nummer // und die MPI-Funktionen koennen benutzt werden int MPI_Comm_size ( MPI_Comm comm, int *size ) int MPI_Comm_rank ( MPI_Comm comm, int *rank ) int MPI_Send( void *buf, int count, MPI_DATATYPE datatype, int dest, int tag, MPI_Comm comm ) int MPI_Recv(void *buf, int count, MPI_Datatype datatype, int source, int tag, MPI_Comm comm, MPI_Status status ) MPI_Finalize(); Weitere Funktionen wie z.b. Scatter, Gather, Barrier

19 MPI-Beispiel main(int argc, char **argv) { int rank, size;... MPI_Init(&argc, &argv); MPI_Comm_size(MPI_COMM_WORLD,&size); MPI_Comm_rank(MPI_COMM_WORLD,&rank); if (rank%2==0) /* gerade Prozess-Id */ { if (rank+1<size) { sprintf(msg,"nachricht [%d --> %d]\n",rank,rank+1); MPI_Send(msg,STRLEN,MPI_BYTE,rank+1,0,MPI_COMM_WORLD); } } else /* ungerade Prozess-Id */ { if (rank>0) { MPI_Recv(msg, STRLEN,MPI_BYTE,rank-1,0,MPI_COMM_WORLD,&st printf("empfangen: %s",msg); } } MPI_Finalize();

20 MPI-2 (1) Fortschreibung des MPI-Standards auf MPI-2 Neue Funktionen: Dynamische Prozesserzeugung: Ähnlich wie bei PVM können zur Laufzeit neue Prozesse erzeugt werden. Kollektive Operation:MPI_Comm_Spawn() Die Größe der Maschine wird durch MPI_UNIVERSE_SIZE abgefragt. Nach Spawn werden in einem Kommunikator (MPI_COMM_SPAWN) alte und neue Prozesse in unterschiedliche Gruppen eingeteilt. Dabei sind Prozesse sind durch (rank:group) identifiziert.

21 MPI-2 (2) Neue Funktionen (Fortsetzung): Socket-ähnlicher Aufbau von C/S-Systemen MPI_Open_Port(), MPI_Comm_Accept(), MPI_Comm_Connect()

22 MPI-2 (3) Neue Funktionen (Fortsetzung): Thread-Unterstützung Ein MPI Prozess kann aus mehreren Threads bestehen, die MPI-Funktionen ausführen. Funktion: MPI_Init_Thread(...,int required, int *provided) Die Werte required und provided stehen für verschiedene Thread-Unterstützungslevel: MPI_THREAD_SINGLE - nur ein einzelner Thread je Prozess MPI_THREAD_FUNNELED - multithreaded, aber nur ein Thread nutzt MPI-Funktionen MPI_THREAD_SERIALIZED - Threads werden bzgl. MPI-Aufrufen serialisiert MPI_THREAD_MULTIPLE - ohne Restriktionen

23 MPI-2 (4) Neue Funktionen (Fortsetzung): Einseitige Kommunikationsfunktionen Für Maschinen mit remote memory access, z.b. Cray T3D/T3E, Cluster mit SCI und Infiniband Netzen Funktionen: MPI_Put(), MPI_Get(), MPI_Accumulate()

24 CUDA für Grafikkarten CUDA Beispiel // Kernel definition global void VecAdd(float* A, float* B, float* C) { int i = threadidx.x; C[i] = A[i] + B[i]; } int main() {... // Kernel invocation with N threads VecAdd<<<1, N>>>(A, B, C);... }

25 Aufgaben Einschreibung für ein Thema: Thema 1 - Atomic Multicast Thema 2 - Parallele Hashtable auf GPU (Cuda, OpenCL) Thema 3 - Verteilte Hashtable, MPI Nachrichtenbasiert Thema 4 - Verteilte Hashtable, MPI MemoryWindow, Onesided Ops Thema 5 - Spread Code, in-memory storage Weitere Treffen: Login-Zuteilung, Einweisung in Rechner Kick-Off Besprechungen mit einzelnen Gruppen Materialausgabe

Projektseminar Parallele Programmierung

Projektseminar Parallele Programmierung HTW Dresden WS 2016/2017 Organisatorisches Praktikum, 4 SWS Do. 15:10-18:30 Uhr, Z136c, 2 Doppelstunden Labor Z 136c ist Montag und Donnerstag 15:10-18:30 reserviert, gemeinsam mit anderen Projektseminaren

Mehr

Projektseminar Parallele Programmierung

Projektseminar Parallele Programmierung 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

Mehr

Konzepte der parallelen Programmierung

Konzepte der parallelen Programmierung Fakultät Informatik, Institut für Technische Informatik, Professur Rechnerarchitektur Konzepte der parallelen Programmierung Parallele Programmiermodelle Nöthnitzer Straße 46 Raum 1029 Tel. +49 351-463

Mehr

Das Message Passing Paradigma (1)

Das Message Passing Paradigma (1) Das Message Passing Paradigma (1) Das Message Passing Paradigma (2) Sehr flexibel, universell, hoch effizient Programm kann logisch in beliebig viele Prozesse aufgeteilt werden Prozesse können unterschiedlichen

Mehr

Trend der letzten Jahre in der Parallelrechentechnik

Trend der letzten Jahre in der Parallelrechentechnik 4.1 Einführung Trend der letzten 10-15 Jahre in der Parallelrechentechnik weg von den spezialisierten Superrechner-Plattformen hin zu kostengünstigeren Allzwecksystemen, die aus lose gekoppelten einzelnen

Mehr

Praktikum: Paralleles Programmieren für Geowissenschaftler

Praktikum: Paralleles Programmieren für Geowissenschaftler Praktikum: Paralleles Programmieren für Geowissenschaftler Prof. Thomas Ludwig, Hermann Lenhart, Nathanael Hübbe hermann.lenhart@zmaw.de MPI Einführung I: Hardware Voraussetzung zur Parallelen Programmierung

Mehr

Paralleles Rechnen: MPI

Paralleles Rechnen: MPI Münster Paralleles Rechnen: MPI 11.12.2015 Top 500 Münster Paralleles Rechnen: MPI 2 /23 32 Großrechner in Deutschland unter den Top 500 davon 5 Systeme unter den Top 50 8 Hazel Hen (HLRS Stuttgart) 11

Mehr

Exkurs: Paralleles Rechnen

Exkurs: Paralleles Rechnen Münster Exkurs: Paralleles Rechnen Münster Exkurs: Paralleles Rechnen 2 /21 Konzepte für Parallelrechner P P P C C C Gemeinsamer Speicher Verteilter Speicher Verbindungsnetzwerk Speicher M, Münster Exkurs:

Mehr

MPI Message Passing Interface. Matus Dobrotka Jan Lietz

MPI Message Passing Interface. Matus Dobrotka Jan Lietz MPI Message Passing Interface Matus Dobrotka Jan Lietz 25.5.2016 MPI Ein Standard, der den Nachrichtenaustausch bei parallelen Berechnungen auf verteilten Computersystemen beschreibt MPI-Applikation mehrere

Mehr

Computergrundlagen Moderne Rechnerarchitekturen

Computergrundlagen Moderne Rechnerarchitekturen Computergrundlagen Moderne Rechnerarchitekturen Axel Arnold Institut für Computerphysik Universität Stuttgart Wintersemester 2010/11 Aufbau eines modernen Computers DDR3- Speicher Prozessor Prozessor PEG

Mehr

Praktikum: Paralleles Programmieren für Geowissenschaftler

Praktikum: Paralleles Programmieren für Geowissenschaftler Praktikum: Paralleles Programmieren für Geowissenschaftler Prof. Thomas Ludwig, Hermann Lenhart hermann.lenhart@zmaw.de MPI Einführung I: Einführung Nachrichtenaustausch mit MPI MPI point-to-point communication

Mehr

Computergrundlagen Moderne Rechnerarchitekturen

Computergrundlagen Moderne Rechnerarchitekturen Aufbau eines modernen Computers Computergrundlagen Moderne Rechnerarchitekturen Axel Arnold Institut für Computerphysik Universität Stuttgart DDR3- Speicher Prozessor Prozessor PEG Graphikkarte(n) weitere

Mehr

Multi- und Many-Core

Multi- und Many-Core Multi- und Many-Core Benjamin Warnke Arbeitsbereich Wissenschaftliches Rechnen Fachbereich Informatik Fakultät für Mathematik, Informatik und Naturwissenschaften Universität Hamburg 2016-12-15 Benjamin

Mehr

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

Master-Thread führt Programm aus, bis durch die Direktive OpenMP seit 1998 Standard (www.openmp.org) für die Shared-Memory Programmierung; (Prä-)Compiler für viele Systeme kommerziell oder frei (z.b. Omni von phase.hpcc.jp/omni) verfügbar Idee: automatische Generierung

Mehr

OpenCL. Programmiersprachen im Multicore-Zeitalter. Tim Wiersdörfer

OpenCL. Programmiersprachen im Multicore-Zeitalter. Tim Wiersdörfer OpenCL Programmiersprachen im Multicore-Zeitalter Tim Wiersdörfer Inhaltsverzeichnis 1. Was ist OpenCL 2. Entwicklung von OpenCL 3. OpenCL Modelle 1. Plattform-Modell 2. Ausführungs-Modell 3. Speicher-Modell

Mehr

Grundlagen von CUDA, Sprachtypische Elemente

Grundlagen von CUDA, Sprachtypische Elemente Grundlagen von CUDA, Sprachtypische Elemente Stefan Maskanitz 03.07.2009 CUDA Grundlagen 1 Übersicht 1. Einleitung 2. Spracheigenschaften a. s, Blocks und Grids b. Speicherorganistion c. Fehlerbehandlung

Mehr

Einige Grundlagen zu OpenMP

Einige Grundlagen zu OpenMP Einige Grundlagen zu OpenMP Stephanie Friedhoff, Martin Lanser Mathematisches Institut Universität zu Köln 22. Juni 2016 Überblick Was ist OpenMP? Basics Das OpenMP fork-join-modell Kompilieren und Ausführen

Mehr

4.4. MPI Message Passing Interface

4.4. MPI Message Passing Interface 4.4. MPI Message Passing Interface Ferienakademie 2009 Franz Diebold Agenda 1. Einführung, Motivation 2. Kommunikationsmodell 3. Punkt-Zu-Punkt-Kommunikation 4. Globale Kommunikation 5. Vergleich MPI und

Mehr

Kurzübersicht über die wichtigsten MPI-Befehle

Kurzübersicht über die wichtigsten MPI-Befehle Kurzübersicht über die wichtigsten MPI-Befehle Hans Joachim Pflug Rechen- und Kommunkationszentrum der RWTH Aachen Inhalt MPI_Init / MPI_Finalize...2 MPI_Comm_size / MPI_Comm_rank...3 MPI_Send / MPI_Recv...4

Mehr

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

OpenMP - Geschichte. 1997: OpenMP Version 1.0 für Fortran OpenMP - Geschichte 1997: OpenMP Version 1.0 für Fortran Standard für f r die Shared-Memory Memory-Programmierung inzwischen für f r alle namhaften SMP-Rechner verfügbar wird im techn.-wiss. Rechnen die

Mehr

Homogene Multi-Core-Prozessor-Architekturen

Homogene Multi-Core-Prozessor-Architekturen Homogene Multi-Core-Prozessor-Architekturen Praktikum Parallele Rechnerarchitekturen Stefan Potyra Lehrstuhl für Informatik 3 (Rechnerarchitektur) Friedrich-Alexander-Universität Erlangen-Nürnberg WS 2009

Mehr

OpenMP. Viktor Styrbul

OpenMP. Viktor Styrbul OpenMP Viktor Styrbul Inhaltsverzeichnis Was ist OpenMP Warum Parallelisierung Geschichte Merkmale von OpenMP OpenMP-fähige Compiler OpenMP Ausführungsmodell Kernelemente von OpenMP Zusammenfassung Was

Mehr

Shared-Memory Programmiermodelle

Shared-Memory Programmiermodelle Shared-Memory Programmiermodelle mehrere, unabhängige Programmsegmente greifen direkt auf gemeinsame Variablen ( shared variables ) zu Prozeßmodell gemäß fork/join Prinzip, z.b. in Unix: fork: Erzeugung

Mehr

Compute Unified Device Architecture CUDA

Compute Unified Device Architecture CUDA Compute Unified Device Architecture 06. Februar 2012 1 / 13 Gliederung 2 / 13 : Compute Unified Device Architecture entwickelt von Nvidia Corporation spezifiziert Software- und Hardwareeigenschaften Ziel:

Mehr

MPI: Message passing interface

MPI: Message passing interface MPI: Message passing interface Es werden mehrere Prozesse gestartet, die das gleiche Programm abarbeiten. Diese Prozesse können auf dem gleichen Knoten oder verschiedenen Knoten eines Clusters von Rechnern

Mehr

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

Hochleistungsrechnen Hybride Parallele Programmierung. Prof. Dr. Thomas Ludwig Universität Hamburg Informatik Wissenschaftliches Rechnen Hochleistungsrechnen Hybride Parallele Programmierung Prof. Dr. Thomas Ludwig Universität Hamburg Informatik Wissenschaftliches Rechnen Inhaltsübersicht Einleitung und Motivation Programmiermodelle für

Mehr

Beispiel: Schleifenparallelisierung

Beispiel: Schleifenparallelisierung Beispiel: Schleifenparallelisierung for (i = 0; i high) { printf ( Exiting during iteration %d\n,i); break; for (j=low;j

Mehr

Parallel Processing in a Nutshell OpenMP & MPI kurz vorgestellt

Parallel Processing in a Nutshell OpenMP & MPI kurz vorgestellt Parallel Processing in a Nutshell & kurz vorgestellt 16. Juni 2009 1 / 29 1 Das Problem 2 2 / 29 1 Das Problem 2 3 2 / 29 1 Das Problem 2 3 4 2 / 29 1 Das Problem 2 3 4 2 / 29 Multi-Core Prozessoren halten

Mehr

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

OpenMP - Threading- Spracherweiterung für C/C++ Matthias Klein, Michael Pötz Systemprogrammierung 15. Juni 2009 - Threading- Spracherweiterung für C/C++ Matthias Klein, Michael Pötz Systemprogrammierung 15. Juni 2009 Grundlagen der Parallelen Programmierung Hardware Threads vs. Prozesse Kritische Abschnitte Lange

Mehr

Exkurs: Paralleles Rechnen

Exkurs: Paralleles Rechnen Münster Exkurs: Paralleles Rechnen December 2, 2013 , Münster Exkurs: Paralleles Rechnen 2 /27 Warum parallel Rechnen? Westf alische Wilhelms-Universit at M unster Exkurs: Paralleles Rechnen 2 /27 JUQUEEN,

Mehr

Praktikum: Paralleles Programmieren für Geowissenschaftler

Praktikum: Paralleles Programmieren für Geowissenschaftler Praktikum: Paralleles Programmieren für Geowissenschaftler Prof. Thomas Ludwig, Hermann Lenhart & Enno Zickler hermann.lenhart@zmaw.de OpenMP Allgemeine Einführung I OpenMP Merkmale: OpenMP ist keine Programmiersprache!

Mehr

Modelle der Parallelverarbeitung

Modelle der Parallelverarbeitung Modelle der Parallelverarbeitung Modelle der Parallelverarbeitung 12. Message Passing Interface Thomas Worsch Fakultät für Informatik Karlsruher Institut für Technologie Sommersemester 2017 1 / 36 Überblick

Mehr

MPI-2 Die Zukunft des Message Passing?

MPI-2 Die Zukunft des Message Passing? Seminar WS 03/04 MPI-2 Die Zukunft des Message Passing? LS Rechnerarchitektur Sven Stork Übersicht 1) Einführung 2) Parallel I/O 3) RMA 4) DPM 5) Zusammenfassung Einführung Einführung Was ist MPI? Ein

Mehr

Praxiseinheit: Realisierung einer hardwarebeschleunigten Disparitätenberechnung zur automatischen Auswertung von Stereobildern

Praxiseinheit: Realisierung einer hardwarebeschleunigten Disparitätenberechnung zur automatischen Auswertung von Stereobildern Praxiseinheit: Realisierung einer hardwarebeschleunigten Disparitätenberechnung zur automatischen Auswertung von Stereobildern Institut für Betriebssysteme und Rechnerverbund TU Braunschweig 25.10., 26.10.

Mehr

Parallele und verteilte Programmierung

Parallele und verteilte Programmierung Thomas Rauber Gudula Rünger Parallele und verteilte Programmierung Mit 165 Abbildungen und 17 Tabellen Jp Springer Inhaltsverzeichnis 1. Einleitung 1 Teil I. Architektur 2. Architektur von Parallelrechnern

Mehr

Beschreiben Sie die Eigenschaften der verschiedenen Rechnertypen an Hand:

Beschreiben Sie die Eigenschaften der verschiedenen Rechnertypen an Hand: Hochschule Harz FB Automatisierung/Informatik Fachprüfung: Parallele Algorithmen (Musterklausur) Alle Hilfsmittel sind zugelassen! 1. Aufgabe Beschreiben Sie die Eigenschaften der verschiedenen Rechnertypen

Mehr

PGI Accelerator Model

PGI Accelerator Model PGI Accelerator Model Philip Höhlein, Nils Werner Supervision: R. Membarth, P. Kutzer, F. Hannig Hardware-Software-Co-Design Universität Erlangen-Nürnberg Philip Höhlein, Nils Werner 1 Übersicht Motivation

Mehr

CUDA. Moritz Wild, Jan-Hugo Lupp. Seminar Multi-Core Architectures and Programming. Friedrich-Alexander-Universität Erlangen-Nürnberg

CUDA. Moritz Wild, Jan-Hugo Lupp. Seminar Multi-Core Architectures and Programming. Friedrich-Alexander-Universität Erlangen-Nürnberg CUDA Seminar Multi-Core Architectures and Programming 1 Übersicht Einleitung Architektur Programmierung 2 Einleitung Computations on GPU 2003 Probleme Hohe Kenntnisse der Grafikprogrammierung nötig Unterschiedliche

Mehr

Message-Passing: Einführung

Message-Passing: Einführung Message-Passing: Einführung Architecture of Parallel Computer Systems WS15/16 JSimon 1 Punkt zu Punkt Senden und Empfangen Message-Passing Mechanismus Erzeugung von Prozessen Übertragung einer Nachricht

Mehr

Aufgabenstellung zum Projektseminar Parallele Programmierung im WS 2017/2018

Aufgabenstellung zum Projektseminar Parallele Programmierung im WS 2017/2018 Aufgabe 1: Atomic Multicast Eine Prozessmenge soll von verschiedenen Sendern Multicast Nachrichten empfangen. Der Empfang soll ohne Angabe eines speziellen Senders erfolgen (Recv From Any) und nach jedem

Mehr

1. Einführung in OpenMP

1. Einführung in OpenMP 1. Einführung in OpenMP Übersicht Einführung Homogene und inhomogene Arbeitsverteilung Rekursive Parallelität Beispiele Parallele Programmierung 1 Nicolas Maillard, Marcus Ritt 1 Überblick OpenMP: Vereinfachte

Mehr

Parallel Regions und Work-Sharing Konstrukte

Parallel Regions und Work-Sharing Konstrukte Parallel Regions und Work-Sharing Konstrukte Um eine Parallelisierung von größeren Programmabschnitten, als es einzelne Schleifen sind, zu ermöglichen, stellt OpenMP als allgemeinstes Konzept die Parallel

Mehr

Multi-threaded Programming with Cilk

Multi-threaded Programming with Cilk Multi-threaded Programming with Cilk Hobli Taffame Institut für Informatik Ruprecht-Karls Universität Heidelberg 3. Juli 2013 1 / 27 Inhaltsverzeichnis 1 Einleitung Warum Multithreading? Ziele 2 Was ist

Mehr

Message Passing Interface: MPI

Message Passing Interface: MPI Message Passing Interface: MPI Geschichte: Erster MPI Standard Etwa 60 Personen, von 40 Institutionen (29-30 April 1992) MPI 1 im November 1993 MPI 1.1 im Juni 1995 MPI 1.2 Juli 1997 (Nur Ergänzung zu

Mehr

Praktikum: Paralleles Programmieren für Geowissenschaftler

Praktikum: Paralleles Programmieren für Geowissenschaftler Praktikum: Paralleles Programmieren für Geowissenschaftler Prof. Thomas Ludwig, Hermann Lenhart, Ulrich Körner, Nathanael Hübbe hermann.lenhart@zmaw.de OpenMP Einführung I: Allgemeine Einführung Prozesse

Mehr

Multi- und Many-Core

Multi- und Many-Core Multi- und Many-Core Schriftliche Ausarbeitung zum Seminar Arbeitsbereich Wissenschaftliches Rechnen Fachbereich Informatik Fakultät für Mathematik, Informatik und Naturwissenschaften Universität Hamburg

Mehr

Programmierung von Multicore-Rechnern

Programmierung von Multicore-Rechnern Programmierung von Multicore-Rechnern Prof. Dr.-Ing. habil. Peter Sobe HTW Dresden, Fakultät Informatik/Mathematik www.informatik.htw-dresden.de Gliederung: Ein Blick auf Multicore-Prozessoren/ und -Rechner

Mehr

Masterpraktikum Scientific Computing

Masterpraktikum Scientific Computing Masterpraktikum Scientific Computing High-Performance Computing Thomas Auckenthaler Wolfgang Eckhardt Prof. Dr. Michael Bader Technische Universität München, Germany Outline Organisatorisches Entwicklung

Mehr

Vorlesung Parallelrechner und Parallelprogrammierung, SoSe 2016

Vorlesung Parallelrechner und Parallelprogrammierung, SoSe 2016 Paralleles Programmieren mit OpenMP und MPI MPI-Übungsaufgaben Vorlesung Parallelrechner und Parallelprogrammierung, SoSe 2016 Hartmut Steinbuch Häfner, Centre Steinbuch for Computing Centre for Computing

Mehr

Vorlesung Betriebssysteme II

Vorlesung Betriebssysteme II 1 / 15 Vorlesung Betriebssysteme II Thema 3: IPC Robert Baumgartl 20. April 2015 2 / 15 Message Passing (Nachrichtenaustausch) Prinzip 2 grundlegende Operationen: send(), receive() notwendig, wenn kein

Mehr

Universität Karlsruhe (TH)

Universität Karlsruhe (TH) Universität Karlsruhe (TH) Forschungsuniversität gegründet 1825 OpenMP-Programmierung Teil I Multikern-Praktikum Wintersemester 06-07 Inhalt Was ist OpenMP? Parallele Regionen Konstrukte zur Arbeitsteilung

Mehr

Parallele Programmiermodelle

Parallele Programmiermodelle Parallele Programmiermodelle ProSeminar: Parallele Programmierung Semester: WS 2012/2013 Dozentin: Margarita Esponda Einleitung - Kurzer Rückblick Flynn'sche Klassifikationsschemata Unterteilung nach Speicherorganissation

Mehr

Parallel Programming: Message-Passing-Interface

Parallel Programming: Message-Passing-Interface Vorlesung Rechnerarchitektur 2 Seite 71 MPI-Einführung Parallel Programming: Voraussetzungen im Source-Code für ein MPI Programm: mpi.h includen Die Kommandozeilenparameter des Programms müssen an MPI_Init

Mehr

Parallele Programmierung mit OpenMP

Parallele Programmierung mit OpenMP Parallele Programmierung mit OpenMP - Eine kurze Einführung - 11.06.2003 RRZN Kolloquium SS 2003 1 Gliederung 1. Grundlagen 2. Programmiermodell 3. Sprachkonstrukte 4. Vergleich MPI und OpenMP 11.06.2003

Mehr

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

Zum Aufwärmen nocheinmal grundlegende Tatsachen zum Rechnen mit reelen Zahlen auf dem Computer. Das Rechnen mit Gleitkommazahlen wird durch den IEEE Zum Aufwärmen nocheinmal grundlegende Tatsachen zum Rechnen mit reelen Zahlen auf dem Computer. Das Rechnen mit Gleitkommazahlen wird durch den IEEE 754 Standard festgelegt. Es stehen sogenannte einfach

Mehr

Systeme I: Betriebssysteme Kapitel 4 Prozesse. Wolfram Burgard

Systeme I: Betriebssysteme Kapitel 4 Prozesse. Wolfram Burgard Systeme I: Betriebssysteme Kapitel 4 Prozesse Wolfram Burgard Version 18.11.2015 1 Inhalt Vorlesung Aufbau einfacher Rechner Überblick: Aufgabe, Historische Entwicklung, unterschiedliche Arten von Betriebssystemen

Mehr

OpenMP Data Scope Clauses

OpenMP Data Scope Clauses OpenMP Data Scope Clauses private (list) erklärt die Variablen in der Liste list zu privaten Variablen der einzelnen Threads des Teams shared (list) erklärt die Variablen in der Liste list zu gemeinsamen

Mehr

Threads und OpenMP. Frank Mietke <frank.mietke@informatik.tu-chemnitz.de> Cluster- & Gridcomputing Frank Mietke 7/4/04

Threads und OpenMP. Frank Mietke <frank.mietke@informatik.tu-chemnitz.de> Cluster- & Gridcomputing Frank Mietke 7/4/04 Threads und OpenMP Frank Mietke 1 Ziel der Vorlesungen Einführung in Threads Programmierung mit Threads Einführung in OpenMP Programmierung mit OpenMP 2 Was ist

Mehr

6. Der OpenMP Standard. Direktiven-basiertes API zur Programmierung von Parallelrechnern mit gemeinsamem Speicher für FORTRAN, C und C++

6. Der OpenMP Standard. Direktiven-basiertes API zur Programmierung von Parallelrechnern mit gemeinsamem Speicher für FORTRAN, C und C++ 6. Der OpenMP Standard Direktiven-basiertes API zur Programmierung von Parallelrechnern mit gemeinsamem Speicher für FORTRAN, C und C++ OpenMP Programmiermodell OpenMP Direktiven basieren in C and C++

Mehr

Einführung in das parallele Programmieren mit MPI und Java

Einführung in das parallele Programmieren mit MPI und Java Einführung in das parallele Programmieren mit und Java Seite 1 Übersicht Parallele Prozesse und Erste Schritte mit Kollektive Kommunikation Weitere Möglichkeiten Seite 2 Literatur (1) Homepage des 2-Forums

Mehr

GPGPU-Programmierung

GPGPU-Programmierung 12 GPGPU-Programmierung 2013/04/25 Diese Folien enthalten Graphiken mit Nutzungseinschränkungen. Das Kopieren der Graphiken ist im Allgemeinen nicht erlaubt. Motivation (1) General Purpose Computing on

Mehr

Praktikum: Paralleles Programmieren für Geowissenschaftler

Praktikum: Paralleles Programmieren für Geowissenschaftler Praktikum: Paralleles Programmieren für Geowissenschaftler Prof. Thomas Ludwig, Hermann Lenhart, Nathanael Hübbe hermann.lenhart@informatik.uni-hamburg.de MPI Kommunikation: Das wichtigste Kriterium für

Mehr

Computational Biology: Bioelektromagnetismus und Biomechanik

Computational Biology: Bioelektromagnetismus und Biomechanik Computational Biology: Bioelektromagnetismus und Biomechanik Implementierung Gliederung Wiederholung: Biomechanik III Statische Elastomechanik Finite Elemente Diskretisierung Finite Differenzen Diskretisierung

Mehr

Yilmaz, Tolga MatNr: Mesaud, Elias MatNr:

Yilmaz, Tolga MatNr: Mesaud, Elias MatNr: Yilmaz, Tolga MatNr: 157317 Mesaud, Elias MatNr: 151386 1. Aufbau und Funktionsweise einer Grafikkarte 2. CPU vs. GPU 3. Software 4. Beispielprogramme Kompilierung und Vorführung 5. Wo wird Cuda heutzutage

Mehr

Paralleles Programmieren mit MPI und OpenMP

Paralleles Programmieren mit MPI und OpenMP Paralleles Programmieren mit MPI und OpenMP Vorlesung «Algorithmen für das wissenschaftliche Rechnen» 6.5.2002 Olaf Schenk, Michael Hagemann 6.5.2002 Algorithmen des wissenschaftlichen Rechnens 1 Organisatorisches

Mehr

Nutzung paralleler Prozesse bei der Umweltsimulation

Nutzung paralleler Prozesse bei der Umweltsimulation Nutzung paralleler Prozesse bei der Umweltsimulation RALF Wieland rwieland@zalf.de ZALF/LSA Nutzung paralleler Prozesse bei der Umweltsimulation p. 1 Warum parallele Prozesse? Die Steigerung der Taktfrequenz

Mehr

Praktikum: Paralleles Programmieren für Geowissenschaftler

Praktikum: Paralleles Programmieren für Geowissenschaftler Praktikum: Paralleles Programmieren für Geowissenschaftler Prof. Thomas Ludwig, Hermann Lenhart, Enno Zieckler hermann.lenhart@informatik.uni-hamburg.de MPI Kommunikation: Das wichtigste Kriterium für

Mehr

C-to-CUDA-Compiler. Johannes Kölsch. October 29, 2012

C-to-CUDA-Compiler. Johannes Kölsch. October 29, 2012 October 29, 2012 Inhaltsverzeichnis 1 2 3 4 5 6 Motivation Motivation CUDA bietet extreme Leistung für parallelisierbare Programme Kompliziert zu programmieren, da multi-level parallel und explizit verwalteter

Mehr

Eine kurze Einführung in Rechnerarchitektur und Programmierung von Hochleistungsrechnern als zentrales Werkzeug in der Simulation

Eine kurze Einführung in Rechnerarchitektur und Programmierung von Hochleistungsrechnern als zentrales Werkzeug in der Simulation Eine kurze Einführung in Rechnerarchitektur und Programmierung von Hochleistungsrechnern als zentrales Werkzeug in der Simulation Dr. Jan Eitzinger Regionales Rechenzentrum (RRZE) der Universität Erlangen-Nürnberg

Mehr

High Performance Computing

High Performance Computing REGIONALES RECHENZENTRUM ERLANGEN [RRZE] High Performance Computing Systemausbildung Grundlagen und Aspekte von Betriebssystemen und systemnahen Diensten, 21.06.2017 HPC-Gruppe, RRZE Agenda Was bedeutet

Mehr

Vorlesung Parallelrechner und Parallelprogrammierung, SoSe 2016

Vorlesung Parallelrechner und Parallelprogrammierung, SoSe 2016 Paralleles Programmieren mit OpenMP und MPI Einführung in MPI Vorlesung Parallelrechner und Parallelprogrammierung, SoSe 2016 Steinbuch Centre for Computing Hartmut Häfner, Steinbuch Centre for Computing

Mehr

Systeme I: Betriebssysteme Kapitel 4 Prozesse. Maren Bennewitz

Systeme I: Betriebssysteme Kapitel 4 Prozesse. Maren Bennewitz Systeme I: Betriebssysteme Kapitel 4 Prozesse Maren Bennewitz Version 21.11.2012 1 Begrüßung Heute ist Tag der offenen Tür Willkommen allen Schülerinnen und Schülern! 2 Testat nach Weihnachten Mittwoch

Mehr

Lehrstuhl für Datenverarbeitung. Technische Universität München. Leistungskurs C++ Multithreading

Lehrstuhl für Datenverarbeitung. Technische Universität München. Leistungskurs C++ Multithreading Leistungskurs C++ Multithreading Zeitplan 16.10. Vorlesung 23.10. Vorlesung, Gruppeneinteilung 30.10. Vorlesung, HA1 06.11. Vorlesung, HA2 13.11. Vorlesung entfällt wegen SVV 20.11. Präsentation Vorprojekt

Mehr

Universität Karlsruhe (TH)

Universität Karlsruhe (TH) Universität Karlsruhe (TH) Forschungsuniversität gegründet 1825 OpenMP-Programmierung Teil III Multikern-Praktikum Wintersemester 06-07 Inhalt Was ist OpenMP? Parallele Regionen Konstrukte zur Arbeitsteilung

Mehr

Lehrstuhl für Datenverarbeitung. Technische Universität München. Leistungskurs C++ Multithreading

Lehrstuhl für Datenverarbeitung. Technische Universität München. Leistungskurs C++ Multithreading Leistungskurs C++ Multithreading Threading mit Qt Plattformübergreifende Thread-Klasse Sehr einfach zu benutzen Leider etwas schlecht dokumentiert Leistungskurs C++ 2 QThread Plattformübergreifende Thread-Klasse

Mehr

Threads. Foliensatz 8: Threads Folie 1. Hans-Georg Eßer, TH Nürnberg Systemprogrammierung, Sommersemester 2015

Threads. Foliensatz 8: Threads Folie 1. Hans-Georg Eßer, TH Nürnberg Systemprogrammierung, Sommersemester 2015 Sep 19 14:20:18 amd64 sshd[20494]: Accepted rsa for esser from ::ffff:87.234.201.207 port 61557 Sep 19 14:27:41 amd64 syslog-ng[7653]: STATS: dropped 0 Sep 20 01:00:01 amd64 /usr/sbin/cron[29278]: (root)

Mehr

Systeme I: Betriebssysteme Kapitel 4 Prozesse. Maren Bennewitz

Systeme I: Betriebssysteme Kapitel 4 Prozesse. Maren Bennewitz Systeme I: Betriebssysteme Kapitel 4 Prozesse Maren Bennewitz Version 13.11.2013 1 Inhalt Vorlesung Aufbau einfacher Rechner Überblick: Aufgabe, Historische Entwicklung, unterschiedliche Arten von Betriebssystemen

Mehr

Linux-Cluster mit Raspberry Pi. Dr. René Richter Sächsische Studienakademie Dresden rene.richter@ba-dresden rene.richter@namespace-cpp.

Linux-Cluster mit Raspberry Pi. Dr. René Richter Sächsische Studienakademie Dresden rene.richter@ba-dresden rene.richter@namespace-cpp. Linux-Cluster mit Raspberry Pi Dr. René Richter Sächsische Studienakademie Dresden rene.richter@ba-dresden rene.richter@namespace-cpp.de Lange Nacht der Wissenschaften 2013 Moore s Law Moore s Law (1965)

Mehr

General Purpose Computation on GPUs

General Purpose Computation on GPUs General Purpose Computation on GPUs Matthias Schneider, Robert Grimm Universität Erlangen-Nürnberg {matthias.schneider, robert.grimm}@informatik.stud.uni-erlangen.de M. Schneider, R. Grimm 1 Übersicht

Mehr

MPI Prozessgruppen, Topologien, kollektive Kommunikation

MPI Prozessgruppen, Topologien, kollektive Kommunikation MPI Prozessgruppen, Topologien, kollektive Kommunikation Parallelrechner Sommersemester 2004 tome@informatik.tu-chemnitz.de Inhalt Prozessgruppen und der Communicator Kollektive Kommunikation Prozess Topologien

Mehr

4. Parallelprogrammierung

4. Parallelprogrammierung 4. Parallelprogrammierung AlDaBi Prak4kum David Weese 2010/11 Enrico Siragusa WS 2011/12 Inhalt Einführung in Parallelität OpenMP Bemerkungen zur P- Aufgabe EINFÜHRUNG IN PARALLELITÄT Folien z.t. aus VL

Mehr

Automatische Parallelisierung

Automatische Parallelisierung MPI und OpenMP in HPC Anwendungen findet man immer häufiger auch den gemeinsamen Einsatz von MPI und OpenMP: OpenMP wird zur thread-parallelen Implementierung des Codes auf einem einzelnen Rechenknoten

Mehr

Games with Cellular Automata auf Parallelen Rechnerarchitekturen

Games with Cellular Automata auf Parallelen Rechnerarchitekturen Bachelor Games with Cellular Automata auf Parallelen en ( ) Dipl.-Inf. Marc Reichenbach Prof. Dietmar Fey Ziel des s Paralleles Rechnen Keine akademische Nische mehr Vielmehr Allgemeingut für den Beruf

Mehr

Beispiel Parallelisierung 2D Laplace. Lagrange Formulierung/Hyperelastisches Material. Finite Differenzen Diskretisierung

Beispiel Parallelisierung 2D Laplace. Lagrange Formulierung/Hyperelastisches Material. Finite Differenzen Diskretisierung Simulation von physikalischen Feldern im menschlichen Körper Implementierung Gliederung Gliederung Wiederholung: Biomechanik III Statische elastomechanische Probleme Finite Elemente Diskretisierung Finite

Mehr

2 Rechnerarchitekturen

2 Rechnerarchitekturen 2 Rechnerarchitekturen Rechnerarchitekturen Flynns Klassifikation Flynnsche Klassifikation (Flynn sche Taxonomie) 1966 entwickelt, einfaches Modell, bis heute genutzt Beschränkung der Beschreibung auf

Mehr

GPGPU-Programming. Constantin Timm Informatik 12 TU Dortmund 2012/04/09. technische universität dortmund. fakultät für informatik informatik 12

GPGPU-Programming. Constantin Timm Informatik 12 TU Dortmund 2012/04/09. technische universität dortmund. fakultät für informatik informatik 12 12 GPGPU-Programming Constantin Timm Informatik 12 TU Dortmund 2012/04/09 Diese Folien enthalten Graphiken mit Nutzungseinschränkungen. Das Kopieren der Graphiken ist im Allgemeinen nicht erlaubt. Motivation

Mehr

Vertiefungsrichtung Rechnerarchitektur

Vertiefungsrichtung Rechnerarchitektur srichtung () ( für ) Prof. Dietmar Fey Ziele der srichtung RA Vertiefen des Verständnis vom Aufbau, Funktionsweise von Rechnern und Prozessoren Modellierung und Entwurf von Rechnern und Prozessoren ()

Mehr

Pthreads. David Klaftenegger. Seminar: Multicore Programmierung Sommersemester

Pthreads. David Klaftenegger. Seminar: Multicore Programmierung Sommersemester Seminar: Multicore Programmierung Sommersemester 2009 16.07.2009 Inhaltsverzeichnis 1 Speichermodell 2 3 Implementierungsvielfalt Prioritätsinversion 4 Threads Speichermodell Was sind Threads innerhalb

Mehr

Mehrprozessorarchitekturen

Mehrprozessorarchitekturen Mehrprozessorarchitekturen (SMP, UMA/NUMA, Cluster) Arian Bär 12.07.2004 12.07.2004 Arian Bär 1 Gliederung 1. Einleitung 2. Symmetrische Multiprozessoren (SMP) Allgemeines Architektur 3. Speicherarchitekturen

Mehr

GPGPU-Programmierung

GPGPU-Programmierung 12 GPGPU-Programmierung 2014/04/29 Diese Folien enthalten Graphiken mit Nutzungseinschränkungen. Das Kopieren der Graphiken ist im Allgemeinen nicht erlaubt. Motivation (1) General Purpose Computing on

Mehr

> High-Level Programmierung heterogener paralleler Systeme

> High-Level Programmierung heterogener paralleler Systeme > High-Level Programmierung heterogener paralleler Systeme Projektseminar im SoSe 2012 Prof. Sergei Gorlatch, Michel Steuwer, Tim Humernbrum AG Parallele und Verteilte Systeme, Westfälische Wilhelms-Universität

Mehr

Shared-Memory Programmiermodelle

Shared-Memory Programmiermodelle Shared-Memory Programmiermodelle mehrere, unabhängige Programmsegmente greifen direkt auf gemeinsame Variablen ( shared variables ) zu Prozeßmodell gemäß fork/join Prinzip, z.b. in Unix: fork: Erzeugung

Mehr

Viktor Styrbul. Inhaltverzeichnis:

Viktor Styrbul. Inhaltverzeichnis: Viktor Styrbul In dieser Ausarbeitung geht es um die Programmierschnittstelle OpenMP. Es wird an ihre Eigenschaften und ihre Merkmalle eingegangen. Es werden existierende Kernelemente aufgezählt und Ausführungsmodell

Mehr

Grundlagen zu MPI. Martin Lanser Mathematisches Institut Universität zu Köln. October 24, 2017

Grundlagen zu MPI. Martin Lanser Mathematisches Institut Universität zu Köln. October 24, 2017 Grundlagen zu MPI Martin Lanser Mathematisches Institut Universität zu Köln October 24, 2017 Überblick Einige Grundlagen Punkt-zu-Punkt Kommunikation Globale Kommunikation Kommunikation plus Berechnung

Mehr

Masterpraktikum Scientific Computing

Masterpraktikum Scientific Computing Masterpraktikum Scientific Computing High-Performance Computing Thomas Auckenthaler Wolfgang Eckhardt Technische Universität München, Germany Outline Entwicklung General Purpose GPU Programming (GPGPU)

Mehr

Programmiertechnik. Teil 4. C++ Funktionen: Prototypen Overloading Parameter. C++ Funktionen: Eigenschaften

Programmiertechnik. Teil 4. C++ Funktionen: Prototypen Overloading Parameter. C++ Funktionen: Eigenschaften Programmiertechnik Teil 4 C++ Funktionen: Prototypen Overloading Parameter C++ Funktionen: Eigenschaften Funktionen (Unterprogramme, Prozeduren) fassen Folgen von Anweisungen zusammen, die immer wieder

Mehr