High Performance Computing: Teil 1 SS 2013
|
|
- Klaudia Dittmar
- vor 5 Jahren
- Abrufe
Transkript
1 High Performance Computing: Teil 1 SS 2013 Andreas F. Borchert Universität Ulm 16. April 2013
2 Syllabus 2 Inhalte: Teil 1: Architekturen von Parallelrechnern, Techniken und Schnittstellen zur Parallelisierung (Threads, OpenMP, MPI und CUDA) Teil 2: Parallele numerische Verfahren für lineare Gleichungssysteme, Gebietszerlegung, Graph-Partitionierung, parallele Vorkonditionierer Teil 3: Paralleles Mehrgitter-Verfahren, symmetrische Eigenwertprobleme
3 Organisation 3 Die Vorlesung wird von Prof. Funken, Prof. Urban und mir bestritten. Es stehen uns 14 Vorlesungstage in diesem Semester zur Verfügung, die sich wie folgt aufteilen: Teil 1: 5 Vorlesungen (Borchert) Teil 2: 6 Vorlesungen (Funken) Teil 3: 3 Vorlesungen (Urban) Präsentationen: Anfang August (32. Woche) Die Übungen und das Praktikum werden von Markus Bantle und Kristina Steih betreut.
4 Prüfungsmodalitäten 4 Für die Prüfung ist die erfolgreiche Teilnahme an den Übungen und Praktika und ein Abschluss-Projekt erforderlich, über das vorgetragen wird. Einzelheiten dazu folgen noch sommersemester-2013/ vorlesung-high-performance-computing.html
5 Architektur von Parallelrechnern 5 Der entwickelte Parallelrechner ILLIAC 4 (zunächst University of Illinois, dann NASA) symbolisiert mit seinen 31 Millionen US-Dollar Entwicklungskosten den Willen, keinen Aufwand zu scheuen, wenn es um bessere Architekturen für wissenschaftliches Rechnen geht. Aufnahme von Steve Jurvetson from Menlo Park, USA, CC-AT-2.0, Wikimedia Commons
6 Warum ist die Architektur relevant? 6 Es gehört zu den Errungenschaften in der Informatik, dass Software-Anwendungen weitgehend plattform-unabhängig entwickelt werden können. Dies wird erreicht durch geeignete Programmiersprachen, Bibliotheken und Standards, die genügend weit von der konkreten Maschine und dem Betriebssystem abstrahieren. Leider lässt sich dieser Erfolg nicht ohne weiteres in den Bereich des High Performance Computing übertragen. Entsprechend muss die Gestaltung eines parallelen Algorithmus und die Wahl und Konfiguration einer geeigneten zugrundeliegenden Architektur Hand in Hand gehen. Ziel ist nicht mehr eine höchstmögliche Portabilität, sondern ein möglichst hoher Grad an Effizienz bei der Ausführung auf einer ausgewählten Plattform.
7 Kosten der Parallelisierung 7 Eine Anwendung wird durch eine Parallelisierung nicht in jedem Fall schneller. Es entstehen Kosten, die sowohl von der verwendeten Architektur als auch dem zum Einsatz kommenden Algorithmus abhängen. Dazu gehören: Konfiguration Kommunikation Synchronisierung Terminierung Interessant ist auch immer die Frage, wie die Kosten skalieren, wenn der Umfang der zu lösenden Aufgabe und die zur Verfügung stehenden Ressourcen wachsen.
8 Pipelining 8 Mit Pipelining werden Techniken bezeichnet, die eine sequentielle Abarbeitung beschleunigen, indem einzelne Arbeitsschritte wie beim Fließband parallelisiert werden. Im einfachsten Fall werden hintereinander im Speicher liegende Instruktionen sequentiell ausgeführt. Das kann als Instruktions-Strom organisiert werden, bei der die folgenden Instruktionen bereits aus dem Speicher geladen und dekodiert werden, während die aktuelle Instruktion noch ausgeführt wird. Bedingte Sprünge sind das Hauptproblem des Pipelining. Flynn hatte 1972 die Idee, neben Instruktionsströmen auch Datenströme in die Betrachtung paralleler Architekturen einzubeziehen.
9 Flynns Aufteilung der Parallelrechner 9 Flynn schlug 1972 folgende Klassifizierung vor in Abhängigkeit der Zahl der Instruktions- und Datenströme: Instruktionen Daten Bezeichnung 1 1 SISD (Single Instruction Single Data) 1 > 1 SIMD (Single Instruction Multiple Data) > 1 1 MISD (Multiple Instruction Single Data) > 1 > 1 MIMD (Multiple Instruction Multiple Data) SISD entspricht der klassischen von-neumann-maschine, SIMD sind z.b. vektorisierte Rechner, MISD wurde wohl nie umgesetzt und MIMD entspricht z.b. Mehrprozessormaschinen oder Clustern. Als Klassifizierungsschema ist dies jedoch zu grob.
10 SIMD-Maschinen 10 Hier gibt es zwei Varianten: Array-Prozessor: Eine Vielzahl von Prozessoren steht zur Verfügung mit zugehörigem Speicher, die diesen in einer Initialisierungsphase laden. Dann werden an alle Prozessoren Anweisungen verteilt, die jeder Prozessor auf seinen Daten ausführt. Die Idee geht auf S. H. Unger 1958 zurück und wurde mit dem ILLIAC IV zum ersten Mal umgesetzt. Die heutigen GPUs übernehmen teilweise diesen Ansatz. Vektor-Prozessor: Hier steht nur ein Prozessor zur Verfügung, aber dieser ist dank dem Pipelining in der Lage, pro Taktzyklus eine Operation auf einem Vektor umzusetzen. Diese Technik wurde zuerst von der Cray-1 im Jahr 1974 umgesetzt und auch bei späteren Cray-Modellen verfolgt. Die MMX- und SSE-Instruktionen des Pentium 4 setzen ebenfalls dieses Modell um.
11 MIMD-Maschinen 11 Hier wird unterschieden, ob die Kommunikation über gemeinsamen Speicher oder ein gemeinsames Netzwerk erfolgt: Multiprozessor-Systeme (MP-Systeme) erlauben jedem Prozessor den Zugriff auf den gesamten zur Verfügung stehenden Speicher. Der Speicher kann auf gleichförmige Weise allen Prozessoren zur Verfügung stehen (UMA = uniform memory access) oder auf die einzelnen Prozessoren oder Gruppen davon verteilt sein (NUMA = non-uniform memory access). Multicomputer sind über spezielle Topologien vernetzte Rechnersysteme, bei denen die einzelnen Komponenten ihren eigenen Speicher haben. Üblich ist hier der Zusammenschluss von Standardkomponenten (COW = cluster of workstations) oder spezialisierter Architekturen und Bauweisen im großen Maßstab (MPP = massive parallel processors).
12 Architekturen nach Tanenbaum 12 Architekturen SISD SIMD MISD MIMD Vektorprozessor Arrayprozessor MP- Systeme Multicomputer UMA COMA NUMA MPP COW Bus Switched CC-NUMA NC-NUMA Grid Hypercube { { Shared Memory Message Passing
13 Unsere Übungsmaschinen 13 Die Theseus gehört mit vier Prozessoren des Typs UltraSPARC IV+ mit jeweils zwei Kernen zu der Familie der Multiprozessorsysteme (MP-Systeme). Da der Speicher zentral liegt und alle Prozessoren auf gleiche Weise zugreifen, gehört die Theseus zur Klasse der UMA-Architekturen (Uniform Memory Access) und dort zu den Systemen, die Bus-basiert Cache-Kohärenz herstellen (dazu später mehr). Die Thales hat zwei Xeon-5650-Prozessoren mit jeweils 6 Kernen, die jeweils zwei Threads unterstützen. Wie bei der Theseus handelt es sich um eine UMA-Architektur, die ebenfalls Bus-basiert Cache-Kohärenz herstellt. Bei der Pacioli handelt es sich um ein COW (cluster of workstations), das aus 36 Knoten besteht. Den einzelnen Knoten stehen jeweils zwei AMD-Opteron-Prozessoren zur Verfügung, eigener Speicher und eigener Plattenplatz. Die Knoten sind untereinander durch ein übliches Netzwerk (GbE) und zusätzlich durch ein Hochgeschwindigkeitsnetzwerk (Infiniband) verbunden.
14 Unsere Übungsmaschinen 14 Die Hochwanner ist eine Intel-Dualcore-Maschine (2,80 GHz) mit einer Nvidia Quadro 600 Grafikkarte. Die Grafikkarte hat 1 GB Speicher, zwei Multiprozessoren und insgesamt 96 Recheneinheiten (SPs = stream processors). Die Grafikkarte ist eine SIMD-Architektur, die sowohl Elemente der Array- als auch der Vektorrechner vereinigt und auch den Bau von Pipelines ermöglicht.
15 Threads 15 Die Schnittstelle für Threads ist eine Abstraktion des Betriebssystems (oder einer virtuellen Maschine), die es ermöglicht, mehrere Ausführungsfäden, jeweils mit eigenem Stack und PC ausgestattet, in einem gemeinsamen Adressraum arbeiten zu lassen. Der Einsatz lohnt sich insbesondere auf Mehrprozessormaschinen mit gemeinsamen Speicher. Vielfach wird die Fehleranfälligkeit kritisiert wie etwa von C. A. R. Hoare in Communicating Sequential Processes: In its full generality, multithreading is an incredibly complex and error-prone technique, not to be recommended in any but the smallest programs.
16 Threads als Abstraktion 16 Threads stehen als Abstraktion eines POSIX-konformen Betriebssystems zur Verfügung unabhängig von der tatsächlichen Ausstattung der Maschine. Auf einem Einprozessor-System wird mit Threads nur Nebenläufigkeit erreicht, indem die einzelnen Threads jeweils für kurze Zeitscheiben ausgeführt werden, bevor das Betriebssystem einen Wechsel zu einem anderen Thread einleitet (Kontextwechsel). Auf einem MP-System können je nach der Ausstattung auch mehrere Prozessoren zu einem Zeitpunkt einem Prozess zugehordnet werden, so dass dann die Threads echt parallel laufen.
17 Vor- und Nachteile von Threads 17 Dass Threads uneingeschränkt auf den gemeinsamen Speicher zugreifen können, ist zugleich ihr größter Vorteil als auch ihre größte Schwäche. Vorteilhaft ist die effiziente Kommunikation, da die Daten hierfür nicht kopiert und übertragen werden müssen, wie es sonst beim Austausch von Nachrichten notwendig wäre. Nachteilhaft ist die Fehleranfälligkeit, da die Speicherzugriffe synchronisiert werden müssen und die Korrektheit der Synchronisierung nicht so einfach sichergestellt werden kann, da dies sämtliche Speicherzugriffe betrifft. So müssen alle Funktionen oder Methoden, die auf Datenstrukturen zugreifen, damit rechnen, konkurrierend aufgerufen zu werden, und entsprechend darauf vorbereitet sein.
18 POSIX Threads 18 Spezifikation der Open Group: Unterstützt das Erzeugen von Threads und das Warten auf ihr Ende, den gegenseitigen Ausschluss (notwendig, um auf gemeinsame Datenstrukturen zuzugreifen), Bedingungsvariablen (condition variables), die einem Prozess signalisieren können, dass sich eine Bedingung erfüllt hat, auf die gewartet wurde, Lese- und Schreibsperren, um parallele Lese- und Schreibzugriffe auf gemeinsame Datenstrukturen zu synchronisieren. Freie Implementierungen der Schnittstelle für C: GNU Portable Threads: Native POSIX Thread Library:
19 C++ and POSIX-Threads 19 Seit dem aktuellen C++-Standard ISO (C++11) werden POSIX-Threads direkt unterstützt. Ältere C++-Übersetzer unterstützen dies noch nicht, aber die Boost-Schnittstelle für Threads ist recht ähnlich und kann bei älteren Systemen verwendet werden. (Alternativ kann auch die C-Schnittstelle in C++ verwendet werden, was aber recht umständlich ist.) Die folgende Einführung bezieht sich auf C++11. Bei g++ sollte also die Option -std=gnu++11 verwendet werden.
20 Threads als Funktionsobjekte 20 Die ausführende Komponente eines Threads wird in C++ durch ein sogenanntes Funktionsobjekt repräsentiert. In C++ sind alle Objekte Funktionsobjekte, die den parameterlosen Funktionsoperator unterstützen. Das könnte im einfachsten Falle eine ganz normale parameterlose Funktion sein: void f() { // do something } Das ist jedoch nicht sehr hilfreich, da wegen der fehlenden Parametrisierung unklar ist, welche Teilaufgabe die Funktion für einen konkreten Thread erfüllen soll.
21 Klassen für Funktionsobjekte 21 class Thread { public: Thread( /* parameters */ ); void operator()() { // do something in dependence of the parameters } private: // parameters of this thread }; Eine Klasse für Funktionsobjekte muss den Funktionsoperator unterstützen, d.h. void operator()(). Im privaten Bereich der Thread-Klasse können nun alle Parameter untergebracht werden, die für die Ausführung eines Threads benötigt werden. Der Konstruktor erhält die Parameter und kopiert diese in den privaten Bereich. Nun kann die parameterlose Funktion problemlos auf ihre Parameter zugreifen.
22 Repräsentierung eines Threads 22 class Thread { public: Thread(int i) : id(i) {}; void operator()() { cout << "thread " << id << " is operating" << endl; } }; private: const int id; fork-and-join.cpp In diesem einfachen Beispiel wird nur ein einziger Parameter für den einzelnen Thread verwendet: id (Ein Parameter, der die Identität des Threads festlegt, genügt in vielen Fällen bereits.) Für Demonstrationszwecke gibt der Funktionsoperator nur seine eigene id aus. So ein Funktionsobjekt kann auch ohne Threads erzeugt und benutzt werden: Thread t(7); t();
23 Threads erzeugen und auf das Ende warten 23 #include <iostream> #include <thread> using namespace std; // class Thread... int main() { // fork off some threads thread t1(thread(1)); thread t2(thread(2)); thread t3(thread(3)); thread t4(thread(4)); // and join them cout << "Joining..." << endl; t1.join(); t2.join(); t3.join(); t4.join(); cout << "Done!" << endl; } fork-and-join.cpp Objekte des Typs std::thread (aus #include <thread>) können mit einem Funktionsobjekt initialisiert werden. Die Threads werden sofort aktiv. Mit der join-methode wird auf die Beendigung des jeweiligen Threads gewartet.
24 Verschiebe-Semantik 24 // fork off some threads thread threads[10]; for (int i = 0; i < 10; ++i) { threads[i] = thread(thread(i)); } fork-and-join2.cpp Wenn Threads in Datenstrukturen unterzubringen sind (etwa Arrays oder beliebigen Containern), dann können sie nicht zeitgleich mit einem Funktionsobjekt initialisiert werden. In diesem Falle existieren sie zunächst nur als leere Hülle. Wenn Thread-Objekte einander zugewiesen werden, dann wird ein Thread nicht dupliziert, sondern die Referenz auf den eigentlichen Thread wandert von einem Thread-Objekt zu einem anderen (Verschiebe-Semantik). Im Anschluss an die Zuweisung hat die linke Seite den Verweis auf den Thread, während die rechte Seite dann nur noch eine leere Hülle ist.
25 Verschiebe-Semantik 25 // and join them cout << "Joining..." << endl; for (int i = 0; i < 10; ++i) { threads[i].join(); } fork-and-join2.cpp Das vereinfacht dann auch das Zusammenführen all der Threads mit der join-methode.
26 Thread-basierte numerische Integration 26 double simpson(double (*f)(double), double a, double b, int n) { assert(n > 0 && a <= b); double value = f(a)/2 + f(b)/2; double xleft; double x = a; for (int i = 1; i < n; ++i) { xleft = x; x = a + i * (b - a) / n; value += f(x) + 2 * f((xleft + x)/2); } value += 2 * f((x + b)/2); value *= (b - a) / n / 3; return value; } simpson.cpp simpson setzt die Simpsonregel für das in n gleichlange Teilintervalle aufgeteilte Intervall [a, b] für die Funktion f um: S(f, a, b, n) = h 3 ( 1 2 f (x n 1 0) + f (x k ) + 2 k=1 mit h = b a n und x k = a + k h. n k=1 f ( x k 1 + x k ) f (x n) )
27 Verpackung in ein Funktionsobjekt 27 class SimpsonThread { public: SimpsonThread(double (*_f)(double), double _a, double _b, int _n, double* resultp) : f(_f), a(_a), b(_b), n(_n), rp(resultp) { } void operator()() { *rp = simpson(f, a, b, n); } private: double (*f)(double); double a, b; int n; double* rp; }; simpson.cpp Jedem Objekt werden nicht nur die Parameter der simpson-funktion übergeben, sondern auch noch einen Zeiger auf die Variable, wo das Ergebnis abzuspeichern ist.
28 Simpson-Verfahren über mehrere Threads 28 double mt_simpson(double (*f)(double), double a, double b, int n, int nofthreads) { // divide the given interval into nofthreads partitions assert(n > 0 && a <= b && nofthreads > 0); int nofintervals = n / nofthreads; int remainder = n % nofthreads; int interval = 0; } thread threads[nofthreads]; double results[nofthreads]; // fork & join & collect results... mt_simpson ist wie die Funktion simpson aufzurufen nur ein Parameter nofthreads ist hinzugekommen, der die Zahl der zur Berechnung zu verwendenden Threads spezifiziert. simpson.cpp Dann muss die Gesamtaufgabe entsprechend in Teilaufgaben zerlegt werden.
29 Erzeugen der einzelnen Threads 29 double x = a; for (int i = 0; i < nofthreads; ++i) { int intervals = nofintervals; if (i < remainder) ++intervals; interval += intervals; double xleft = x; x = a + interval * (b - a) / n; threads[i] = thread(simpsonthread(f, xleft, x, intervals, &results[i])); } Für jedes Teilproblem wird ein entsprechendes Funktionsobjekt erzeugt, womit dann ein Thread erzeugt wird. simpson.cpp
30 Einsammeln und Aggregieren der Ergebnisse 30 double sum = 0; for (int i = 0; i < nofthreads; ++i) { threads[i].join(); sum += results[i]; } return sum; Wie gehabt erfolgt die Synchronisierung mit der join-methode. simpson.cpp Danach kann das entsprechende Ergebnis abgeholt und aggregiert werden.
31 Kommandozeilenverarbeitung 31 cmdname = *argv++; --argc; if (argc > 0) { istringstream arg(*argv++); --argc; if (!(arg >> N) N <= 0) usage(); } if (argc > 0) { istringstream arg(*argv++); --argc; if (!(arg >> nofthreads) nofthreads <= 0) usage(); } if (argc > 0) usage(); Es ist sinnvoll, die Zahl der zu startenden Threads als Kommandozeilenargument (oder alternativ über eine Umgebungsvariable) zu übergeben, da dieser Parameter von den gegebenen Rahmenbedingungen abhängt (Wahl der Maschine, zumutbare Belastung). simpson.cpp Zeichenketten können in C++ wie Dateien ausgelesen werden, wenn ein Objekt des Typs istringstream damit initialisiert wird. Das Einlesen erfolgt in C++ mit dem überladenen >>-Operator, der als linken Operanden einen Stream erwartet und als rechten eine Variable.
32 Berechung und Ausgabe 32 // double sum = simpson(f, a, b, N); double sum = mt_simpson(f, a, b, N, nofthreads); cout << setprecision(14) << sum << endl; cout << setprecision(14) << M_PI << endl; simpson.cpp Testen Sie Ihr Programm zuerst immer ohne Threads, indem die Funktion zur Lösung eines Teilproblems verwendet wird, um das Gesamtproblem unparallelisiert zu lösen. (Diese Variante ist hier auskommentiert.) cout ist in C++ die Standardausgabe, die mit dem <<-Operator auszugebende Werte erhält. setprecision(14) setzt die Zahl der auszugebenden Stellen auf 14. endl repräsentiert einen Zeilentrenner. Zum Vergleich wird hier M_PI ausgegeben, weil zum Testen f (x) = 4 1+x verwendet wurde, wofür 1 f (x)dx = 4 arctan(1) = π 2 0 gilt.
33 Richtig übersetzen 33 Grundsätzlich sollte bei solchen Anwendungen die höchstmöglichste Optimierungstufe gewählt werden. Wenn dies unterbleibt, erfolgen wesentlich mehr Speicherzugriffe als notwendig und die Parallelisierungsmöglichkeiten innerhalb einer CPU bleiben teilweise ungenutzt. Beim g++ (GNU-Compiler für C++) ist die Option -O3 anzugeben. Vorsicht: Bei hoher Optimierung und gleichzeitiger Verwendung gemeinsamer Speicherbereiche durch Threads muss ggf. von der Speicherklasse volatile konsequent Gebrauch gemacht werden, wenn sonst keine Synchronisierungsfunktionen verwendet werden.
34 Historisches zu Threads 34 Erste Ansätze zur Parallelisierung der Ausführung in Rechnern wurden erstaunlich früh vorgestellt. Die zuerst 1958 beschriebene Gamma-60-Maschine konnte mehrere Instruktionen entsprechend dem Fork-And-Join-Pattern parallel ausführen. Die Architektur eines MP-Systems in Verbindung mit dem Fork-And-Join-Pattern wurde wurde dann von Melvin E. Conway 1963 näher ausgeführt. Umgesetzt wurde dies danach u.a. von dem Berkeley Timesharing System in einer Form, die den heutigen Threads sehr nahekommt, wobei die damals noch als Prozesse bezeichnet wurden. Der erste Ansatz zur Synchronisierung jenseits des Fork-And-Join-Patterns erfolgte mit den Semaphoren durch Edsger W. Dijkstra, der gleichzeitig den Begriff der kooperierenden sequentiellen Prozesse prägte.
Architektur von Parallelrechnern 50
Architektur von Parallelrechnern 50 Rechenintensive parallele Anwendungen können nicht sinnvoll ohne Kenntnis der zugrundeliegenden Architektur erstellt werden. Deswegen ist die Wahl einer geeigneten Architektur
Architektur von Parallelrechnern 49
Architektur von Parallelrechnern 49 Rechenintensive parallele Anwendungen können nicht sinnvoll ohne Kenntnis der zugrundeliegenden Architektur erstellt werden. Deswegen ist die Wahl einer geeigneten Architektur
Die Ursprünge der Threads 66
Threads 65 Die Schnittstelle für Threads ist eine Abstraktion des Betriebssystems (oder einer virtuellen Maschine), die es ermöglicht, mehrere Ausführungsfäden, jeweils mit eigenem Stack und PC ausgestattet,
Architektur von Parallelrechnern 50
Architektur von Parallelrechnern 50 Rechenintensive parallele Anwendungen können nicht sinnvoll ohne Kenntnis der zugrundeliegenden Architektur erstellt werden. Deswegen ist die Wahl einer geeigneten Architektur
High Performance Computing: Teil 1 SS 2013
High Performance Computing: Teil 1 SS 2013 Andreas F. Borchert Universität Ulm 14. Mai 2013 Syllabus 2 Inhalte: Teil 1: Architekturen von Parallelrechnern, Techniken und Schnittstellen zur Parallelisierung
Kapitel 5. Parallelverarbeitung. Formen der Parallelität
Kapitel 5 Parallelverarbeitung é Formen der Parallelität é Klassifikation von parallelen Rechnerarchitekturen é Exkurs über Verbindungsstrukturen Bernd Becker Technische Informatik I Formen der Parallelität
Parallele Programmierung mit C++ SS 2015
Parallele Programmierung mit C++ SS 2015 Andreas F. Borchert Universität Ulm 2. Juli 2015 Syllabus 2 Inhalte: Einführung in die Prozessalgebra CSP Architekturen paralleler Systeme Parallelisierungstechniken:
Aufwand für Threads 124
Aufwand für Threads 124 #include #include #include #include thread-overhead.cpp int main() { unsigned int counter = 0; unsigned int nof_threads = 1
2 Rechnerarchitekturen
2 Rechnerarchitekturen Rechnerarchitekturen Flynns Klassifikation Flynnsche Klassifikation (Flynn sche Taxonomie) 1966 entwickelt, einfaches Modell, bis heute genutzt Beschränkung der Beschreibung auf
Parallelisierung der Vektoraddition 149
OpenMP 148 OpenMP ist ein seit 1997 bestehender Standard mit Pragma-basierten Spracherweiterungen zu Fortran, C und C++, die eine Parallelisierung auf MP-Systemen unterstützt. Pragmas sind Hinweise an
Systeme 1: Architektur
slide 1 Vorlesung Systeme 1: Architektur Prof. Dr. Ulrich Ultes-Nitsche Forschungsgruppe Departement für Informatik Universität Freiburg slide 2 Prüfung 18. Februar 2004 8h00-11h40 13h00-18h20 20 Minuten
Proseminar Rechnerarchitekturen. Parallelcomputer: Multiprozessorsysteme
wwwnet-texde Proseminar Rechnerarchitekturen Parallelcomputer: Multiprozessorsysteme Stefan Schumacher, , PGP Key http://wwwnet-texde/uni Id: mps-folientex,v
Architektur paralleler Plattformen
Architektur paralleler Plattformen Freie Universität Berlin Fachbereich Informatik Wintersemester 2012/2013 Proseminar Parallele Programmierung Mirco Semper, Marco Gester Datum: 31.10.12 Inhalt I. Überblick
Parallel Computing. Einsatzmöglichkeiten und Grenzen. Prof. Dr. Nikolaus Wulff
Parallel Computing Einsatzmöglichkeiten und Grenzen Prof. Dr. Nikolaus Wulff Parallel Architekturen Flynn'sche Klassifizierung: SISD: single Instruction, single Data Klassisches von-neumann sequentielles
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
Memory Models Frederik Zipp
Memory Models Frederik Zipp Seminar: Programmiersprachen für Parallele Programmierung (SS 2010) Fakultät für Informatik - IPD SNELTING LEHRSTUHL PROGRAMMIERPARADIGMEN 1
Computational Science: Techniken der Parallelisierung SS 2010
Computational Science: Techniken der Parallelisierung SS 2010 Andreas F. Borchert Universität Ulm 15. Juni 2010 Architektur von Parallelrechnern 2 Der 1965 1976 entwickelte Parallelrechner ILLIAC 4 (zunächst
Objektorientierte Programmierung mit C++ SS 2007
Objektorientierte Programmierung mit C++ SS 2007 Andreas F. Borchert Universität Ulm 5. Juni 2007 Polymorphismus #include Function.h class Function { public: virtual ~Function() {}; virtual std::string
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
Parallele Programmierung mit C++ SS 2011
Parallele Programmierung mit C++ SS 2011 Andreas F. Borchert Universität Ulm 30. März 2012 Syllabus 2 Inhalte: Einführung in die Prozessalgebra CSP Architekturen paralleler Systeme Parallelisierungstechniken:
MP-Systeme mit gemeinsamen Speicher 35
MP-Systeme mit gemeinsamen Speicher 35 CPU #1 CPU #2 CPU #3 CPU #4 physical memory Sofern gemeinsamer Speicher zur Verfügung steht, so bietet dies die effizienteste Kommunikationsbasis parallelisierter
Kapitel 1 Parallele Modelle Wie rechnet man parallel?
PRAM- PRAM- DAG- R UND R Coles und Kapitel 1 Wie rechnet man parallel? Vorlesung Theorie Paralleler und Verteilter Systeme vom 11. April 2008 der Das DAG- Das PRAM- Das werkmodell Institut für Theoretische
Übung zur Vorlesung Wissenschaftliches Rechnen Sommersemester 2012 Auffrischung zur Programmierung in C++, 2. Teil
MÜNSTER Übung zur Vorlesung Wissenschaftliches Rechnen Sommersemester 2012 Auffrischung zur Programmierung in C++ 2. Teil 18. April 2012 Organisatorisches MÜNSTER Übung zur Vorlesung Wissenschaftliches
Verteilte Betriebssysteme
Verteiltes System Eine Sammlung unabhängiger Rechner, die dem Benutzer den Eindruck vermitteln, es handle sich um ein einziges System. Verteiltes Betriebssystem Betriebssystem für verteilte Systeme Verwaltet
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
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
Polymorphismus 44. Function.hpp. #include <string>
Polymorphismus 44 #include Function.hpp class Function { public: virtual ~Function() {}; virtual const std::string& get_name() const = 0; virtual double execute(double x) const = 0; }; // class
Philosophen-Problem mit Threads 99
Philosophen-Problem mit Threads 99 int main() { constexpr unsigned int PHILOSOPHERS = 5; std::thread philosopher[philosophers]; std::mutex fork[philosophers]; for (int i = 0; i < PHILOSOPHERS; ++i) { philosopher[i]
Parallelrechner (1) Anwendungen: Simulation von komplexen physikalischen oder biochemischen Vorgängen Entwurfsunterstützung virtuelle Realität
Parallelrechner (1) Motivation: Bedarf für immer leistungsfähigere Rechner Leistungssteigerung eines einzelnen Rechners hat physikalische Grenzen: Geschwindigkeit von Materie Wärmeableitung Transistorgröße
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.
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
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
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
Polymorphismus 179. Function.h. #include <string>
Polymorphismus 179 #include Function.h class Function { public: virtual ~Function() {}; virtual std::string get_name() const = 0; virtual double execute(double x) const = 0; }; // class Function
2 Reproduktion oder Verwendung dieser Unterlage bedarf in jedem Fall der Zustimmung des Autors.
1 Definition Definition nach Tanenbaum/van Steen Ein Verteiltes System ist eine Ansammlung von unabhängigen Rechnern, die für seine enutzer wie ein einzelnes Computersystem aussieht. Verteilte Systeme
Programmierung und Angewandte Mathematik
Programmierung und Angewandte Mathematik C++ /Scilab Programmierung und Einführung in das Konzept der objektorientierten Anwendungen zu wissenschaftlichen Rechnens SS 2012 Inhalt Compiler/Editor Klassendeklaration
Informatik. Pointer (Dynamisch) Vorlesung. 17. Dezember 2018 SoSe 2018 FB Ing - SB Umwelttechnik und Dienstleistung - Informatik Thomas Hoch 1
Informatik Vorlesung 08 Pointer (Dynamisch) 17. Dezember 2018 SoSe 2018 FB Ing - SB Umwelttechnik und Dienstleistung - Informatik Thomas Hoch 1 Pointer (Zeiger) Dynam. Speicher Bisher: Speicherbedarf muss
MP-Systeme mit gemeinsamen Speicher 123
MP-Systeme mit gemeinsamen Speicher 123 CPU #1 CPU #2 CPU #3 CPU #4 physical memory Sofern gemeinsamer Speicher zur Verfügung steht, so bietet dies die effizienteste Kommunikationsbasis parallelisierter
C++ Teil 12. Sven Groß. 18. Jan Sven Groß (IGPM, RWTH Aachen) C++ Teil Jan / 11
C++ Teil 12 Sven Groß 18. Jan 2016 Sven Groß (IGPM, RWTH Aachen) C++ Teil 12 18. Jan 2016 1 / 11 Themen der letzten Vorlesung Wiederholung aller bisherigen Themen: Datentypen und Variablen Operatoren Kontrollstrukturen
Ein Verteiltes System ist eine Ansammlung von unabhängigen Rechnern, die für seine Benutzer wie ein einzelnes Computersystem aussieht.
Verteilte Systeme Verteilte etriebssysteme 2001-2004, F. Hauck, P. Schulthess, Vert. Sys., Univ. Ulm [2003w-VS--VS.fm, 2003-10-17 08.38] 1 1 Definition Definition nach Tanenbaum/van Steen Ein Verteiltes
CUDA. Jürgen Pröll. Multi-Core Architectures and Programming. Friedrich-Alexander-Universität Erlangen-Nürnberg Jürgen Pröll 1
CUDA Jürgen Pröll Multi-Core Architectures and Programming Jürgen Pröll 1 Image-Resize: sequentiell resize() mit bilinearer Interpolation leicht zu parallelisieren, da einzelne Punkte voneinander unabhängig
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
Intel 80x86 symmetrische Multiprozessorsysteme. Eine Präsentation im Rahmen des Seminars Parallele Rechnerarchitekturen von Bernhard Witte
Intel 80x86 symmetrische Multiprozessorsysteme Eine Präsentation im Rahmen des Seminars Parallele Rechnerarchitekturen von Bernhard Witte Gliederung I. Parallel Computing Einführung II.SMP Grundlagen III.Speicherzugriff
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
8. Referenzen und Zeiger
8. Referenzen und Zeiger Motivation Variable werden in C++ an speziellen Positionen im Speicher abgelegt. An jeder Position befindet sich 1 Byte. Sie sind durchnummeriert beginnend bei 0. Diese Positionen
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
Konzepte der Programmiersprachen
Konzepte der Programmiersprachen Sommersemester 2010 4. Übungsblatt Besprechung am 9. Juli 2010 http://www.iste.uni-stuttgart.de/ps/lehre/ss2010/v_konzepte/ Aufgabe 4.1: Klassen in C ++ Das folgende C
Computational Biology: Bioelektromagnetismus und Biomechanik
Computational Biology: Bioelektromagnetismus und Biomechanik Implementierung Gliederung Wiederholung: Biomechanik III Statische Elastomechanik Finite Elemente Diskretisierung Finite Differenzen Diskretisierung
Kapitel 13. Definition von Klassen. OOP Thomas Klinker 1
Kapitel 13 Definition von Klassen OOP Thomas Klinker 1 OOP Thomas Klinker 2 Datenabstraktion Der Mensch abstrahiert, um komplexe Sachverhalte darzustellen. Dinge und Vorgänge werden auf das wesentliche
Algorithmen und Datenstrukturen
Algorithmen und Datenstrukturen Dynamische Datenobjekte Pointer/Zeiger, Verkettete Liste Eigene Typdefinitionen 1 Zeigeroperatoren & und * Ein Zeiger ist die Speicheradresse irgendeines Objektes. Eine
High Performance Computing Blatt 7
Dr. Andreas Borchert Institut für Numerische Mathematik Prof. Dr. Stefan Funken Universität Ulm Prof. Dr. Karsten Urban Sommersemester 03 Markus Bantle, Kristina Steih High Performance Computing Blatt
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
Unterlagen. CPP-Uebungen-08/
Unterlagen http://projects.eml.org/bcb/people/ralph/ CPP-Uebungen-08/ http://www.katjawegner.de/lectures.html Kommentare in C++ #include /* Dies ist ein langer Kommentar, der über zwei Zeilen
2. Der ParaNut-Prozessor "Parallel and more than just another CPU core"
2. Der ParaNut-Prozessor "Parallel and more than just another CPU core" Neuer, konfigurierbarer Prozessor Parallelität auf Daten- (SIMD) und Thread-Ebene Hohe Skalierbarkeit mit einer Architektur neues
Hydroinformatik I: Referenzen und Zeiger
Hydroinformatik I: Referenzen und Zeiger Prof. Dr.-Ing. habil. Olaf Kolditz 1 Helmholtz Centre for Environmental Research UFZ, Leipzig 2 Technische Universität Dresden TUD, Dresden Dresden, 06. Januar
Funktionen Häufig müssen bestimmte Operationen in einem Programm mehrmals ausgeführt werden. Schlechte Lösung: Gute Lösung:
Funktionen Häufig müssen bestimmte Operationen in einem Programm mehrmals ausgeführt werden. Schlechte Lösung: Der Sourcecode wird an den entsprechenden Stellen im Programm wiederholt Programm wird lang
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
C++ Notnagel. Ziel, Inhalt. Programmieren in C++
C++ Notnagel Ziel, Inhalt Ich versuche in diesem Dokument noch einmal die Dinge zu erwähnen, die mir als absolut notwendig für den C++ Unterricht und die Prüfungen erscheinen. C++ Notnagel 1 Ziel, Inhalt
Einführung in die Programmierung
: Inhalt Einführung in die Programmierung Wintersemester 2009/0 : Technik vs. Iteration Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund 2 Definition (einfache,
Einführung in die Programmierung Wintersemester 2017/18
Einführung in die Programmierung Wintersemester 2017/18 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund : Rekursion Inhalt Rekursion: Technik Rekursion
Einführung in die Programmierung Wintersemester 2010/11
Einführung in die Programmierung Wintersemester 2010/11 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund : Rekursion Inhalt Rekursion: Technik Rekursion
Beispielvortrag: HPCG auf Intel Haswell-EP
Beispielvortrag: HPCG auf Intel Haswell-EP Johannes Hofmann 1 Seminarvortrag Architekturen von Multi- und Vielkern-Prozessoren Erlangen, 19.4.2016 1 Computer Architecture, University Erlangen-Nuremberg
Algorithmen und Datenstrukturen
Algorithmen und Datenstrukturen Dipl. Inform. Andreas Wilkens aw@awilkens.com Überblick Grundlagen Definitionen Eigene Entwicklungen Datenstrukturen Elementare Datentypen Abstrakte Datentypen Elementare
Zeiger und dynamischer Speicher
Informatik für Elektrotechnik und Informationstechnik Benedict Reuschling benedict.reuschling@h-da.de Hochschule Darmstadt Fachbereich Informatik WS 2013/14 Zuletzt aktualisiert: 09.12.2013, 07:49 Uhr
DAP2 Praktikum Blatt 1
Fakultät für Informatik Lehrstuhl 11 / Algorithm Engineering Prof. Dr. Petra Mutzel, Carsten Gutwenger Sommersemester 2009 DAP2 Praktikum Blatt 1 Ausgabe: 21. April Abgabe: 22. 24. April Kurzaufgabe 1.1
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
Programmierkurs C++ Templates & STL (1/2)
Programmierkurs C++ Templates & STL (1/2) Prof. Dr. Stefan Fischer Institut für Telematik, Universität zu Lübeck https://www.itm.uni-luebeck.de/people/fischer #2 Templates Die wichtigsten objekt-orientierten
II. Grundlagen der Programmierung. Beispiel: Merge Sort. Beispiel: Merge Sort (Forts. ) Beispiel: Merge Sort (Forts. )
Technische Informatik für Ingenieure (TIfI) WS 2006/2007, Vorlesung 9 II. Grundlagen der Programmierung Ekkart Kindler Funktionen und Prozeduren Rekursion Datenstrukturen Merge S ( split, s, merge ) Beispiel:
4 Generische Programmierung. 4.1 Klassen-Templates (*) 4.2 Funktions-Templates (*) 4.3 Besondere Programmiertechniken (Smart Pointer)
4 Generische Programmierung 4.1 Klassen-Templates (*) 4.2 Funktions-Templates (*) 4.3 Besondere Programmiertechniken (Smart Pointer) (*) Auch in dieser Datei. V 4.05; Hon. Prof. Helmke 1 Intelligente Zeiger
Vorlesungsprüfung Programmiersprache 1
Vorlesungsprüfung Programmiersprache 1 Termin der Prüfung: 1) Di 20.03.2018 16:15 17:00 HSB 3 2) Di 15.05.2018 16:15 17:00 HSB 3 3) Di 12.06.2018 16:15 17:00 HSB 3 Stoffgebiete: 1) Ganzzahltypen: char,
Parallele Programmiermodelle
Parallele Programmiermodelle ProSeminar: Parallele Programmierung Semester: WS 2012/2013 Dozentin: Margarita Esponda Einleitung - Kurzer Rückblick Flynn'sche Klassifikationsschemata Unterteilung nach Speicherorganissation
3 Dateien 5. 4 Aufgaben 5. 5 Ausblick 6. Wir wenden uns der Implementierung von Datenstrukturen mittels objekt-orientierter Programmierung
Contents 1 Ziele dieser Uebung 1 2 Eine Matrix-Klasse 1 3 Dateien 4 Aufgaben Ausblick 6 1 Ziele dieser Uebung 1.1 Einleitung Wir wenden uns der Implementierung von Datenstrukturen mittels objekt-orientierter
Übung 1. Letzte Änderung: 5. Mai 2017
Übung 1 Letzte Änderung: 5. Mai 2017 Abhängigkeitsanalyse Synthese Mul prozessor Mul computer Compiler Parallelismustest Vektorrechner Rechenfelder Op mierung Flynns Schema Modelle Theorie Parallele Systeme
Objektorientierte Anwendungsentwicklung
Name, Vorname Matrikelnummer Klausur zur Vorlesung Objektorientierte Anwendungsentwicklung Krefeld, 16. März 2012 Hinweise: Schreiben Sie Ihren Namen und Ihre Matrikelnummer auf dieses Deckblatt. Die Aufgabenstellung
Gliederung. Was ist CUDA? CPU GPU/GPGPU CUDA Anwendungsbereiche Wirtschaftlichkeit Beispielvideo
Gliederung Was ist CUDA? CPU GPU/GPGPU CUDA Anwendungsbereiche Wirtschaftlichkeit Beispielvideo Was ist CUDA? Nvidia CUDA ist eine von NvidiaGPGPU-Technologie, die es Programmierern erlaubt, Programmteile
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
Motivation (GP)GPU CUDA Zusammenfassung. CUDA und Python. Christian Wilms. Integriertes Seminar Projekt Bildverarbeitung
CUDA und Python Christian Wilms Integriertes Seminar Projekt Bildverarbeitung Universität Hamburg WiSe 2013/14 12. Dezember 2013 Christian CUDA und Python 1 Gliederung 1 Motivation 2 (GP)GPU 3 CUDA 4 Zusammenfassung
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
Übung 1 - Betriebssysteme I
Prof. Dr. Th. Letschert FB MNI 13. März 2002 Aufgabe 0: Basiswissen Rechnerarchitektur: Übung 1 - Betriebssysteme I Aus welchen Komponenten besteht ein Rechner mit Von-Neumann Architektur? Was sind Bits
Klausur: Grundlagen der Informatik I, am 06. Februar 2009 Gruppe: A Dirk Seeber, h_da, Fb Informatik. Nachname: Vorname: Matr.-Nr.
Seite 1 von 9 Hiermit bestätige ich, dass ich die Übungsleistungen als Voraussetzung für diese Klausur in folgender Übung erfüllt habe. Jahr: Übungsleiter: Unterschrift: 1. Aufgabe ( / 12 Pkt.) Was liefert
Maik Zemann. Flynn s Taxonomie. Parallele Rechnerarchitekturen SS 2004 Technische Fakultät Universität Bielefeld. 3. Mai 2004 Flynn's Taxonomie 1
Maik Zemann Flynn s Taxonomie Parallele Rechnerarchitekturen SS 2004 Technische Fakultät Universität Bielefeld 3. Mai 2004 Flynn's Taxonomie 1 Gliederung Einleitung Gliederung Flynn s Taxonomie Das SISD-Modell
Programmieren in C/C++ und MATLAB
Programmieren in C/C++ und MATLAB Sven Willert Sabine Schmidt Christian-Albrechts-Universität zu Kiel CAU 5-1 Übung Schreiben Sie ein Programm, das die Zahl π durch π = 4 4 4 4 4 4 + + +... 3 5 7 9 11
Klausur: Grundlagen der Informatik I, am 27. März 2009 Gruppe: F Dirk Seeber, h_da, Fb Informatik. Nachname: Vorname: Matr.-Nr.
Seite 1 von 9 Hiermit bestätige ich, dass ich die Übungsleistungen als Voraussetzung für diese Klausur in folgender Übung erfüllt habe. Jahr: Übungsleiter: Unterschrift: 1. Aufgabe ( / 15 Pkt.) Was liefert
Einführung in die Programmierung Wintersemester 2008/09
Einführung in die Programmierung Wintersemester 2008/09 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund : Funktionen Inhalt Funktionen - mit / ohne Parameter
C++ - Objektorientierte Programmierung Konstante und statische Elemente
C++ - Objektorientierte Programmierung Konstante und statische Elemente hat eine Kantenlänge hat eine Füllfarbe Kantenlänge setzen Füllfarbe lesen Volumen berechnen Leibniz Universität IT Services Anja
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:
Grundlagen der Informatik 2. Typen
Grundlagen der Informatik 2. Typen Speicher, Speicherbedarf Ein-/Ausgabe Grundlagen der Informatik (Alex Rempel) 1 Wiederholung // root calculation #include #include using namespace
Laborskript Verteilte Systeme
Laborskript Verteilte Systeme Nebenläufigkeit in Java Prof. Dr. Oliver Haase 1 Threads Java bietet zwei verschiedene Arten an, Threads zu erzeugen und zu starten: Entweder durch Erweitern der Klasse Thread,
Prozesse und Threads. wissen leben WWU Münster
Münster Multi Threading in C++ 1 /19 Prozesse und Threads Ein Unix-Prozess hat IDs (process,user,group) Umgebungsvariablen Verzeichnis Programmcode Register, Stack, Heap Dateideskriptoren, Signale message
7. Übung Informatik II - Objektorientierte Programmierung
7. Übung Informatik II - Objektorientierte Programmierung 29. Mai 2015 Inhalt 1 2 3 Übersicht 1 2 3 Idee Menschen nehmen die Welt in Form von Objekten wahr manche Objekte haben gleiche Eigenschaften, hierüber
Vererbung I. Kfz Eigenschaften und Methoden der Klasse Kfz Lkw. Pkw. Eigenschaften und Methoden der Klasse Kfz
Einführung in C++ Vererbung I Durch Vererbung können aus bereits bestehenden Klassen neue Klassen konstruiert werden. Die neue abgeleitete Klasse erbt dabei die Daten und Methoden der sog. Basisklasse.
Grundlagen der Parallelisierung
Grundlagen der Parallelisierung Philipp Kegel, Sergei Gorlatch AG Parallele und Verteilte Systeme Institut für Informatik Westfälische Wilhelms-Universität Münster 3. Juli 2009 Inhaltsverzeichnis 1 Einführung
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
Klausur: Informatik I am 06. Februar 2009 Gruppe: D Dirk Seeber, h_da, Fb Informatik. Nachname: Vorname: Matr.-Nr.: Punkte:
Seite 1 von 9 Hiermit bestätige ich, dass ich die Übungsleistungen als Voraussetzung für diese Klausur in folgender Übung erfüllt habe. Jahr: Übungsleiter: Unterschrift: 1. Aufgabe ( / 12 Pkt.) Was liefert
Schriftlicher Test (120 Minuten) VU Einführung ins Programmieren für TM. 23. Januar 2017
Familienname: Vorname: Matrikelnummer: Aufgabe 1 (3 Punkte): Aufgabe 2 (1 Punkt): Aufgabe 3 (2 Punkte): Aufgabe 4 (4 Punkte): Aufgabe 5 (2 Punkte): Aufgabe 6 (2 Punkte): Aufgabe 7 (4 Punkte): Aufgabe 8
7.2 Dynamischer Speicher in Objekten/Kopierkonstruktor
7.2 Dynamischer Speicher in Objekten/Kopierkonstruktor Das Programmbeispiel aus dem letzten Abschnitt läßt sich bisher nicht zufriedenstellend zu Ende bringen. Unerklärliche Abstürze und Fehlverhalten