Computergrundlagen Moderne Rechnerarchitekturen

Ähnliche Dokumente
Computergrundlagen Moderne Rechnerarchitekturen

Multi- und Many-Core

Einige Grundlagen zu OpenMP

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

Das Message Passing Paradigma (1)

2 Rechnerarchitekturen

Evaluation. Einleitung. Implementierung Integration. Zusammenfassung Ausblick

Trend der letzten Jahre in der Parallelrechentechnik

Computational Biology: Bioelektromagnetismus und Biomechanik

Mehrprozessorarchitekturen

Homogene Multi-Core-Prozessor-Architekturen

Exkurs: Paralleles Rechnen

Parallel Programming: Message-Passing-Interface

Parallel Processing in a Nutshell OpenMP & MPI kurz vorgestellt

CUDA. Jürgen Pröll. Multi-Core Architectures and Programming. Friedrich-Alexander-Universität Erlangen-Nürnberg Jürgen Pröll 1

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

Computergrundlagen Programmieren in C

Paralleles Rechnen: MPI

Kurzübersicht über die wichtigsten MPI-Befehle

Beispiel für einen IPC-Server, der seinen Dienst über den Global Name Service im Netzwerk bekannt gibt. Header-Dateien einbinden

Praktikum: Paralleles Programmieren für Geowissenschaftler

Computergrundlagen Geschichte des Computers

Modelle der Parallelverarbeitung

OpenMP am Beispiel der Matrizenmultiplikation

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

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

Beispielvortrag: HPCG auf Intel Haswell-EP

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

ModProg 15-16, Vorl. 13

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

Computergrundlagen Geschichte des Computers

Die Sandy-Bridge Architektur

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

Multicore Parallelismus! in modernen CPUs

Multi- und Many-Core

Computational Engineering I

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

Multi-threaded Programming with Cilk

VIII PARALELLES UND OBJEKTORIENTIERTES PROGRAMMIEREN

Hochleistungsrechnen auf dem PC

Praktikum: Paralleles Programmieren für Geowissenschaftler

4.4. MPI Message Passing Interface

Architektur paralleler Plattformen

P-Square Office Crow J1900/4/ 500

Compute Unified Device Architecture CUDA

IT-Infrastruktur, WS 2014/15, Hans-Georg Eßer

Rechnerstrukturen. 6. System. Systemebene. Rechnerstrukturen Wintersemester 2002/03. (c) Peter Sturm, Universität Trier 1. Prozessor.

Klausur Betriebssysteme

Message Passing Interface: MPI

Konzepte und Methoden der Systemsoftware. Aufgabe 1: Polling vs Interrupts. SoSe bis P

Cache-Kohärenz und -Konsistenz. Betreuer: Prof. Brüning Veton Kajtazi Mat.-Nr.: Universität Heidelberg

Projektseminar Parallele Programmierung

Viel Erfolg bei der Bearbeitung der Aufgaben!

Probeklausur Name: (c)

Softwaretechnik 1 Übung 5

C-Programmierkurs Mathematik

Anleitung für zwei C++ - Openmp - Beispiele auf der NWZSuperdome

Technische Grundlagen der Informatik 2 SS Einleitung. R. Hoffmann FG Rechnerarchitektur Technische Universität Darmstadt E-1

Datenblatt: TERRA PC-BUSINESS 5000 GREENLINE 539,00. Bestseller Core i5 PC. Zusätzliche Artikelbilder IT. MADE IN GERMANY

Programmieren in C. Felder, Schleifen und Fließkommaarithmetik. Prof. Dr. Nikolaus Wulff

step Electronic GmbH

Beschreiben Sie die Eigenschaften der verschiedenen Rechnertypen an Hand:

Parallele Programmierung mit OpenMP

Neue Dual-CPU Server mit Intel Xeon Scalable Performance (Codename Purley/Skylake-SP)

Architektur und Organisation von Rechnersystemen

Weitere Verbesserungen

Programmieren in C. Eine Einführung in die Programmiersprache C. Prof. Dr. Nikolaus Wulff

Einführung. GPU-Versuch. Andreas Schäfer Friedrich-Alexander-Universität Erlangen-Nürnberg

1. Einführung in OpenMP

Georg Hager Regionales Rechenzentrum Erlangen (RRZE)

High Performance Computing

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

Klausur zu High Performance Computing 7. Februar 2014

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

