Shared-Memory Parallelisierung von C++ Programmen
|
|
|
- Karoline Schubert
- vor 9 Jahren
- Abrufe
Transkript
1 Shared-Memory Parallelisierung von C++ Programmen 9. Februar 2006
2 1 Übersicht Ergebnisse Zusammenfassung 2 3
3 Übersicht Ergebnisse Zusammenfassung Übersicht Verbreitete Parallelisierungstechniken für Shared-Memory: OpenMP: Direktiven-gesteuerte Shared-Memory Parallelisierung für C, C++ und FORTRAN. Posix-Threads: Shared-Memory (System-)Bibliothek mit umfangreicher Funktionalität, sprachunabhängig. UPC: Übermenge von C99 mit Distributed-Shared-Memory Modell, kann mit C++ kombiniert werden. MPI-2: wurde hier nicht betrachtet. Betrachtung der Parallelisierung des STREAM-Benchmarks und der DROPS Programmkernel. Vergleichskriterien: Vorgehensweise, Tool-Unterstützung. Performance und Aufwand. Performance nach Tuning.
4 Übersicht Ergebnisse Zusammenfassung Performance: STREAM-Benchmark 8 7 C OpenMP = 1 C Posix-Threads C UPC Ideal 6 5 Speedup Threads
5 Übersicht Ergebnisse Zusammenfassung Aufwand für Tuning Opteron-Plattform hat ccnuma-eigenschaften: berücksichtigen! OpenMP: Initialisierungsschleife mit gleicher (paralleler) Arbeitsverteilung wie die Berechnung. Posix-Threads: Initialisierungsschleife. Thread-Pool zur Vermeidung des Aufwandes der Erstellung und Beendigung von Threads. CPU-Binding der Threads. UPC: ist kein Problem. Compiler erzeugt schlechten Code. Verschiedene manuelle Optimierungen im Code und im Compiler (beta) verwenden.
6 Übersicht Ergebnisse Zusammenfassung Performance: STREAM-Benchmark (tuned) 8 7 C OpenMP C Posix-Threads C UPC Ideal 6 5 Speedup Threads
7 Übersicht Ergebnisse Zusammenfassung Zusammenfassung Alle drei Parallelisierungstechniken eignen sich für die Parallelisierung des STREAM-Benchmarks und DROPS. UPC bietet leistungsfähige Möglichkeiten der Datenplatzierung. Ad-Hoc Parallelisierung ggfs. aufwändig. Posix-Threads: Hohe Flexibilität, auch für die Programmierung irregulärer Codes geeignet. Anpassung der Arbeitsverteilung ist aufwändig und muss manuell programmiert werden. OpenMP: Schnellste Entwicklung und größter Benutzerkomfort. Nur minimale Codeänderungen notwendig, Möglichkeit zur seriellen Compilation besteht weiter. Tool-Unterstützung, z.b. Test auf serielle Äquivalenz.
8 1 Übersicht Ergebnisse Zusammenfassung 2 3
9 Thread-Safety Ein Code ist thread-safe, wenn er bei gleichzeitiger Ausführung durch mehrere Threads korrekt ist. Hier betrachtete STLs: Sun C++ und STLport (eng verwandt mit SGI STL), GNU C++ und Intels Modifikationen. Zwei Szenarien: Mehrere Threads greifen (schreibend) auf eine Instanz eines Datentypes zu. Mehrere Threads greifen (schreibend) auf mehrere Instanzen zu, nie mehr als ein Thread auf eine Instanz. Eine Funktion ist reentrant, wenn: sie nur Variablen vom Stack benutzt, sie nur von aktuellen Argumenten abhängt, alle aufgerufenen Funktionen es auch sind.
10 Ergebnis Die betrachteten STLs bieten ausschließlich reentrante Funktionen an. In der Sun STL und in STLport enthalten lediglich spezialisierte Allokatoren statische Variablen, die über Locking geschützt werden. Zusammenfassung: Ausschließlicher Lesezugriff ist sicher. Gleichzeitiger (schreibender) Zugriff mehrerer Threads auf mehrere unterschiedliche Instanzen ist sicher. Gleichzeitiger (schreibender) Zugriff mindestens eines Threads muss von der Applikation verwaltet werden.
11 Einleitung Einige Datentypen haben sich als ungünstig zur Verwendung auf NUMA-Architekturen erwiesen, z.b: std::valarray. Eine Verteilung der Daten ist nach dem erstmaligen Anfassen nicht mehr direkt möglich. Zwei Ansätze zur Verteilung der Daten: Nutzung von Fähigkeiten des Betriebssystems (hier: Solaris) um Codemodifikationen zu minimieren. Nutzung von C++ Sprachmitteln mit der Hoffnung auf Portabilität (First-Touch). Möglichkeiten zur Allokation dynamischen Speichers: Zeiger, Objekte aus Klassenbibliotheken (z.b. STL), Allgemeine Klassen.
12 Zeiger Inhaltsverzeichnis Im Allgemeinen leicht an eine vorgegebene Datenverteilung anzupassen: einzelner Zeiger auf Datenbereich kann explizit parallel initialisiert werden, Array von Zeigern wird parallel verteilt angelegt. Beispielcode ADI: Poisson-Löser. Berechnung erfolgt auf der Variablen gridpoint grid. Betriebssystem: Benutzung von pmadvise mit Strategie MADV ACCESS MANY. : Optimierung der Verteilung beim Anlegen des Feldes: // A l l o c a t i o n o f v a r i a b l e g r i d #pragma omp p a r a l l e l f o r f o r ( i n t i = 0 ; i < N; i ++) { g r i d [ i ] = new g r i d P o i n t ; }
13 Performance: ADI mit Initialisierungstechniken original pmadvise parinit Speedup Threads
14 Objekte aus Klassenbibliotheken Falls Objekte keine Möglichkeit zur Beeinflussung der Speicherverwaltung anbieten: Einsatz von Betriebssystemfunktionalität, z.b. madvise(). Modifikation des Objektes, z.b. im Konstruktor. std::valarray bietet keine Möglichkeiten über seine Schnittstelle. Eine Modifikation der Allokationstechnik wurde durchgeführt, ist aber nicht zwischen Compilern portabel. std::vector bietet in weiten Teilen die gleiche Schnittstelle, erlaubt aber zusätzlich die Angabe eines Allokators. Ein Allokator ist eine Klasse, die Aufgaben der Speicherverwaltung übernimmt, und eine von der STL vorgegebene Schnittstelle implementiert. Beim Austausch von std::valarray mit std::vector ist auf die Performance zu achten.
15 Allokator-Framework Framework zur Evaluation verschiedener Allokationstechniken: Allokator: implementiert die von der STL geforderte Schnittstelle, verwendet HeapManager. HeapManager: verwaltet Speicher, der vom HeapLayer allokiert wurde. HeapLayer: allokiert physikalischen Speicher durch Systemoder Bibliotheksaufrufe. DistributedHeapAllocator: implementiert einen Allokator, der Speicher direkt nach der Allokation mittels OpenMP parallel mit null beschreibt. Das Scheduling wird durch einen Templateparameter festgelegt. Der DistributedHeapAllocator kann mit std::vector verwendet werden.
16 Performance: STREAM-Benchmark mit Verteilung 8 7 C++ OpenMP, madvise C++ OpenMP, vector Ideal C++ OpenMP, myvalarray 6 5 Speedup Threads
17 Performance: Routine y Ax aus DROPS (sparse MatVec) OpenMP OpenMP dist-vector Ideal Speedup Threads
18 Allgemeine Klassen Über ein Mixin kann die Speicherverwaltung einer Klasse modifiziert werden, wie in [Berger & Zorn + 01] vorgestellt. template<c l a s s Object, c l a s s HeapManager> c l a s s PerClassHeapMixin : p u b l i c Object { p u b l i c : i n l i n e void operator new ( s i z e t s z ) { r e t u r n getheap ( ). m a l l o c ( s z ) ; } s t a t i c HeapManager & getheap ( ) { s t a t i c HeapManager theheap ; r e t u r n theheap ; } [... ] } ; Die Allokation von Speicher wird vom HeapManager verwaltet.
19 Übersicht Bei der Verwendung von Datenstrukturen, die viele kleine Objekte anlegen, wurden Probleme beim Speichermanagement unter Solaris und Windows festgestellt. Hier: Betrachtung von std::map, aber auch mit std::list und ähnlichen Datentypen können ähnliche Probleme auftreten. Unter Solaris werden spezielle Allokatoren zur effizienten seriellen Allokation verwendet. Lösungsansätze: Verwendung einer Betriebssystem-nahen Bibliothek zur parallelen Allokation, z.b. libmtmalloc. Modifikation der Speicherverwaltung seitens der Anwendung durch Anforderung größerer Blöcke. std::map erlaubt die Angabe eines Allokators.
20 Performance: MAP-Benchmark 6 5 Linux = 1 Linux, Chunk-Allokator Solaris Solaris, mtmalloc Solaris, mtmalloc, Chunk-Allokator Windows Windows, Chunk-Allokator Speedup Threads
21 Performance: Routine SetupSystem1 aus DROPS Linux, malloc Linux, Chunk-Allokator Solaris, mtmalloc Solaris, Chunk-Allokator + mtmalloc Ideal Speedup Threads
22 Einleitung Parallelisierung eines High-Level Codes: Interne Parallelisierung. Externe Parallelisierung. Verwendung in Parallelisierung (Thread-Safety). PCG( const Mat& A, Vec& x, const Vec& b,... ) { Vec p ( n ), z ( n ), q ( n ), r ( n ) ; Mat A( n, n ) ; [... ] f o r ( i n t i = 1 ; i <= m a x i t e r ; ++i ) { q = A p ; double a l p h a = rho / ( p q ) ; x += a l p h a p ; r = a l p h a q ; [... ]
23 Objektorientierte Codes Es kann bereits aufwändig sein, seriell eine optimale Performance zu erreichen (Template Expressions). Interne Parallelisierung: abgeschlossene parallele Region innerhalb der Memberfunktionen. Vorteil: Keine Änderung der Schnittstelle, korrekte Verwendung garantiert. Nachteil: Aufwand beim Erzeugen und Beenden der Threads. Ebenfalls zur internen Parallelisierung zählen z.b. parallele Erweiterungen der STL. Diese können bei den betrachteten Codes aber nicht gewinnbringend eingesetzt werden. Externe Parallelisierung: parallele Region außerhalb der Memberfunktionen, innerhalb wird Orphaning eingesetzt. Vorteil: Verringerung des Aufwandes des Threadmanagements. Nachteil: Fehlerhafte Verwendung möglich.
24 Performance: objektorientierter PCG-Löser Intel C++ Compiler 9.0 auf Sun Fire V40z: Version Intern ,2 65,5 Intern (temp. Vektor) ,5 65,1 Extern ,3 65 C-Code ,3 65 Sun C++ Studio10 Compiler auf Sun Fire E6900: Version Intern Intern (temp. Vektor) Extern C-Code
25 Parallelisierung von nicht OpenMP konformen Schleifen Bei Verwendung von Zeigern oder Iteratoren (Kapselung eines Zeigers in der STL) sind die entstehenden Schleifen nicht von der kanonischen Form, wie sie OpenMP fordert. Wichtigste Forderung: Berechnung der Schleifeniterationen im Vorraus möglich. Dies würde auch bei Iteratoren (distance()) und Zeigern (Zeigerarithmetik) gehen.
26 Parallelisierung von nicht OpenMP konformen Schleifen Ansatz 1: Erstellung einer parallelisierbaren Schleife: long l = 0, l S i z e = 0 ; f o r ( i t = l i s t 1. b e g i n ( ) ; i t!= l i s t 1. end ( ) ; i t ++) l S i z e ++; v a l a r r a y <CComputeItem > i t e m s ( l S i z e ) ; f o r ( i t = l i s t 1. b e g i n ( ) ; i t!= l i s t 1. end ( ) ; i t ++) { i t e m s [ l ] = &( i t ) ; l ++; } #pragma omp p a r a l l e l f o r d e f a u l t ( s h a r e d ) f o r ( long l = 0 ; l < l S i z e ; l ++) { i t e m s [ l ] >compute ( ) ; }
27 Parallelisierung von nicht OpenMP konformen Schleifen Ansatz 2: Intels Taskqueuing: #pragma i n t e l omp p a r a l l e l t a s k q { f o r ( i t = l i s t 2. b e g i n ( ) ; i t!= l i s t 2. end ( ) ; i t ++) { #pragma i n t e l omp t a s k { i t >compute ( ) ; } } // end f o r } // end omp p a r a l l e l
28 Parallelisierung von nicht OpenMP konformen Schleifen Ansatz 3: single nowait Technik: #pragma omp p a r a l l e l p r i v a t e ( i t ) { f o r ( i t = l i s t 3. b e g i n ( ) ; i t!= l i s t 3. end ( ) ; i t ++) { #pragma omp s i n g l e nowait { i t >compute ( ) ; } } // end f o r } // end omp p a r a l l e l
29 Performance: parallele Iteratorschleifen Intel,Exp1,5x1000 Intel,Exp2,5x1000 Intel,Exp3,5x1000 Intel,Exp1,40x1000 Intel,Exp2,40x1000 Intel,Exp3,40x1000 Sun,Exp1,2560x1 Sun,Exp3,2560x1 Time (sec) Threads
30 (1) Insgesamt war die Parallelisierung der betrachteten Anwendungsprogramme mit OpenMP erfolgreich. Bereits diskutiert: Schleifen mit Indexvariablen von anderem Typ als Integer. Schleifen über size t werden ebenfalls nicht akzeptiert, da vorzeichenlos, aber häufig verwendet. Die Privatisierung von Membervariablen wird nicht unterstützt. Dies wäre angenehm beim Chunk Allokator und bei der internen Parallelisierung. Eine Routine kann nicht erkennen, ob sie aus einem Worksharingkonstrukt aufgerufen wird. Dies wäre zur Garantierung der Korrektheit bei der externen Parallelisierung angenehm.
31 (2) Die OpenMP Spezifikation geht nicht in allen Punkten präzise auf die Programmiersprache C++ ein. Privatisierung von Klassen: OpenMP: Private Variablen sind nicht initialisiert. C++: Für eine Instanz einer Klasse muss immer ein Konstruktor aufgerufen werden. Der Intel C++ Compiler tut dies, der Sun C++ Compiler nicht. Dies führt zu schwer auffindbaren Fehlern. Viele Compiler haben Schwierigkeiten, C++ Konstrukte wie Exceptions, Templates, Vererbung im Zusammenhang mit OpenMP umzusetzen. Dies hat die Parallelisierung von DROPS gezeigt.
32 FIRE Inhaltsverzeichnis Das Image-Retrieval System FIRE wird am Lehrstuhl für Informatik 6 der RWTH Aachen von Thomas Deselaers und Daniel Keysers entwickelt. Ziele von FIRE: Vergleich von Bildmerkmalen (Features) Vergleich von Bildvergleichsmaßen (Distanzen) Untersuchung der Korrelation von Features Die Parallelisierung wurde durch die objektorientierte Programmierung stark unterstützt (Aufwand: ca. 4 Wochen). Die Programmiersprache C++ hat die Abhängigkeitsanalyse deutlich vereinfacht. Die Flexibilität der Entwicklung durfte nicht eingeschränkt werden. Bei der OpenMP Parallelisierung wurden nur wenige Zeilen Code hinzugefügt.
33 FIRE Inhaltsverzeichnis batch() getscores() Beste Kombination Ideal Speedup Threads
34 1 Übersicht Ergebnisse Zusammenfassung 2 3
35 Zusammenfassung OpenMP lässt sich gut zur Parallelisierung von C++ Programmen einsetzen. Es bietet dem Programmierer den meisten Komfort im Vergleich mit Posix-Threads und UPC. Skalierbarkeit von OpenMP C++ Programmen ist nicht immer zwischen Hardwarearchitekturen, Betriebssystemen und Compilern portabel: Opteron: NUMA-Architektur und. Solaris und Windows: Speicherverwaltung. Effizienz der OpenMP Implementierung. Diese Punkte können mit der aktuellen OpenMP Spezifikation nicht direkt adressiert werden. Die C++ Programmiersprache bietet Lösungsansätze. Objektorientiertes Design kann ungewollte Abhängigkeiten im Code verhindern und die Abhängigkeitsanalyse erleichtern.
36 Ende Inhaltsverzeichnis Vielen Dank für Ihre Aufmerksamkeit.
Evaluation. Einleitung. Implementierung Integration. Zusammenfassung Ausblick
Christopher Schleiden Bachelor Kolloquium 15.09.2009 Einleitung Evaluation Implementierung Integration Zusammenfassung Ausblick Einleitung laperf Lineare Algebra Bibliothek für C++ Möglichkeit zur Integration
DAP2-Programmierpraktikum Einführung in C++ (Teil 2)
DAP2-Programmierpraktikum Einführung in C++ (Teil 2) Carsten Gutwenger 18. April 2008 Lehrstuhl 11 Algorithm Engineering Fakultät für Informatik, TU Dortmund Überblick Dynamischer Speicher Klassen und
Objektorientierte Programmierung II
Objektorientierte Programmierung II OOP I Erlaubt Entwicklers, im Problemraum zu denken und zu arbeiten. Das Problem wird in eine Menge von Objekten zerlegt. Objekte wirken aufeinander, um das Problem
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
Programmierung mit C Zeiger
Programmierung mit C Zeiger Zeiger (Pointer)... ist eine Variable, die die Adresse eines Speicherbereichs enthält. Der Speicherbereich kann... kann den Wert einer Variablen enthalten oder... dynamisch
Mapra: C++ Teil 4. Felix Gruber. 6. Mai IGPM, RWTH Aachen. Felix Gruber (IGPM, RWTH Aachen) Mapra: C++ Teil 4 6.
Mapra: C++ Teil 4 Felix Gruber IGPM, RWTH Aachen 6. Mai 2015 Felix Gruber (IGPM, RWTH Aachen) Mapra: C++ Teil 4 6. Mai 2015 1 / 22 Themen vom letzten Mal Kompilieren mit Makefiles Ein-/Ausgabe über Dateien
C++ Teil 6. Sven Groß. 27. Mai Sven Groß (IGPM, RWTH Aachen) C++ Teil Mai / 14
C++ Teil 6 Sven Groß 27. Mai 2016 Sven Groß (IGPM, RWTH Aachen) C++ Teil 6 27. Mai 2016 1 / 14 Themen der letzten Vorlesung Musterlösung A2 Wdh.: Zeiger und Felder Kopieren von Feldern Dynamische Speicherverwaltung
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
C++ Teil 7. Sven Groß. 30. Nov Sven Groß (IGPM, RWTH Aachen) C++ Teil Nov / 13
C++ Teil 7 Sven Groß 30. Nov 2015 Sven Groß (IGPM, RWTH Aachen) C++ Teil 7 30. Nov 2015 1 / 13 Themen der letzten Vorlesung Zeiger, Felder (Wdh.) dynamische Speicherverwaltung Sven Groß (IGPM, RWTH Aachen)
Das erwartet dich in diesem Buch 8. Kapitel 1 Aufbruch ins Programmierabenteuer 14
Inhaltsverzeichnis Das erwartet dich in diesem Buch 8 Kapitel 1 Aufbruch ins Programmierabenteuer 14 Das Schlimmste vorab: die binäre Logik 15 So hoch entwickelt und doch so primitiv: der Prozessor 17
Verschlüsseln eines Bildes. Visuelle Kryptographie. Verschlüsseln eines Bildes. Verschlüsseln eines Bildes
Verschlüsseln eines Bildes Visuelle Kryptographie Anwendung von Zufallszahlen Wir wollen ein Bild an Alice und Bob schicken, so dass Alice allein keine Information über das Bild bekommt Bob allein keine
Crashkurs C++ - Teil 1
Crashkurs C++ - Teil 1 Intro Speicherverwaltung Variablen, Pointer, Referenzen Felder statische & dynamische Allozierung Birgit Möller & Denis Williams AG Bioinformatik & Mustererkennung Institut für Informatik
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
Dynamische Datentypen. Destruktor, Copy-Konstruktor, Zuweisungsoperator, Dynamischer Datentyp, Vektoren
Dynamische Datentypen Destruktor, Copy-Konstruktor, Zuweisungsoperator, Dynamischer Datentyp, Vektoren Probleme mit Feldern (variabler Länge) man kann sie nicht direkt kopieren und zuweisen Probleme mit
C++ Teil 5. Sven Groß. 13. Mai Sven Groß (IGPM, RWTH Aachen) C++ Teil Mai / 18
C++ Teil 5 Sven Groß 13. Mai 2016 Sven Groß (IGPM, RWTH Aachen) C++ Teil 5 13. Mai 2016 1 / 18 Themen der letzten Vorlesung Funktionen Funktionsüberladung, Signatur Rekursion const-deklaration Referenzen
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
Einführung in die Programmierung mit C++
1 Seite 1 Einführung in die Programmierung mit C++ Teil III - Objektorientierte Programmierung 9. Klassen und Methoden Was sind Klassen? Seite 2 sprachliches Mittel von C++ um objektorientierte Programmierung
Probeklausur: Programmierung WS04/05
Probeklausur: Programmierung WS04/05 Name: Hinweise zur Bearbeitung Nimm Dir für diese Klausur ausreichend Zeit, und sorge dafür, dass Du nicht gestört wirst. Die Klausur ist für 90 Minuten angesetzt,
Programmieren in C++
Programmieren in C++ SS 2012 Vorlesung 5, Dienstag 5. Juni 2012 (Klassen, Objekte, Methoden, new & delete) Prof. Dr. Hannah Bast Lehrstuhl für Algorithmen und Datenstrukturen Institut für Informatik Universität
C++ Teil 9. Sven Groß. 17. Juni Sven Groß (IGPM, RWTH Aachen) C++ Teil Juni / 17
C++ Teil 9 Sven Groß 17. Juni 2016 Sven Groß (IGPM, RWTH Aachen) C++ Teil 9 17. Juni 2016 1 / 17 Themen der letzten Vorlesung Objektorientierung und Klassen Attribute / Datenelemente Methoden / Elementfunktionen
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
Programmieren in Java -Eingangstest-
Programmieren in Java -Eingangstest- Nummer: 1. Studiengang: Informatik B.Sc. Informatik M.Sc. ESE B.Sc. ESE M.Sc. Sonstiges: Fachsemester: Bitte Fragen, die Sie nicht beantworten können unbedingt mit
Assoziative Container in C++ Christian Poulter
Assoziative Container in C++ Christian Poulter Seminar: Die Sprache C++ Mat-Nr.: 53 03 129 EMail: [email protected] Christian Poulter Assoziative Container in C++ Seite 1/10 Inhalt 1. Einleitung: Container...
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
1. Übung zu "Numerik partieller Differentialgleichungen"
1. Übung zu "Numerik partieller Differentialgleichungen" Simon Gawlok, Eva Treiber Engineering Mathematics and Computing Lab 22. Oktober 2014 1 / 15 1 Organisatorisches 2 3 4 2 / 15 Organisatorisches Ort:
Objektorientiertes Programmieren in C++
Nicolai Josuttis Objektorientiertes Programmieren in C++ Von der Klasse zur Klassenbibliothek D-64289 Darmstadt ADDISON-WESLEY PUBLISHING COMPANY Bonn Paris Reading, Massachusetts Menlo Park, California
Shared-Memory Parallelisierung von C++ Programmen
RHEINISCH-WESTFÄLISCHE TECHNISCHE HOCHSCHULE AACHEN (RWTH AACHEN) Lehrstuhl für Hochleistungsrechnen Prof. C. Bischof, Ph.D. Shared-Memory Parallelisierung von C++ Programmen Diplomarbeit Christian Terboven
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
Liste MI / Liste I Programmieren in C++
Liste MI / Liste I Programmieren in C++ Fachhochschule Wiesbaden, FB Design Informatik Medien Studiengang Medieninformatik WS 2007/2008 Kapitel 1-4 1 Ziele Kennenlernen einer weiteren objektorientierten
Objektorientierte Programmierung. Kapitel 22: Aufzählungstypen (Enumeration Types)
Stefan Brass: OOP (Java), 22. Aufzählungstypen 1/20 Objektorientierte Programmierung Kapitel 22: Aufzählungstypen (Enumeration Types) Stefan Brass Martin-Luther-Universität Halle-Wittenberg Wintersemester
Software Entwicklung 1
Software Entwicklung 1 Annette Bieniusa Peter Zeller AG Softech FB Informatik TU Kaiserslautern Speichermanagement Wie viel Speicher braucht ein Programm? Wofür wird Speicher benötigt? Wie ist der Speicher
6 ZEIGER UND REFERENZEN - ALLGEMEINES
6 ZEIGER UND REFERENZEN - ALLGEMEINES Leitideen: Zeiger sind Adressen mit zusätzlicher Typinformation über das dort gespeicherte Objekt. Die Vereinbarungssyntax soll der Ausdruckssyntax entsprechen und
Informationsverarbeitung im Bauwesen
1/21 Informationsverarbeitung im Bauwesen Einführung in das Programmieren mit C++ Markus Uhlmann Institut für Hydromechanik Karlsruher Institut für Technologie www.ifh.kit.edu WS 2010/2011 Vorlesung 8
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
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
2. Programmierung in C
2. Programmierung in C Inhalt: Überblick über Programmiersprachen, Allgemeines zur Sprache C C: Basisdatentypen, Variablen, Konstanten, Operatoren und Ausdrücke Anweisungen und Kontrollstrukturen (Steuerfluss)
Organisatorisches. Folien (u.a.) auf der Lva-Homepage Skriptum über MU Online
Organisatorisches Folien (u.a.) auf der Lva-Homepage Skriptum über MU Online Nächste Woche VO und UE am Dienstag, den 30.10.! UE im CR IL/IT Wissensüberprüfung am Zettel 25.10.2018 IT I - VO 3 1 Organisatorisches
4 Objektorientierte Programmierung mit Java 4.1 Java-Grundlagen
4 Objektorientierte Programmierung mit Java 4.1 Java-Grundlagen Highlights: objektorientierte Sprache Plattformunabhängigkeit bei Hardware und Betriebssystem optimale Einbindung im Internet und Intranet
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
C++ Teil 10. Sven Groß. 17. Dez IGPM, RWTH Aachen. Sven Groß (IGPM, RWTH Aachen) C++ Teil Dez / 14
C++ Teil 10 Sven Groß IGPM, RWTH Aachen 17. Dez 2014 Sven Groß (IGPM, RWTH Aachen) C++ Teil 10 17. Dez 2014 1 / 14 Themen der letzten Vorlesung Objektorientierung und Klassen Attribute / Datenelemente
Tag 8 Repetitorium Informatik (Java)
Tag 8 Repetitorium Informatik (Java) Dozent: Michael Baer Lehrstuhl für Informatik 2 (Programmiersysteme) Friedrich-Alexander-Universität Erlangen-Nürnberg Wintersemester 2017/2018 Informatik-Repetitorium
HSR Rapperswil 2001 Markus Rigling. Programmieren: Vererbung. 1 Variante 2
HSR Rapperswil 2001 Markus Rigling Programmieren: Vererbung 1 Variante 2 Inhaltsverzeichnis: 1. Was ist Vererbung...3 2. Anwendung...3 3. Realisierung...3 4. Vorgehensweise zur Erstellung einer Kind-Klasse...3
Vorlesung Objektorientierte Programmierung Klausur
Prof. Dr. Stefan Brass 16. Februar 2007 Dipl.-Inform. Annett Thüring Institut für Informatik MLU Halle-Wittenberg Vorlesung Objektorientierte Programmierung Klausur Name: Matrikelnummer: Studiengang: Aufgabe
Teil 8: Dynamische Speicherverwaltung. Prof. Dr. Herbert Fischer Fachhochschule Deggendorf Prof. Dr. Manfred Beham Fachhochschule Amberg-Weiden
Teil 8: Dynamische Speicherverwaltung Prof. Dr. Herbert Fischer Fachhochschule Deggendorf Prof. Dr. Manfred Beham Fachhochschule Amberg-Weiden Inhaltsverzeichnis 8 Dynamische Speicherverwaltung... 3 8.1
C/C++-Programmierung
1 C/C++-Programmierung Speicherverwaltung, 0, const Sebastian Hack Christoph Mallon (hack mallon)@cs.uni-sb.de Fachbereich Informatik Universität des Saarlandes Wintersemester 2009/2010 2 Speicherverwaltung
Java-Grundkurs für Wirtschaftsinformatiker
Klaus-Georg Deck Herbert Neuendorf Java-Grundkurs für Wirtschaftsinformatiker Die Grundlagen verstehen - Objektorientierte Programmierung - Fortgeschrittene Konzepte kennenlernen - Betriebswirtschaftlich
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
Organisatorisches. Folien (u.a.) gibt's auf der Lva-Homepage zum Download
Organisatorisches Folien (u.a.) gibt's auf der Lva-Homepage zum Download Diesen Mi erstes Tutorium (15-17) Ab nächster Woche montags 10-12 (jeweils im Computerraum) 17.10.2017 IT I - VO 3 1 Organisatorisches
4. Objektorientierte Programmierung mit C++
4. Objektorientierte Programmierung mit C++ Einführung C++ / Entwicklung der Sprachfamilie Erweiterungen der Sprache C: Ein- und Ausgabe, Referenzen, Speicherallokation und Freigabe Grundlagen des Typkonzepts
Übungsaufgaben: 1. Objektorientierte Programmierung - Teil 1
Übungsaufgaben: 1. Objektorientierte Programmierung - Teil 1 1. Das Objekt Bruch mit einem Standardkonstruktor (initialisieren mit 0), einem allgemeinen Konstruktor (Zähler und Nenner können beliebig vorgegeben
Java als erste Programmiersprache
Joachim Göll Cornelia Heinisch Java als erste Programmiersprache Grundkurs für Hochschulen 8., überarbeitete Auflage Springer Vi eweg Inhaltsverzeichnis 1 Grundlagen der Programmierung 1 1.1 Das erste
Einführung in die STL
Einführung in die STL Fimberger Lucia [email protected] Nidetzky Marion [email protected] Was ist die STL? Abkürzung für Standard Template Library Eine generische Bibliothek Ist kaum objektorientiert,
Creational Patterns. Seminar Software-Entwurf. Thomas Liro WS 2004/05.
Creational Patterns Seminar Software-Entwurf WS 2004/05 Thomas Liro Inhaltsüberblick Einordnung des Themas Beschreibung von Design Pattern Auswahl von Design Patterns Was sind Creational
Prinzipien der objektorientierten Programmierung (OOP)
Die Ziele der OOP sind: - bessere Warbarkeit - Wiederverwendbarkeit 1.) Datenkapselung Prinzipien der objektorientierten Programmierung (OOP) Komplexe Datenstrukturen (wie zb ein Stack) werden vom Anwendungsprogramm
Java Referenzdatentypen genauer betrachtet
Informatik 1 für Nebenfachstudierende Grundmodul Java Referenzdatentypen genauer betrachtet Kai-Steffen Hielscher Folienversion: 23. Januar 2018 Informatik 7 Rechnernetze und Kommunikationssysteme Referenzdatentypen
Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 11/12 1. Kapitel 11. Listen. Listen
Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 11/12 1 Kapitel 11 Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 11/12 2 Ziele Implementierungen für
kurze Wiederholung class templates
kurze Wiederholung class templates Ein class template ist ein Template, dass mit einem oder mehreren typename -Parametern implementiert wird. Um solch ein Template zu benutzen, übergibt man dem Template
Vorlesung Programmieren
Vorlesung Programmieren Speicherverwaltung und Parameterübergabe Prof. Dr. Stefan Fischer Institut für Telematik, Universität zu Lübeck http://www.itm.uni-luebeck.de/people/fischer Gültigkeitsbereich von
Übersicht. Speichertypen. Speicherverwaltung und -nutzung. Programmieren in C
Übersicht Speichertypen Speicherverwaltung und -nutzung Speichertypen Beim Laden eines Programms in den Speicher (Programmausführung) kommen 3 verschiedene Speicherbereiche zum Einsatz: Text Segment (Code
Typsystem Plattform- und Sprachenunabhängigkeit in.net
Typsystem Plattform- und Sprachenunabhängigkeit in.net C# J# VB.NET Zwischencode CIL Windows Unix Auf welchen Grundlagen basiert dies? Komponenten & Frameworks Seite 1 Typsystem Grundlagen - CLR Common
Tag 4 Repetitorium Informatik (Java)
Tag 4 Repetitorium Informatik (Java) Dozent: Michael Baer Lehrstuhl für Informatik 2 (Programmiersysteme) Friedrich-Alexander-Universität Erlangen-Nürnberg Wintersemester 2017/2018 Übersicht Arrays (Reihungen)
Inhaltsverzeichnis. Kapitel i: Schnelleinstieg 13. Kapitel 2: Was sind Programme? 17. Kapitel 3: Wie erstellt man eigene Programme?
Liebe Leserin, lieber Leser 10 Kapitel i: Schnelleinstieg 13 Kapitel 2: Was sind Programme? 17 Was ist ein Programm? 18 Sprechen Sie Computer? 18 Von der Idee zum Programm 19 Von Windows, Fenstern und
Abschnitt 10: Datenstrukturen
Abschnitt 10: Datenstrukturen 10. Datenstrukturen 10.1Einleitung 10.2 Peer Kröger (LMU München) Einführung in die Programmierung WS 16/17 829 / 867 Einleitung Überblick 10. Datenstrukturen 10.1Einleitung
Überblick. 6. Konstruktor und Destruktor - obligatorische Elementfunktionen einer Klasse
Überblick 1. Einführung C++ / Entwicklung/ Sprachfamilie 2. Nicht objektorientierte Erweiterungen von C 2.1 Das Ein-/Ausgabekonzept von C++ 2.2 Referenzen in C++ 2.3 Heap-Allokatoren in C++ 3. Grundlagen
Durch die Teil-von-Beziehung soll ausgedrückt werden, dass ein Objekt A als (physikalischer) Teil eines Objekts B angesehen wird. Insbesondere kann ei
Lösungsvorschläge zur Klausur zum Kurs 1618 Sommersemester 2001 am 22.9.2001 Aufgabe 1 a) Benutzungsbeziehung: class Kennzeichen class Fahrzeug boolean gueltigeskennzeichen (Kennzeichen kz) Objekte der
5.4 Arrays. Oft müssen viele Werte gleichen Typs gespeichert werden. Idee: Lege sie konsekutiv ab! Greife auf einzelne Werte über ihren Index zu!
5.4 Arrays Oft müssen viele Werte gleichen Typs gespeichert werden. Idee: Lege sie konsekutiv ab! Greife auf einzelne Werte über ihren Index zu! Feld: Index: 17 3-2 9 0 1 0 1 2 3 4 5 Harald Räcke 114/656
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
Aufbau von Klassen. class punkt {...
Einführung in C++ Aufbau von Klassen Eine wird mit dem Schlüsselwort class eingeleitet, und endet mit einem Semikolon. Der Inhalt wird zwischen geschweiften Klammern geschrieben. class punkt {... ; Im
Theorie zu Übung 8 Implementierung in Java
Universität Stuttgart Institut für Automatisierungstechnik und Softwaresysteme Prof. Dr.-Ing. M. Weyrich Theorie zu Übung 8 Implementierung in Java Klasse in Java Die Klasse wird durch das class-konzept
Neben der Verwendung von Klassen ist Vererbung ein wichtiges Merkmal objektorientierter
Kapitel 1 Der vierte Tag 1.1 Vererbung Neben der Verwendung von Klassen ist Vererbung ein wichtiges Merkmal objektorientierter Sprachen. Unter Vererbung versteht man die Möglichkeit, Eigenschaften vorhandener
Praxisorientierte Einführung in C++ Lektion: "Allgemeines"
Praxisorientierte Einführung in C++ Lektion: "Allgemeines" Christof Elbrechter, Florian P. Schmidt Neuroinformatics Group, CITEC April 4, 2011 Christof Elbrechter Praxisorientierte Einführung in C++ April
Inhalt. 4.5 Arbeit mit Zeigern (engl. Pointer)
Inhalt Inhalt: 4. Programmiersprache C 4.1 Programmaufbau in C 4.2 Basisdatentypen und einfache Anweisungen 4.3 Steuerfluss-Konstrukte 4.4 Arbeit mit indizierten Größen (Felder) 4.5 Arbeit mit Zeigern
Das Einsteigerseminar Objektorientierte Programmierung in Java
Alexander Niemann Das Einsteigerseminar Objektorientierte Programmierung in Java -H-H Inhalt Vorwort 13 Einleitung 15 1 Java 21 1.1 Die Geschichte von Java 22 1.2 Das Konzept 24 Klassisch - Compiler und
TEIL I: OBJEKTORIENTIERUNG UND GRUNDKURS JAVA GRUNDLAGEN DER PROGRAMMIERUNG... 4
Inhaltsverzeichnis TEIL I: OBJEKTORIENTIERUNG UND GRUNDKURS JAVA... 1 1 GRUNDLAGEN DER PROGRAMMIERUNG... 4 1.1 Das erste Java-Programm... 4 1.2 Programme und ihre Abläufe... 6 1.3 Entwurf mit Nassi-Shneiderman-Diagrammen...
Grundlagen der OO- Programmierung in C#
Grundlagen der OO- Programmierung in C# Technische Grundlagen 1 Dr. Beatrice Amrhein Überblick Visual Studio: Editor und Debugging Die Datentypen Methoden in C# Die Speicherverwaltung 2 Visual Studio 3
Entwurfsmuster und Frameworks Singleton
Entwurfsmuster und Frameworks Singleton Oliver Haase Oliver Haase Emfra Singleton 1/20 Beschreibung I Klassifikation: objektbasiertes Erzeugungsmuster Zweck: sicherstellen, dass eine Klasse nur genau einmal
Klassen als Objekte. Smalltalk vs. Objective-C. Self-Nachrichten an Klassen in Objective-C. Klassen als Objekte. Smalltalk: Everything is an object
Smalltalk vs. Objective-C Klassen als Objekte Klassendeklarationen Selektoren als first-class values Objekt-Erzeugung Implementierung: Eigene VM vs. Einbettung in C Smalltalk: Everything is an object Klassen
