Software Engineering für moderne, parallele Plattformen. 6. Parallelität in C/C++ Dr. Victor Pankratius. Dr. Victor Pankratius
|
|
- Hermann Burgstaller
- vor 8 Jahren
- Abrufe
Transkript
1 Software Engineering für moderne, parallele Plattformen 6. Parallelität in C/C++ IPD Tichy- Lehrstuhl für Programmiersysteme KIT die Kooperation von Forschungszentrum Karlsruhe GmbH und Universität Karlsruhe (TH)
2 Agenda Parallele Programmierung in C/C++ Allgemeines Ausgewählte Bibliotheksansätze Pthreads Threading Building Blocks OpenMP 2
3 Allgemeines In C/C++ gibt es momentan keine native Unterstützung für Parallelität Ansätze zur Erweiterung: Bibliotheken Spracherweiterungen Im Standardisierungsgremium von C++ wurden Erweiterungen im Hinblick auf Fäden und Sperren diskutiert ( C++0x Draft März 2009) 3
4 Pthreads Überblick (1) Bibliothek zum Arbeiten mit Fäden in C POSIX Threads IEEE-Standard (IEEE Std , 2004) Portable Operating System Interface Beschreibt Schnittstelle zwischen Applikationen und Betriebssystem Unix-Derivate halten sich mehr oder weniger daran Inzwischen auch für Windows erhältlich (Pthreads-win32) Verteilung von Fäden auf Prozessoren / Kerne sowie Ablaufplanung übernimmt das Betriebssystem 4
5 Pthreads Überblick (3) Pthreads Schnittstelle enthält mehr als 60 Funktionen Bezeichner beginnen mit pthread_ Typ pthread_ pthread_attr_ pthread_mutex_ pthread_mutexattr_ pthread_cond_ pthread_key_ Beschreibung Basisfunktionen (z.b. create, ) Fadenattribute (z.b. Scheduling, Priorität) Mutex-Variablen (z.b. init, lock, unlock) Mutex-Attribute (z.b. Mutex-Typ normal, recursive, ) Bedingungsvariablen ( wait, signal ) fadenspezifische Daten (erzeugt z.b. Datenschlüssel, der für alle Fäden sichtbar ist) 5
6 PThreads Erzeugen von Fäden (1) Jede Quelltextdatei, die die Pthreads-Bibliothek verwendet, muss pthread.h einbinden Initial hat das main()-programm einen Hauptfaden Alle anderen Fäden werden explizit vom Programmierer erzeugt pthread_create erzeugt und startet einen neuen Faden 6
7 PThreads Beispiel #include <pthread.h> #include <stdio.h> //Funktion, die ein Faden ausführen soll void* hello(void* id) { printf("%d: Hello world!\n", *((int*) id)); return 0; } int main(int argc, char* argv[]) { const int COUNT = 5; int i; pthread t thread[count]; int ids[count]; for (i = 0; i < COUNT; i++) { ids[i] = i; int retval = pthread create(&thread[i], NULL, hello, &ids[i]); if (retval) { perror("pthread_create failed"); return 1;} } for (i = 0; i < COUNT; i++) pthread_join(thread[i], NULL); return 0; } 7
8 PThreads Erzeugen von Fäden (2) int pthread_create ( pthread_t *tid, const pthread_attr_t *attr, void pthread_attr_t *(*start) (void *), void *arg); Erzeugt einen Faden, der die Funktion start mit Argument arg ausführt Aufruf ist asynchron implementierungsabhängig: Max. Anzahl erzeugbarer Fäden Argument attr spezifiziert optionale Attribute Z.B. für Scheduling, Priorität (Standard: NULL) Nach der Fadenerzeugung wird tid für Identifikation benutzt Fäden können selbst weitere Fäden erzeugen 8
9 PThreads Beenden von Fäden Verschiedene Möglichkeiten: Wenn main() endet, werden alle Fäden zerstört Faden kehrt von seiner Start-Routine zurück Faden ruft pthread_exit auf Achtung: Aufräumarbeiten werden nicht durchgeführt (z.b. können Dateien offen bleiben) Faden wird durch Aufruf von pthread_cancel durch einen anderen Faden abgebrochen Der gesamte Prozess wird durch den Aufruf von exec oder exit beendet 9
10 PThreads Beitreten eines Fadens ( Join ) int pthread_join( pthread_t thread, void **value_ptr); Hauptfaden pthread_create() Arbeiterfaden pthread_join() pthread_exit() der aufrufende Faden blockiert, bis der Faden mit der spezifizierten ID thread terminiert entsprechender Faden muss joinable sein val_ptr: Rückgabewert des beigetretenen Threads abfangen zurückgegebener Typ: (void *) NULL, wenn kein Rückgabewert erwartet wird 10
11 PThreads Lebenszyklus eines Fadens erzeugt Fertig zum Ausführen, wartet jedoch auf Prozessor ready Für Ausführung eingeteilt (scheduled) Warten beendet unterbrochen running Warten auf Ressource Wird gerade ausgeführt Fertig, cancel oder exit blocked Kann nicht ausgeführt werden (wartet z.b. auf Mutex, E/A,..) terminated Von start-funktion zurückgekehrt oder pthread_exit oder cancel 11
12 PThreads Mutex-Variablen (1) Mutex-Variable pthread_mutex_t mymutex; Muss vor Gebrauch initialisiert werden (zwei Möglichkeiten): int pthread_mutex_init( mutex, attr ); pthread_mutex_t mtx1 = PTHREAD_MUTEX_INITIALIZER //Makro Mutex-Variable wird vom aufrufenden Thread gehalten, bis dieser sie wieder freigibt ( unlock ) 12
13 PThreads Mutex-Variablen (2) Sperren / Entsperren int pthread_mutex_lock( mutex ); int pthread_mutex_unlock( mutex ); 13
14 PThreads Mutex-Variablen - Beispiel #define NUMTHREADS 4 pthread_mutex_t gmutex; int g_sum = 0; void *threadfunc(void *arg) { int mysum = bigcomputation(); pthread_mutex_lock( &gmutex ); g_sum += mysum; pthread_mutex_unlock( &gmutex ); } // kritischer Abschnitt main() { pthread_t hthread[numthreads]; pthread_mutex_init( &gmutex, NULL ); for (int i = 0; i < NUMTHREADS; i++) pthread_create(&hthread[i],null,threadfunc,null); 14 } for (int i = 0; i < NUMTHREADS; i++) pthread_join(hthread[i]); printf ( Global sum = %f\n, g_sum); Prof. Dr. W. F. Tichy, Dr. V. Pankratius, F. Otto
15 PThreads Mutex-Typen int pthread_mutexattr_settype( pthread_mutexattr_t *attr, int type); PTHREAD_MUTEX_NORMAL Faden, der bereits gesetzte Sperre noch einmal sperren will, erzeugt Verklemmung (Deadlock) trylock() verwenden. Verhalten undefiniert, wenn unlock bei nicht gesetzter Sperre durchgeführt wird bzw. wenn zweiter Faden Sperre eines anderen Fadens entsperren will. PTHREAD_MUTEX_ERRORCHECK Obige Operationen erzeugen Fehlermeldungen. PTHREAD_MUTEX_RECURSIVE Faden, der bereits Sperre hält, kann sie erneut akquirieren. Gleiche Anzahl von unlock-aufrufen nötig, um Sperre freizugeben. Rest der obigen Operationen erzeugt Fehlermeldung. PTHREAD_MUTEX_DEFAULT Im Standard: An implementation may map this mutex to one of the other mutex types 15
16 PThreads Bedingungsvariablen Bedingungsvariablen (Condition Variables) Signal / Wait Mechanismus in PThreads Warten, bis bestimmte Bedingung erfüllt ist Hintergrund: Effizient warten (ohne Polling) und Sperren in der Zwischenzeit aufgeben, um Fortschritt zu ermöglichen Wert der Bedingungsvariablen bestimmt, ob Faden warten muss oder mit Ausführung fortfahren darf 16
17 PThreads Bedingungsvariablen Prinzip Faden 1 Faden 2 pthread_mutex_lock(&mtx); while (state!= 5) { pthread_cond_wait(&cv,&mtx); } pthread_mutex_unlock(&mtx); acquiriere mutex while (negierte Bedingung ist wahr) {wait auf Bedingungsvariable} //else Kritischer Abschnitt gib mutex frei pthread_mutex_lock(&mtx); state++; pthread_cond_broadcast(&cv); pthread_mutex_unlock(&mtx); Mutex wird automatisch freigegeben, solange der Faden wartet 17
18 PThreads Bedingungsvariablen pthread_cond_t mycond; Initialisieren vor Gebrauch bzw. Zerstören einer Bedingungsvariable pthread_cond_init( cond, attr ) pthread_cond_destroy( cond ) pthread_cond_wait( cond, mutex ) Blockiert Faden, bis er ein entsprechendes Signal über eine Bedingungsvariable erhält (mutex wird währenddessen freigegeben) Muss mit gesperrter mutex-variablen aufgerufen werden (sonst undef.) pthread_cond_signal( cond ) Weckt mindestens einen der blockierten Fäden auf pthread_cond_broadcast( cond ) Alle blockierten Fäden werden aufgeweckt 18 18
19 PThreads Bedingungsvariablen Signale werden nicht gespeichert Wenn kein Faden wartet, ist ein zu dem Zeitpunkt gesendetes Signal verloren ( lost signal ) Ein Faden verhungert, wenn er auf ein Signal wartet, das nicht mehr gesendet wird 19
20 Threading Building Blocks Überblick (1) Intels Bibliotheksansatz zum parallelen Programmieren in C/C++ Open Source (aktuelle Version: 3.0) Ein TBB-Faden intern realisiert als Hüllklasse um plattformspezifischen Faden (Win32 API, PThreads) Konstrukte auf höherer Abstraktionsebene als PThreads, z.b. Parallele Schleifen Fließband (Pipeline) Aufgabenorientierter Parallelismus (Task Parallelism) 20
21 Threading Building Blocks Überblick (2) Bibliothek kann gleichzeitig auch mit anderen Bibliotheken oder OpenMP verwendet werden Im Folgenden einige ausgewählte Inhalte 21
22 Threading Building Blocks Überblick (3) Historisches Pragmas OpenMP fork/join tasks Languages Threaded-C continuation tasks task stealing Cilk space efficient scheduler cache-oblivious algorithms OpenMP taskqueue while and recursion Libraries JSR166 containers Chare Kernel STL small tasks generic programming STAPL recursive ranges 2006 ECMA CLI parallel iteration classes Intel Threading Building Blocks McRT 22 Key influences on design of Intel Threading Building Blocks Reinders, Intel Threading Building Blocks, O Reilly, 2007
23 Threading Building Blocks Überblick (4) Konstrukte parallel_for parallel_do parallel_reduce pipeline parallel_sort parallel_scan Container concurrent_hash_map concurrent_queue concurrent_vector Aufgabenabwickler (Task Scheduler) 23 Konstrukte für Synchronisation atomic, spin_mutex, spin_rw_mutex, queuing_mutex, queuing_rw_mutex, mutex Konstrukte zur Speicherallokation cache_aligned_allocator scalable_allocator
24 Threading Building Blocks Minimales Programmgerüst Initialisiert Task Scheduler #include tbb/task_scheduler_init.h using namespace tbb; int main() { task_scheduler_init init; return 0; } 24
25 Threading Building Blocks Container Die Container-Datenstrukturen in der Standard Template Library von C++ sind im parallelen Fall nicht anwendbar Threading Building Blocks stellt folgende Container zur Verfügung concurrent_hash_map Entwickler kann Hash- und Vergleichsoperationen selbst definieren concurrent_vector Größe dynamisch änderbar concurrent_queue Schlange mit blockierenden und nicht blockierende Operationen (pop bzw. pop_if_present) Aktives Warten beim Blockieren Wartezeiten sollten kurz sein! 25
26 Vorbereitung zu Parallel For Exkurs: Funktionsobjekte in C++ (1) Konstruktion einer Klasse die wie eine Funktion benutzt werden kann Überlädt operator() Operator für Methodenaufruf Kann Zustand kapseln (im Gegensatz zu reinen Funktionszeigern) Es kann mehrere Objektinstanzen geben class MyFunc {... public: void operator() (...) {...} }; MyFunc f; f(...); //ruft MyFunc::operator() auf 26
27 Vorbereitung zu Parallel For Exkurs: Funktionsobjekte in C++ (2) Beispiel: Akkumulation template<class T> class AccumulateSum { T accvalue; public: Sum(T initvalue) {accvalue=initvalue;} void operator()(t x) {accvalue +=x;} T result() const {return accvalue;} }; void test (list<double>& mylist) { AccumulateSum<double> accsumobj(0); //rufe accsumobj() für jedes Element der Liste auf for_each(mylist.begin(), mylist.end(), accsumobj); 27 } cout << "Die Summe ist: "<<accsumobj.result() << n ;
28 Threading Building Blocks Schleifen Beispiel: Sequenzielles Manipulieren eines Arrays void ChangeArraySerial (int* a, int n) { for (int i=0; i<n; i++) { Foo (a[i]); } } 28
29 Threading Building Blocks Parallel For #include "tbb/blocked_range.h" #include "tbb/parallel_for.h using namespace tbb; Aufgabe, die parallel ausgeführt werden soll class ChangeArray { int* a; public: ChangeArray(int* _a) {a=_a;} void operator()(const blocked_range<int>& r) const { for (int i=r.begin(); i!=r.end(); i++){ Foo(a[i]); }}}; 29 void ChangeArrayParallel (int* a, int n) { parallel_for(blocked_range<int>(0,n,agrainsize), ChangeArray(a)); } Rufe generische Funktion auf: parallel_for<range, body> hier mit: range blocked_range; body ChangeArray
30 Threading Building Blocks Parallel For 30 #include "tbb/blocked_range.h" #include Repräsentiert "tbb/parallel_for.h Intervall using Allgemein namespace kann range tbb; ein Intervall rekursiv in zwei Teile aufteilen, bis eine class vordefinierten ChangeArray Größe erreicht { ist int* (unterschiedliche a; Arten der Aufteilung public: möglich) ChangeArray(int* _a) {a=_a;} blocked_range: void operator()(const eindimensionaler, blocked_range<int>& r) const { gleichmäßig for (int aufgeteilter i=r.begin(); Iterationsraum i!=r.end(); i++){ über int Foo(a[i]); }}}; iteriere von 0 Kleinste bis n-1 Intervallgröße void ChangeArrayParallel (int* a, int n) { parallel_for(blocked_range<int>(0,n,agrainsize), ChangeArray(a)); }
31 Threading Building Blocks Parallel For 31 #include "tbb/blocked_range.h" #include "tbb/parallel_for.h using namespace tbb; class ChangeArray { int* a; public: ChangeArray(int* _a) {a=_a;} void operator()(const blocked_range<int>& r) const { }}}; for (int i=r.begin(); i!=r.end(); i++){ Foo(a[i]); void ChangeArrayParallel (int* a, int n) { parallel_for(blocked_range<int>(0,n,agrainsize), ChangeArray(a)); } Aus ChangeArray wird Funktionsobjekt erzeugt Für jeden Arbeiterfaden werden durch parallel_for separate Kopien des Funktionsobjekts mit unterschiedlichen Intervallgrenzen erzeugt modifizierter Schleifenrumpf aus dem sequenziellen Fall
32 Threading Building Blocks Parallel For und Lambda-Ausdrücke Anmerkung: Hätte C++ folgende Spracherweiterung, könnte man auf explizite Erzeugung von Funktionsobjekten verzichten //mit Lambda-Ausdruck 32 void ParallelApplyFoo(size_t n, int x) { parallel_for ( blocked_range<size_t>(0,n,10), <>(const blocked_range<size_t>& r) { for(size_t i=r.begin(); i<r.end();++i) Schleifenrumpf Foo(i,x); } Im C++ Standardkomittee vorgeschlagene Erweiterung für ); Lambda-Ausdrücke (vgl. Willcock, Lambda expressions and closures for C++, } 2006 und Järvi, Lambda Functions for C++0x, ACM SAC, 2008). Bedeutung von <> : Compiler soll automatisch den nachfolgenden Ausdruck in ein Funktionsobjekt konvertieren. Lambda-Ausdrücke würden generell die Übergabe von Code-Blöcken als Parameter erlauben und Schreibarbeit vereinfachen. (vgl. auch C# Delegates)
33 Threading Building Blocks Parallel For Prinzip der Gebietszerlegung - Aufgabenbaum Teile Intervall ( range ) auf [data, data+n[ [data, data+n/2[ [data+n/2, data+n[ rekursiv [data, data+n/k[ bis grainsize [data, data+grainsize[ Tasks für Work Stealing 33
34 Threading Building Blocks Partitionierer Spezifiziert Strategie für Ausführung von Schleifen parallel_for u.a. Konstrukte rufen Partitionierer auf, wenn range aufgeteilt werden soll jedes range-objekt ist mit einem partitioner-objekt assoziiert Partitionierer bestimmt wie Intervall aufgeteilt werden soll Gebietszerlegung Bis zu welcher Intervallgröße grainsize 34
35 Threading Building Blocks Partitionierer Partitionierer kann z.b. als optionaler dritter Parameter für parallel_for verwendet werden simple_partitioner (Standard) Aufteilung bis zu kleinsten Teilen der Größe grainsize auto_partitioner Gerade genug Aufteilungen, um Lastverteilung zu ermöglichen. Bei Bedarf werden neue Partitionen erzeugt. affinity_partitioner Wie auto_partitioner, jedoch mit besserer Cache-Affinität. Benachbarte Iterationen werden ggf. auf gleiche Arbeiterfäden verteilt. 35
36 Threading Building Blocks Fließbänder (1) Fließband (Pipeline): Besteht aus Sequenz von Filtern Auszug: class pipeline { public:... void add_filter( filter& f ); void run(size_t max_num_of_live_tokens); }; Kontrolliert die Anzahl der parallelen Tasks, die maximal existieren können Ein Filter f arbeitet sequenziell oder parallel mit mehreren Fäden Übergabe von Elementen zwischen Stufen erfolgt über Zeiger 36
37 Threading Building Blocks Fließbänder (2) Filter werden von Klasse filter geerbt Filter überschreibt virtual void* operator()( void * item ); Diese Methode wird von der Pipeline aufgerufen, um innerhalb eines Filters ein Element zu verarbeiten Parameter item zeigt auf das Element, das verarbeitet werden soll Der Rückgabewert zeigt auf das Element, das der nächsten Stufe übergeben werden soll Beispiel mit dreistufiger Pipeline: Lese Datei ein, transformiere Kleinbuchstaben in Großbuchstaben, schreibe Ergebnis in Datei 37
38 Threading Building Blocks Fließbänder (3) Beispiel...//FILE* input_file = fopen(inputfilename,"r");...//file* output_file = fopen(outputfilename,"r"); // Create the pipeline tbb::pipeline pipeline; // Erzeuge Eingabefilter (lese Datei ein, generiere Strom) MyInputFilter input_filter( input_file ); pipeline.add_filter( input_filter ); // Verarbeitungsfilter (transf. zu Großbuchstaben) MyTransformFilter transform_filter; pipeline.add_filter( transform_filter ); // Ausgabefilter für Dateiausgabe MyOutputFilter output_filter( output_file ); pipeline.add_filter( output_filter ); Datei Filter 1 Zeichenblöcke einlesen Filter 2 (klein groß) Filter 3 Dateiausgabe 38 // Führe Pipeline aus pipeline.run( MyInputFilter::n_buffer ); pipeline.clear(); fclose( output_file ); fclose( input_file );...
39 Threading Building Blocks Fließbänder (4) Beispiel // Mittlerer Filter //transformiert Keinbuchstaben zu Großbuchstaben 39 class MyTransformFilter: public tbb::filter { public: MyTransformFilter(); void* operator()( void* item ); //überschreibe Methode };... Konstruktor etc.... Operator() bekommt Zeiger auf Block von Zeichen und liefert einen Zeiger auf konvertiertem Block, der der nächsten Stufe übergeben werden soll. void* MyTransformFilter::operator()( void* item ) { MyBuffer& b = *static_cast<mybuffer*>(item); // konvertiere Puffer zu Großbuchstaben return &b; } Explizite Typkonvertierung, die zur Übersetzungszeit geprüft wird Semantik: Speicher, worauf item zeigt, wird als MyBuffer benutzt
40 Threading Building Blocks Fließbänder (5) Die Bibliothek unterstützt zur Zeit nur lineare Fließbänder Nicht-lineare Fließbänder könnten behelfsmäßig mit Hilfe einer topologischen Sortierung der Stufen durch linearer Fließbänder realisiert werden A 1 C 3 D 4 B 2 E 5 40
41 Threading Building Blocks Konstrukte zur Synchronisation Fair (bevorzugt länger wartende Fäden) Reentrant (Bei Rekursion anwendbar) mutex BS abhängig Nein Ja spin_mutex Nein Nein Nein queuing_mutex Ja Nein Nein spin_rw_mutex Nein Nein Nein queuing_rw_mutex Ja Nein Nein schlafen beim Warten (sonst Schleife) Scoped Locking -Muster wird benutzt Sperre in Wächterklasse Kein explizites Freigeben, Destruktor der Wächterklasse gibt Sperre automatisch frei Sicher beim Auslösen von Ausnahmen 41
42 Threading Building Blocks Atomare Operationen atomic<t> bietet atomare Operationen auf Typ T = x Lese Wert von x x = Schreibe Wert von x und gib ihn zurück x.fetch_and_store(y) Setze y=x und liefere alten x-wert x.fetch_and_add(y) Setze x+=y und liefere alten x-wert x.compare_and_swap(n,z) Wenn x==z, setze x=n; liefere in beiden Fällen alten x-wert zurück Interne Implementierung bildet atomare Operationen auf native, atomare Prozessorbefehle ab Vordefinierte Abbildungen für verschiedene Prozessor-Plattformen Z.B. compare_and_swap... mov rax,r8 lock cmpxchg [rcx],dl ret... 42
43 Threading Building Blocks Aufspalten von Aufgaben Illustration am Beispiel // Fibonacci sequenziell long SerialFib( long n ) { if( n<2 ) return n; else return SerialFib(n-1)+SerialFib(n-2); } 43
44 Threading Building Blocks Aufspalten von Aufgaben Parallele Version Aufgaben müssen mit allocate- Methoden Speicher reservieren Erzeugt Wurzel des Aufgabenbaums Konstruktor von FibTask long ParallelFib( long n ) { long sum; FibTask& a = *new(task::allocate_root()) FibTask(n,&sum); task::spawn_root_and_wait(a); return sum; } Ausführen und warten bis fertig Anmerkung: Hier steht Demonstration des Task-Konzepts im Vordergrund. Es gibt effizientere Möglichkeiten, Fibonacci-Zahlen zu berechnen. 44
45 Threading Building Blocks Aufspalten von Aufgaben class FibTask: public task { public: const long n; long* const sum; FibTask( long n_, long* sum_ ):n(n_), sum(sum_) {} task* execute() { if( n<cutoff ) { *sum = SerialFib(n); } else { long x, y; FibTask& a = *new( allocate_child() ) FibTask(n-1,&x); FibTask& b = *new( allocate_child() ) FibTask(n-2,&y); set_ref_count(3); spawn( b ); spawn_and_wait_for_all( a ); //starte a, warte auf *sum = x+y; //alle Kinder, d.h. a,b } return NULL; }}; 45
46 Ausblick Weitere Bibliotheken zur parallelen Programmierung in C/C++ Boost ( Einige Auszüge: Klasse boost::thread erzeugt und verwaltet Faden Fäden können zu Gruppen hinzugefügt werden Sperren Konzepte Lockable: Sperre exklusiv für einen Faden Timed lockable: Blockierendes Warten auf Sperre kann zeitlich begrenzt werden SharedLockable: Wie z.b. bei Lese-Schreib-Sperre (mehrere Fäden können gleichzeitig lesen, aber nur einer schreiben) UpgradeLockable: Von gemeinsamer Nutzung einer Sperre auf exklusive Nutzung Barrieren Bedingungsvariablen 46
47 Ausblick Weitere Bibliotheken zur parallelen Programmierung in C/C++ QtConcurrent (trolltech.com) Konzepte auf niedriger Abstraktionsebene (Sperren, Semaphore, ) Konzepte auf höherer Abstraktionsebene QtConcurrent::map() wendet Funktion parallel auf mehrere Elemene an QtConcurrent::mappedReduced() nach map wird Ergebnis mit Reduktionsoperation zu einem einzigen Ergebnis verdichtet QtConcurrent::filter() benutzt Filterfunktion um Elemente zu entfernen QtConcurrent::filteredReduced() gefiltertes Ergebnis Ergebnis wird mit Reduktionsoperation zu einem einzigen Ergebnis verdichtet QtConcurrent::run() führt eine Funktion in einem neuen Faden aus QFuture wie Futures QFutureWatcher Überwachen einer QFuture 47
48 Ausblick Weitere Bibliotheken zur parallelen Programmierung in C/C++ GNU libstdc++ parallel mode Parallelisierte Algorithmen der Standard Template Library Z.B. Suche, Sortieren, numerische Algorithmen, Im gcc V 4.3 parallel mode bereits enthalten In Karlsruhe entstanden 48
PThreads. Pthreads. Jeder Hersteller hatte eine eigene Implementierung von Threads oder light weight processes
PThreads Prozesse und Threads Ein Unix-Prozess hat IDs (process,user,group) Umgebungsvariablen Verzeichnis Programmcode Register, Stack, Heap Dateideskriptoren, Signale message queues, pipes, shared memory
MehrThreads Einführung. Zustände von Threads
Threads Einführung Parallelität : Zerlegung von Problemstellungen in Teilaufgaben, die parallelel ausgeführt werden können (einfachere Strukturen, eventuell schneller, Voraussetzung für Mehrprozessorarchitekturen)
MehrSoftwaresysteme I Übungen Jürgen Kleinöder Universität Erlangen-Nürnberg Informatik 4, 2007 U9.fm
U9 9. Übung U9 9. Übung U9-1 Überblick Besprechung Aufgabe 6 (printdir) Posix-Threads U9.1 U9-2 Motivation von Threads U9-2 Motivation von Threads UNIX-Prozesskonzept: eine Ausführungsumgebung (virtueller
MehrShared-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
MehrU9-3 Vergleich von Thread-Konzepten. U9-2 Motivation von Threads. U9-3 Vergleich von Thread-Konzepten (2) U9-1 Überblick
U9 9. Übung U9 9. Übung U9-1 Überblick Besprechung Aufgabe 6 (printdir) Posix-Threads U9.1 User-Level Threads: Federgewichtige Prozesse Realisierung von Threads auf Anwendungsebene innerhalb eines Prozesses
MehrMonitore. Klicken bearbeiten
Sascha Kretzschmann Institut für Informatik Monitore Formatvorlage und deren Umsetzung des Untertitelmasters durch Klicken bearbeiten Inhalt 1. Monitore und Concurrent Pascal 1.1 Warum Monitore? 1.2 Monitordefinition
MehrPOSIX-Threads. Aufgabe 9 SP - Ü U10.1
U10 10. Übung U10 10. Übung POSIX-Threads Aufgabe 9 U10.1 U10-1 Motivation von Threads U10-1 Motivation von Threads UNIX-Prozesskonzept: eine Ausführungsumgebung (virtueller Adressraum, Rechte, Priorität,...)
MehrFunktionen 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
MehrI 7. Übung. I-1 Überblick. Besprechung Aufgabe 5 (mysh) Online-Evaluation. Posix Threads. Ü SoS I I.1
I 7. Übung I 7. Übung I-1 Überblick Besprechung Aufgabe 5 (mysh) Online-Evaluation Posix Threads I.1 I-2 Evaluation I-2 Evaluation Online-Evaluation von Vorlesung und Übung SOS zwei TANs, zwei Fragebogen
MehrObjektorientierte Programmierung
Objektorientierte Programmierung 1 Geschichte Dahl, Nygaard: Simula 67 (Algol 60 + Objektorientierung) Kay et al.: Smalltalk (erste rein-objektorientierte Sprache) Object Pascal, Objective C, C++ (wiederum
MehrEinführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung)
Wintersemester 2007/08 Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fakultät für Informatik Lehrstuhl
Mehr1 Vom Problem zum Programm
Hintergrundinformationen zur Vorlesung GRUNDLAGEN DER INFORMATIK I Studiengang Elektrotechnik WS 02/03 AG Betriebssysteme FB3 Kirsten Berkenkötter 1 Vom Problem zum Programm Aufgabenstellung analysieren
MehrSoftwarelösungen: Versuch 4
Softwarelösungen: Versuch 4 Nichtstun in Schleife wird ersetzt durch zeitweilige Zurücknahme der Anforderung, um es anderen Prozessen zu erlauben, die Ressource zu belegen: /* Prozess 0 */ wiederhole flag[0]
MehrZählen von Objekten einer bestimmten Klasse
Zählen von Objekten einer bestimmten Klasse Ziel, Inhalt Zur Übung versuchen wir eine Klasse zu schreiben, mit der es möglich ist Objekte einer bestimmten Klasse zu zählen. Wir werden den ++ und den --
MehrVorkurs C++ Programmierung
Vorkurs C++ Programmierung Klassen Letzte Stunde Speicherverwaltung automatische Speicherverwaltung auf dem Stack dynamische Speicherverwaltung auf dem Heap new/new[] und delete/delete[] Speicherklassen:
MehrProgrammierkurs Java
Programmierkurs Java Dr. Dietrich Boles Aufgaben zu UE16-Rekursion (Stand 09.12.2011) Aufgabe 1: Implementieren Sie in Java ein Programm, das solange einzelne Zeichen vom Terminal einliest, bis ein #-Zeichen
MehrOpenMP am Beispiel der Matrizenmultiplikation
OpenMP am Beispiel der Matrizenmultiplikation David J. Meder, Dr. Victor Pankratius IPD Tichy Lehrstuhl für Programmiersysteme KIT die Kooperation von Forschungszentrum Karlsruhe GmbH und Universität Karlsruhe
MehrSoftware Engineering. Zur Architektur der Applikation Data Repository. Franz-Josef Elmer, Universität Basel, HS 2015
Software Engineering Zur Architektur der Applikation Data Repository Franz-Josef Elmer, Universität Basel, HS 2015 Software Engineering: Mit acht bewährten Praktiken zu gutem Code 2 Schichtarchitektur
MehrU8 POSIX-Threads U8 POSIX-Threads
U8 POSIX-Threads U8 POSIX-Threads Motivation Thread-Konzepte pthread-api pthread-koordinierung U8.1 U8-1 Motivation von Threads U8-1 Motivation von Threads UNIX-Prozesskonzept: eine Ausführungsumgebung
MehrRTEMS- Echtzeitbetriebssystem
RTEMS- Echtzeitbetriebssystem Name: Hussein Hammoud Matrikel- Nr.: 230768 Studiengang: Technische Informatik Fach: Projekt Eingebettete Kommunikation Technische Universität Berlin Sommersemester 2006 RTEMS-
MehrNebenläufige Programmierung
Nebenläufige Programmierung Perspektiven der Informatik 27. Januar 2003 Gert Smolka Telefon-Szenario Eine Telefonzelle Mehrere Personen wollen telefonieren Immer nur eine Person kann telefonieren Ressource
MehrBinäre Bäume. 1. Allgemeines. 2. Funktionsweise. 2.1 Eintragen
Binäre Bäume 1. Allgemeines Binäre Bäume werden grundsätzlich verwendet, um Zahlen der Größe nach, oder Wörter dem Alphabet nach zu sortieren. Dem einfacheren Verständnis zu Liebe werde ich mich hier besonders
MehrJava Kurs für Anfänger Einheit 5 Methoden
Java Kurs für Anfänger Einheit 5 Methoden Ludwig-Maximilians-Universität München (Institut für Informatik: Programmierung und Softwaretechnik von Prof.Wirsing) 22. Juni 2009 Inhaltsverzeichnis Methoden
MehrEinführung in die Programmierung
: Inhalt 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 - mit / ohne Parameter - mit / ohne Rückgabewerte
MehrU8-1 Motivation von Threads. U8-2 Vergleich von Thread-Konzepten. U8-2 Vergleich von Thread-Konzepten (2) Motivation
U8 POSIX-Threads U8 POSIX-Threads U8-1 Motivation von Threads U8-1 Motivation von Threads Motivation Thread-Konzepte UNIX-Prozesskonzept: eine Ausführungsumgebung (virtueller Adressraum, Rechte, Priorität,...)
MehrSysteme 1. Kapitel 6. Nebenläufigkeit und wechselseitiger Ausschluss
Systeme 1 Kapitel 6 Nebenläufigkeit und wechselseitiger Ausschluss Threads Die Adressräume verschiedener Prozesse sind getrennt und geschützt gegen den Zugriff anderer Prozesse. Threads sind leichtgewichtige
MehrKlausur in Programmieren
Studiengang Sensorik/Sensorsystemtechnik Note / normierte Punkte Klausur in Programmieren Sommer 2014, 16. Juli 2014 Dauer: 1,5h Hilfsmittel: Keine (Wörterbücher sind auf Nachfrage erlaubt) Name: Matrikelnr.:
MehrProzeß P1 Prozeß P2. Zur Synchronisation stehen den beiden Prozessen binäre Semaphore und die beiden Funktionen
Seite 8 A UFGABE 11 INTERP ROZEßKOMMUNIKATION Das folgende Petrinetz zeigt zwei verkoppelte Prozesse P1 und P2. Die Transitionen a und b beschreiben Aktionen von P1, die Transitionen c und d Aktionen von
MehrIntel Threading Building Blocks (TBB)
Intel Threading Building Blocks (TBB) Julius Adorf 26.10.2009 Seminar: Semantics of C++ TU München Tejas und Jayhawk? Intel Threading Building Blocks (TBB) Parallelisierung für C++ eine Bibliothek mittlerweile
MehrDämon-Prozesse ( deamon )
Prozesse unter UNIX - Prozessarten Interaktive Prozesse Shell-Prozesse arbeiten mit stdin ( Tastatur ) und stdout ( Bildschirm ) Dämon-Prozesse ( deamon ) arbeiten im Hintergrund ohne stdin und stdout
MehrUnterprogramme. Funktionen. Bedeutung von Funktionen in C++ Definition einer Funktion. Definition einer Prozedur
Unterprogramme Unterprogramme sind abgekapselte Programmfragmente, welche es erlauben, bestimmte Aufgaben in wiederverwendbarer Art umzusetzen. Man unterscheidet zwischen Unterprogrammen mit Rückgabewert
MehrObjektorientierte Programmierung. Kapitel 12: Interfaces
12. Interfaces 1/14 Objektorientierte Programmierung Kapitel 12: Interfaces Stefan Brass Martin-Luther-Universität Halle-Wittenberg Wintersemester 2012/13 http://www.informatik.uni-halle.de/ brass/oop12/
MehrÜbung Grundlagen der Programmierung. Übung 03: Schleifen. Testplan Testergebnisse
Übung 03: Schleifen Abgabetermin: xx.xx.xxxx Name: Matrikelnummer: Gruppe: G1 (Prähofer) G2 (Prähofer) G3 (Wolfinger) Aufgabe Punkte gelöst abzugeben schriftlich abzugeben elektronisch Aufgabe 03.1 12
MehrEinführung in die Java- Programmierung
Einführung in die Java- Programmierung Dr. Volker Riediger Tassilo Horn riediger horn@uni-koblenz.de WiSe 2012/13 1 Wichtig... Mittags Pommes... Praktikum A 230 C 207 (Madeleine) F 112 F 113 (Kevin) E
MehrTafelübung zu BS 2. Threadsynchronisation
Tafelübung zu BS 2. Threadsynchronisation Olaf Spinczyk Arbeitsgruppe Eingebettete Systemsoftware Lehrstuhl für Informatik 12 TU Dortmund olaf.spinczyk@tu-dortmund.de http://ess.cs.uni-dortmund.de/~os/
MehrSoftware Engineering Interaktionsdiagramme
Software Engineering Interaktionsdiagramme Prof. Adrian A. Müller, PMP, PSM 1, CSM Fachbereich Informatik und Mikrosystemtechnik 1 Nachrichtenaustausch Welche Nachrichten werden ausgetauscht? (Methodenaufrufe)
MehrProgrammieren in Java
Programmieren in Java objektorientierte Programmierung 2 2 Zusammenhang Klasse-Datei In jeder *.java Datei kann es genau eine public-klasse geben wobei Klassen- und Dateiname übereinstimmen. Es können
MehrProgrammieren in C. Felder, Schleifen und Fließkommaarithmetik. Prof. Dr. Nikolaus Wulff
Programmieren in C Felder, Schleifen und Fließkommaarithmetik Prof. Dr. Nikolaus Wulff Addition von Zahlen 1 2 3 4 5 #include int main() { int x,y,z,sum; x = 1; y = 2; z = 4; sum = x + y + z;
MehrPrinzipien Objektorientierter Programmierung
Prinzipien Objektorientierter Programmierung Valerian Wintner Inhaltsverzeichnis 1 Vorwort 1 2 Kapselung 1 3 Polymorphie 2 3.1 Dynamische Polymorphie...................... 2 3.2 Statische Polymorphie........................
MehrU6-1 Organisatories. U6-2 Motivation von Threads. U6-3 Vergleich von Thread-Konzepten. Organisatorisches
U6 6. Übung U6 6. Übung U6-1 Organisatories U6-1 Organisatories Organisatorisches Zusätzliche Tafelübung zur S1-Klaurvorbereitung Besprechung Aufgabe 5 (crawl) OSIX-Threads Motivation Thread-Konzepte am
MehrUniversität Karlsruhe (TH)
Universität Karlsruhe (TH) Forschungsuniversität gegründet 1825 ZPL Prof. Dr. Walter F. Tichy Dr. Victor Pankratius Ali Jannesari Agenda 1. ZPL Überblick 2. Konzepte von ZPL Regionen, Region Specifiers
MehrTechnische Dokumentation SilentStatistikTool
Technische Dokumentation SilentStatistikTool Version 1.0 Marko Schröder 1115063 Inhalt Einleitung... 3 Klasse Program... 3 Klasse ArgumentHandler... 3 Bereitgestellte Variablen... 3 Bereitgestellte Methoden...
MehrTipps und Tricks zu Netop Vision und Vision Pro
Tipps und Tricks zu Netop Vision und Vision Pro Anwendungen auf Schülercomputer freigeben und starten Netop Vision ermöglicht Ihnen, Anwendungen und Dateien auf allen Schülercomputern gleichzeitig zu starten.
MehrEinführung in die C++ Programmierung für Ingenieure
Einführung in die C++ Programmierung für Ingenieure MATTHIAS WALTER / JENS KLUNKER Universität Rostock, Lehrstuhl für Modellierung und Simulation 14. November 2012 c 2012 UNIVERSITÄT ROSTOCK FACULTY OF
MehrBesprechung Aufgabe 5 (crawl) POSIX-Threads. Problem: UNIX-Prozesskonzept ist für viele heutige Anwendungen unzureichend
U7 6. Übung U7 6. Übung U7-1 Motivation von Threads U7-1 Motivation von Threads Besprechung Aufgabe 5 (crawl) OSIX-Threads Motivation Thread-Konzepte pthread-ai Koordinierung UNIX-rozesskonzept: eine Ausführungsumgebung
MehrErwin Grüner 09.02.2006
FB Psychologie Uni Marburg 09.02.2006 Themenübersicht Folgende Befehle stehen in R zur Verfügung: {}: Anweisungsblock if: Bedingte Anweisung switch: Fallunterscheidung repeat-schleife while-schleife for-schleife
Mehr.NET Code schützen. Projekt.NET. Version 1.0
.NET Code schützen Projekt.NET Informationsmaterial zum Schützen des.net Codes Version 1.0 Autor: Status: Ablage: Empfänger: Seiten: D. Hoyer 1 / 6 Verteiler : Dokument1 Seite 1 von 1 Änderungsprotokoll
MehrArchitektur Verteilter Systeme Teil 2: Prozesse und Threads
Architektur Verteilter Systeme Teil 2: Prozesse und Threads 21.10.15 1 Übersicht Prozess Thread Scheduler Time Sharing 2 Begriff Prozess und Thread I Prozess = Sequentiell ablaufendes Programm Thread =
MehrApplet Firewall und Freigabe der Objekte
Hauptseminar Applet Firewall und Freigabe der Objekte Nachweis von Sicherheitseigenschaften für JavaCard Jin Zhou Ein Überblick über diesen Vortrag Applet Firewall Kontext JCRE Entry Point Objekt Shareable
MehrUniversität Karlsruhe (TH)
Universität Karlsruhe (TH) Forschungsuniversität gegründet 1825 Cluster-Praktikum Sommersemester 2007 Transparent Replizierte Objekte in JavaParty Institut für Programmstrukturen und Datenorganisation
MehrSEP 114. Design by Contract
Design by Contract SEP 114 Design by Contract Teile das zu entwickelnde Programm in kleine Einheiten (Klassen, Methoden), die unabhängig voneinander entwickelt und überprüft werden können. Einheiten mit
MehrÜbungsblatt 3: Algorithmen in Java & Grammatiken
Humboldt-Universität zu Berlin Grundlagen der Programmierung (Vorlesung von Prof. Bothe) Institut für Informatik WS 15/16 Übungsblatt 3: Algorithmen in Java & Grammatiken Abgabe: bis 9:00 Uhr am 30.11.2015
MehrDeklarationen in C. Prof. Dr. Margarita Esponda
Deklarationen in C 1 Deklarationen Deklarationen spielen eine zentrale Rolle in der C-Programmiersprache. Deklarationen Variablen Funktionen Die Deklarationen von Variablen und Funktionen haben viele Gemeinsamkeiten.
MehrObjektbasierte Entwicklung
Embedded Software Objektbasierte Entwicklung Objektorientierung in C? Prof. Dr. Nikolaus Wulff Objektbasiert entwickeln Ohne C++ wird meist C im alten Stil programmiert. => Ein endlose while-schleife mit
MehrAutomatisierung ( Fernsteuerung ) von Excel unter Microsoft Windows Tilman Küpper (tilman.kuepper@hm.edu)
HMExcel Automatisierung ( Fernsteuerung ) von Excel unter Microsoft Windows Tilman Küpper (tilman.kuepper@hm.edu) Inhalt 1. Einleitung...1 2. Beispiele...2 2.1. Daten in ein Tabellenblatt schreiben...2
MehrComputerarithmetik ( )
Anhang A Computerarithmetik ( ) A.1 Zahlendarstellung im Rechner und Computerarithmetik Prinzipiell ist die Menge der im Computer darstellbaren Zahlen endlich. Wie groß diese Menge ist, hängt von der Rechnerarchitektur
MehrVirtueller Seminarordner Anleitung für die Dozentinnen und Dozenten
Virtueller Seminarordner Anleitung für die Dozentinnen und Dozenten In dem Virtuellen Seminarordner werden für die Teilnehmerinnen und Teilnehmer des Seminars alle für das Seminar wichtigen Informationen,
MehrTutorium Rechnerorganisation
Woche 2 Tutorien 3 und 4 zur Vorlesung Rechnerorganisation 1 Christian A. Mandery: KIT Universität des Landes Baden-Württemberg und nationales Grossforschungszentrum in der Helmholtz-Gemeinschaft www.kit.edu
MehrGrundlagen von Python
Einführung in Python Grundlagen von Python Felix Döring, Felix Wittwer November 17, 2015 Scriptcharakter Programmierparadigmen Imperatives Programmieren Das Scoping Problem Objektorientiertes Programmieren
MehrVerhindert, dass eine Methode überschrieben wird. public final int holekontostand() {...} public final class Girokonto extends Konto {...
PIWIN I Kap. 8 Objektorientierte Programmierung - Vererbung 31 Schlüsselwort: final Verhindert, dass eine Methode überschrieben wird public final int holekontostand() {... Erben von einer Klasse verbieten:
Mehr2. Semester, 2. Prüfung, Lösung
2. Semester, 2. Prüfung, Lösung Name Die gesamte Prüfung bezieht sich auf die Programmierung in C++! Prüfungsdauer: 90 Minuten Mit Kugelschreiber oder Tinte schreiben Lösungen können direkt auf die Aufgabenblätter
MehrKlausurteilnehmer. Wichtige Hinweise. Note: Klausur Informatik Programmierung, 17.09.2012 Seite 1 von 8 HS OWL, FB 7, Malte Wattenberg.
Klausur Informatik Programmierung, 17.09.2012 Seite 1 von 8 Klausurteilnehmer Name: Matrikelnummer: Wichtige Hinweise Es sind keinerlei Hilfsmittel zugelassen auch keine Taschenrechner! Die Klausur dauert
MehrEinführung in die Programmierung (EPR)
Goethe-Center for Scientific Computing (G-CSC) Goethe-Universität Frankfurt am Main Einführung in die Programmierung (EPR) (Übung, Wintersemester 2014/2015) Dr. S. Reiter, M. Rupp, Dr. A. Vogel, Dr. K.
MehrEinführung in die Java- Programmierung
Einführung in die Java- Programmierung Dr. Volker Riediger Tassilo Horn riediger horn@uni-koblenz.de WiSe 2012/13 1 Wichtig... Mittags keine Pommes... Praktikum A 230 C 207 (Madeleine + Esma) F 112 F 113
MehrEinführung in die objektorientierte Programmierung mit Java. Klausur am 19. Oktober 2005
Einführung in die objektorientierte Programmierung mit Java Klausur am 19. Oktober 2005 Matrikelnummer: Nachname: Vorname: Semesteranzahl: Die Klausur besteht aus drei Frageblöcken zu den Inhalten der
MehrProgrammieren. 10. Tutorium 4./ 5. Übungsblatt Referenzen
Programmieren 10. Tutorium 4./ 5. Übungsblatt Inhalt I. Übungsblatt 4 II. III. - Rückgabe und Besprechung - Vorbereitung auf Wiederholung/ Nachtrag - Operatorpräzedenzen IV. Übungsblatt 5 - Vorstellung
MehrM. Graefenhan 2000-12-07. Übungen zu C. Blatt 3. Musterlösung
M. Graefenhan 2000-12-07 Aufgabe Lösungsweg Übungen zu C Blatt 3 Musterlösung Schreiben Sie ein Programm, das die Häufigkeit von Zeichen in einem eingelesenen String feststellt. Benutzen Sie dazu ein zweidimensionales
MehrII. Grundlagen der Programmierung. 9. Datenstrukturen. Daten zusammenfassen. In Java (Forts.): In Java:
Technische Informatik für Ingenieure (TIfI) WS 2005/2006, Vorlesung 9 II. Grundlagen der Programmierung Ekkart Kindler Funktionen und Prozeduren Datenstrukturen 9. Datenstrukturen Daten zusammenfassen
Mehr1 topologisches Sortieren
Wolfgang Hönig / Andreas Ecke WS 09/0 topologisches Sortieren. Überblick. Solange noch Knoten vorhanden: a) Suche Knoten v, zu dem keine Kante führt (Falls nicht vorhanden keine topologische Sortierung
MehrProf. Dr. Uwe Schmidt. 21. August 2007. Aufgaben zur Klausur Objektorientierte Programmierung im SS 2007 (IA 252)
Prof. Dr. Uwe Schmidt 21. August 2007 Aufgaben zur Klausur Objektorientierte Programmierung im SS 2007 (IA 252) Zeit: 75 Minuten erlaubte Hilfsmittel: keine Bitte tragen Sie Ihre Antworten und fertigen
MehrTapps mit XP-Mode unter Windows 7 64 bit (V2.0)
Tapps mit XP-Mode unter Windows 7 64 bit (V2.0) 1 Einleitung... 2 2 Download und Installation... 3 2.1 Installation von WindowsXPMode_de-de.exe... 4 2.2 Installation von Windows6.1-KB958559-x64.msu...
MehrÜbungen zu Einführung in die Informatik: Programmierung und Software-Entwicklung: Lösungsvorschlag
Ludwig-Maximilians-Universität München WS 2015/16 Institut für Informatik Übungsblatt 9 Prof. Dr. R. Hennicker, A. Klarl Übungen zu Einführung in die Informatik: Programmierung und Software-Entwicklung:
MehrEinfache und effiziente Zusammenarbeit in der Cloud. EASY-PM Office Add-Ins Handbuch
Einfache und effiziente Zusammenarbeit in der Cloud EASY-PM Office Add-Ins Handbuch Inhaltsverzeichnis 1. Einführung... 3 2. Ribbonmenü... 4 3. Dokument... 5 3.1 Öffnen... 5 3.2 Speichern... 6 3.3 Speichern
MehrSEQUENZDIAGRAMM. Christoph Süsens
SEQUENZDIAGRAMM Christoph Süsens DEFINITION Das Sequenzdiagramm gibt Auskunft darüber: Welche Methoden für die Kommunikation zwischen ausgewählten Objekten zuständig sind. Wie der zeitliche Ablauf von
MehrEinführung in die Programmierung
Name, Vorname Matrikelnummer Probeklausur zur Vorlesung Einführung in die Programmierung WS 2008/09 Dauer: 2 Stunden Hinweise: Schreiben Sie Ihren Namen und Ihre Matrikelnummer auf dieses Deckblatt und
MehrObjektorientierte Programmierung für Anfänger am Beispiel PHP
Objektorientierte Programmierung für Anfänger am Beispiel PHP Johannes Mittendorfer http://jmittendorfer.hostingsociety.com 19. August 2012 Abstract Dieses Dokument soll die Vorteile der objektorientierten
MehrBetriebssysteme. Dipl.-Ing.(FH) Volker Schepper
1. Der Prozess beginnt im Zustand Erzeugt, nachdem sein Vaterprozess den Systemaufruf fork() (s.u.) abgesetzt hat. In diesem Zustand wird der Prozess-Kontext initialisiert. 2. Ist diese Aufbauphase abgeschlossen,
MehrDer Aufruf von DM_in_Euro 1.40 sollte die Ausgabe 1.40 DM = 0.51129 Euro ergeben.
Aufgabe 1.30 : Schreibe ein Programm DM_in_Euro.java zur Umrechnung eines DM-Betrags in Euro unter Verwendung einer Konstanten für den Umrechnungsfaktor. Das Programm soll den DM-Betrag als Parameter verarbeiten.
MehrDesign by Contract with JML
Thema: Design by Contract with JML Proseminar: Assertions Verfasser: Literatur: Betreuer: Natalya Moriz Gary T.Leavens and Yoonsik Cheon: Design by Contract with JML Prof. Dr. Heike Wehrheim 1 Inhalt DBC
MehrComputeranwendung und Programmierung (CuP)
Computeranwendung und Programmierung (CuP) VO: Peter Auer (Informationstechnologie) UE: Norbert Seifter (Angewandet Mathematik) Organisatorisches (Vorlesung) Vorlesungszeiten Montag 11:15 12:45 Freitag
MehrNative Zeichenketten (C-Strings)
Native Zeichenketten (C-Strings)... sind in C/C++ char-arrays. D.h. die Deklaration char msg[80]; kann Zeichenketten bis zur Länge 79 enthalten. (Direkte Zuweisungen wie msg="hallo!" sind jedoch nicht
MehrPthreads. 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
MehrJava: Vererbung. Teil 3: super() www.informatikzentrale.de
Java: Vererbung Teil 3: super() Konstruktor und Vererbung Kindklasse ruft SELBSTSTÄNDIG und IMMER zuerst den Konstruktor der Elternklasse auf! Konstruktor und Vererbung Kindklasse ruft SELBSTSTÄNDIG und
MehrThreads. 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)
Mehr2A Basistechniken: Weitere Aufgaben
2A Basistechniken: Weitere Aufgaben 2A.3 Programmierung unter UNIX/Linux 1. Gegeben sind einige Ausschnitte von C-Programmen, die unter UNIX/Linux ausgeführt werden sollen. Beantworten Sie die zugehörigen
MehrAlgorithmen & Datenstrukturen 1. Klausur
Algorithmen & Datenstrukturen 1. Klausur 7. Juli 2010 Name Matrikelnummer Aufgabe mögliche Punkte erreichte Punkte 1 35 2 30 3 30 4 15 5 40 6 30 Gesamt 180 1 Seite 2 von 14 Aufgabe 1) Programm Analyse
MehrJava Kurs für Anfänger Einheit 4 Klassen und Objekte
Java Kurs für Anfänger Einheit 4 Klassen und Ludwig-Maximilians-Universität München (Institut für Informatik: Programmierung und Softwaretechnik von Prof.Wirsing) 13. Juni 2009 Inhaltsverzeichnis klasse
MehrClient-Server-Beziehungen
Client-Server-Beziehungen Server bietet Dienste an, Client nutzt Dienste Objekt ist gleichzeitig Client und Server Vertrag zwischen Client und Server: Client erfüllt Vorbedingungen eines Dienstes Server
Mehr5 DATEN. 5.1. Variablen. Variablen können beliebige Werte zugewiesen und im Gegensatz zu
Daten Makro + VBA effektiv 5 DATEN 5.1. Variablen Variablen können beliebige Werte zugewiesen und im Gegensatz zu Konstanten jederzeit im Programm verändert werden. Als Variablen können beliebige Zeichenketten
MehrDatensicherung. Beschreibung der Datensicherung
Datensicherung Mit dem Datensicherungsprogramm können Sie Ihre persönlichen Daten problemlos Sichern. Es ist möglich eine komplette Datensicherung durchzuführen, aber auch nur die neuen und geänderten
MehrKapitel 4. Monitore und wechselseitiger Ausschluss
Seite 1 Kapitel 4 Monitore und wechselseitiger Ausschluss Prof. Dr. Rolf Hennicker 28.05.2015 4.1 Interferenzen Seite 2 Parallel ablaufende Prozesse können sich gegenseitig (störend) beeinflussen. Beispiel
MehrAlltagsnotizen eines Softwareentwicklers
Alltagsnotizen eines Softwareentwicklers Entkoppeln von Objekten durch Callbacks mit c++-interfaces oder boost.function und boost.bind Tags: c++, entkoppeln, objekt, oop, callback, boost.bind, boost.function,
MehrZiel, Inhalt. Programmieren in C++ Wir lernen wie man Funktionen oder Klassen einmal schreibt, so dass sie für verschiedene Datentypen verwendbar sind
Templates und Containerklassen Ziel, Inhalt Wir lernen wie man Funktionen oder Klassen einmal schreibt, so dass sie für verschiedene Datentypen verwendbar sind Templates und Containerklassen 1 Ziel, Inhalt
MehrEinrichtung des Cisco VPN Clients (IPSEC) in Windows7
Einrichtung des Cisco VPN Clients (IPSEC) in Windows7 Diese Verbindung muss einmalig eingerichtet werden und wird benötigt, um den Zugriff vom privaten Rechner oder der Workstation im Home Office über
MehrBedienung von BlueJ. Klassenanzeige
Im Folgenden werden wichtige Funktionen für den Einsatz von BlueJ im Unterricht beschrieben. Hierbei wird auf den Umgang mit Projekten, Klassen und Objekten eingegangen. Abgeschlossen wird dieses Dokument
MehrAlgorithmen mit Python
Algorithmen mit Python Vorbesprechung zum Proseminar im Sommersemester 2009 http://www.python.org 1 Sie lernen in DAP Java und C/C++: 80% Syntax, 20% Algorithmen-Design Idee Schon ein einfaches Hello World
Mehr4D Server v12 64-bit Version BETA VERSION
4D Server v12 64-bit Version BETA VERSION 4D Server v12 unterstützt jetzt das Windows 64-bit Betriebssystem. Hauptvorteil der 64-bit Technologie ist die rundum verbesserte Performance der Anwendungen und
MehrFakultät Angewandte Informatik Lehrprofessur für Informatik 23.01.2012
WS 2011/2012 Fakultät Angewandte Informatik Lehrprofessur für Informatik 23.01.2012 Prof. Dr. Robert Lorenz Musterlösung zur Vorlesung Informatik I, Extrablatt zu komplexen Datenstrukturen Aufgabe 45 **
Mehrmywms Vorlage Seite 1/5 mywms Datenhaltung von Haug Bürger
mywms Vorlage Seite 1/5 mywms Datenhaltung von Haug Bürger Grundlegendes Oracle9i PostgreSQL Prevayler Memory mywms bietet umfangreiche Konfigurationsmöglichkeiten um die Daten dauerhaft zu speichern.
MehrBitte verwenden Sie nur dokumentenechtes Schreibmaterial!
VO 182.711 Prüfung Betriebssysteme 8. November 2013 KNr. MNr. Zuname, Vorname Ges.)(100) 1.)(35) 2.)(20) 3.)(45) Zusatzblätter: Bitte verwenden Sie nur dokumentenechtes Schreibmaterial! 1 Synchronisation
Mehr