Shared-Memory Programmiermodelle

Hochleistungsrechnen mit Windows Verifikations- und Analyseprogramme Christian Terboven Rechen- und Kommunikationszentrum RWTH Aachen

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

4. Parallelprogrammierung

Produkt Spezifikation. Shuttle X-Series Barebone. Smarter Budget-Einstiegsrechner. Besondere Merkmale.

Programmieren in C. Funktionen mit Zeigern und Adressen. Prof. Dr. Nikolaus Wulff

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

Projektseminar Parallele Programmierung

Parallele Programmierung mit OpenMP

MSDN Webcast: Parallelprogrammierung mit der Task Parallel Library für.net (Teil 1) Presenter: Bernd Marquardt

Organisatorisches. Übungsleiter: Karsten Otto Homepage: Aufgaben

Praktikum Rechnerarchitektur

Programmierbeispiele und Implementierung. Name: Michel Steuwer

Optimierungen der Lattice Boltzmann Methode auf x86-64 basierten Architekturen

RST-Labor WS06/07 GPGPU. General Purpose Computation On Graphics Processing Units. (Grafikkarten-Programmierung) Von: Marc Blunck

Computergrundlagen Programmieren in C

Zeichendarstellung. Zeichen sind Zahlen (in C) Zeichen und switch

Paralleles Programmieren mit MPI und OpenMP

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

High Performance Embedded Processors

Cell Broadband Engine & CellSs: ein Programmiermodel für den Cell Prozessor

Transkript:

Computergrundlagen Moderne Rechnerarchitekturen Axel Arnold Institut für Computerphysik Universität Stuttgart Wintersemester 2010/11

Aufbau eines modernen Computers DDR3- Speicher Prozessor Prozessor PEG Graphikkarte(n) weitere PCIe- Karten Northbridge Southbridge DDR3- Speicher SATA LAN SM-Bus HD-Audio USB A. Arnold Computergrundlagen 2/1

Aufbau eines modernen Prozessors Core 1 Mult. Core 2 Mult. Gemeinsamer Level 3-Cache Memory Controller I/O Controller A. Arnold Computergrundlagen 3/1

Befehlsverarbeitung Pipelines Core 1 Core 2 Gemeinsamer Level 3-Cache Memory Controller Mult. Mult. I/O Controller Befehl 3 2 1 0 Taktzyklus Während der erste Befehl dekodiert wird, kann der nächste bereits geladen werden Analog in den weiteren Stufen bis zu den Funktionseinheiten Intel Nehalem: 16-stufige Pipeline, AMD Barcelona: 12-stufig Problem: falsche Sprungvorhersage alle angefangenen Befehle verwerfen (Pipeline stall) A. Arnold Computergrundlagen 4/1

ALUs, FPUs und Co. wo gearbeitet wird Core 1 Core 2 Gemeinsamer Level 3-Cache Memory Controller Mult. Mult. I/O Controller Funktionseinheiten Es gibt mehrere Funktionseinheiten (Nehalem: 9, Barcelona: 6) Manche Aufgaben können von mehreren übernommen werden, z.b. Ganzzahlrechnungen Dadurch können Befehle gleichzeitig bearbeitet werden Simultanes Multithreading (Hyperthreading): Zwei Kerne teilen sich dieselben Funktionseinheiten bessere Auslastung A. Arnold Computergrundlagen 4/1

Speicherpfad Caches Core 1 Core 2 Gemeinsamer Level 3-Cache Memory Controller Mult. Mult. I/O Controller Hauptspeicher (4GB) Level-3 Cache (6MB) s (2x 256kB) Level-1 Caches (4x 32kB) Taktrate 3GHz 1 Befehl alle 0.33ns Speicher liefert im günstigsten Fall alle 10ns neue Daten Caches sind kleiner, aber dafür schneller Daten können mehrmals aus dem Cache geladen werden Prozessor muss nicht warten, bis Daten zurückgeschrieben Daten können im Voraus geladen werden Cache lädt ganze Blöcke (Cachelines) von derzeit 64 Byte A. Arnold Computergrundlagen 4/1

Speicherpfad Caches Core 1 Core 2 Gemeinsamer Level 3-Cache Memory Controller Mult. Mult. I/O Controller Hauptspeicher (4GB) Level-3 Cache (6MB) s (2x 256kB) Level-1 Caches (4x 32kB) Caching beim Schreiben von Programmen berücksichtigen Einmal geladene Werte möglichst oft wiederverwenden, da diese bereits im Cache liegen Möglichst benachbarte Werte lesen und schreiben Keine Schleifen, die durch den Speicher springen Ideal sind Schleifen, die den Speicher linear abarbeiten Beispiel: Matrizen möglichst zeilenweise bearbeiten A. Arnold Computergrundlagen 4/1

Multicore Core 1 Core 2 Mult. Mult. Gemeinsamer Level 3-Cache Memory Controller I/O Controller Alle modernen Prozessoren besitzen mehrere Kerne (Cores) Dazu kommen virtuelle Kerne (Simultanes Multithreading) Einfache Python- oder C-Programme nutzen nur einen Kern Mehrkernsystem erforden neue Algorithmen Programmierung z.b. mit OpenMP A. Arnold Computergrundlagen 4/1

OpenMP OMP parallel seriell OMP parallel seriell OpenMP: bequeme Programmierung mit mehreren Kernen In parallelen Regionen arbeiten alle Kerne des Prozessors das Programm läuft in mehreren Threads Alle Kerne führen parallel denselben Code aus Variablen können sich aber unterscheiden Beispiel: gleichzeitig mehrere Teile eines Arrays verarbeiten Core 1 Core 2 Core 3 Core 4 A. Arnold Computergrundlagen 5/1

OpenMP Beispiel #include <stdio.h> #include <omp.h> int main() { #pragma omp parallel printf("thread %d\n", omp_get_thread_num()); printf("fertig\n"); return 0; } Benötigt Headerdatei omp.h und Compilerflag -fopenmp (gcc) #pragma omp parallel leitet eine parallele Region ein Die parallele Region endet mit dem Block oder Befehl Im Beispiel: thread x wird so oft ausgegeben, wie Kerne vorhanden sind fertig wird nur einmal ausgegeben A. Arnold Computergrundlagen 6/1

OpenMP parallel for float a[100], b[100], result = 0; // parallele Initialisierung der beiden Vektoren #pragma omp parallel for for (int i = 0; i < 100; ++i) a[i] = i; b[i] = 100 i; // paralleles Skalarprodukt #pragma omp parallel for reduction(+:result) for (int i = 0; i < 100; i++) result = result + (a[i] b[i]); #pragma omp parallel for lässt OpenMP die folgende for-schleife automatisch parallelisieren reduction(+:var) bedeutet, dass die Variable var über alle Threads aufsummiert wird man kann die Verteilung auf die Threads auch manuell über schedule beeinflussen A. Arnold Computergrundlagen 7/1

MPI JUGENE, Jülich: 72 Racks 1024 Nodes 4 Kerne = 294912 Kerne Supercomputer verbinden viele Computer (Nodes) mit mehreren Prozessoren und Kernen über schnelle Netzwerke 0 1 2 Dabei ist der Speicher nur lokal von den Knoten ansprechbar OpenMP funktioniert so nicht Hier wird das Message Passing Interface (MPI) benutzt Erfordert wiederum andere Algorithmen als OpenMP 3 A. Arnold Computergrundlagen 8/1

MPI Beispiel #include <mpi.h> #include <stdio.h> int main(int argc, char argv) { int this_node; MPI_Init(&argc,&argv); MPI_Comm_rank(MPI_COMM_WORLD, &this_node); printf("thread %d\n", this_node); if (this_node == 0) printf("fertig\n"); MPI_Finalize(); return 0; } Bei MPI starten alle Threads wie ein normales Programm Soll Code seriell ausgeführt werden, müssen alle anderen Threads aktiv warten A. Arnold Computergrundlagen 9/1

MPI send/receive MPI_Status status; int empfangen[3], senden[3]; if ((this_node % 2) == runde) { MPI_Recv(empfangen, 3, MPI_INT, (this_node 1) % n_nodes, 123, MPI_COMM_WORLD, &status); } else { MPI_Send(senden, 3, MPI_INT, (this_node+1) % n_nodes, 123, MPI_COMM_WORLD); } Nachrichten sind Daten, die an andere Knoten geschickt werden Der Programmierer muss dafür sorgen, dass die Knoten wissen, wer wann wieviel an sie sendet Runde 1 Node 0 Node 1 Node 2 Node 3 Runde 2 A. Arnold Computergrundlagen 10/1