| |
Veranstalter |
Dr. Andreas F. Borchert
|
| |
Typ | Vorlesung mit Übungen |
| |
Umfang |
2 V + 2 Ü (6 LP)
|
| |
Termin |
Termine:
Vorlesung: Montag 10-12 Uhr, Helmholtzstraße 18, E20
Übungen: Mittwoch 10-12 Uhr, Helmholtzstraße 18, E44
Es finden keine weiteren Vorlesungen oder Übungen mehr statt.
|
| |
Beginn |
Montag, den 14. Oktober, 10 Uhr in der Helmholtzstraße 18, E20
|
| |
Prüfungen |
Die Vorlesung ist für die Master-Studiengänge
Mathematik, Wirtschaftsmathematik, Informatik und
Medieninformatik vorgesehen. Bei den Bachelor-Studiengängen
Informatik und Software-Engineering kann dies als
Schwerpunktfach gewählt werden. (Die Einzelheiten
dazu lassen sich dem Modulhandbuch entnehmen.)
Die Prüfungsmodalitäten hängen von der Zahl der Teilnehmer ab.
|
| |
Inhalte |
- Modellierung paralleler Systeme
- Architekturen paralleler Systeme
- Parallelisierungstechniken:
- Threads
- OpenMP
- MPI einschließlich dem Studium einer
einfachen Implementierung auf Basis von TCP/IP
- GPUs mit CUDA, ggf. auch OpenCL
- Design-Patterns paralleler Systeme
|
| |
Skript |
Die in der Vorlesung verwendeten Folien und Beispiele
werden hier begleitend veröffentlicht:
- 14. Oktober 2013: Folien,
csp.tar.gz
(zuletzt aktualisiert am 4. November)
- 28. Oktober 2013: Folien
- 4. November 2013: Folien,
fork-and-join.cpp,
fork-and-join2.cpp,
queens.cpp,
queens2.cpp,
philo.cpp,
philo2.cpp
- 11. November 2013: Folien,
philo3.cpp,
resource-lock.hpp,
philo4.cpp,
ringbuffer.hpp,
rendezvous.hpp,
rv-ringbuffer.hpp
- 18. November 2013: Folien
- 25. November 2013: Folien.
Das Live-Beispiel, wie selbst elementare Datentypen wie int
nicht-atomar sein können, wenn sie (mit Tricks) so gelegt
werden, dass sie sich über zwei Cache-Lines erstrecken,
lässt sich erst ab GCC 4.8 übersetzen, nicht mit GCC 4.7,
d.h. es klappt auf Theseus, jedoch nicht auf Thales. Auf
Theseus ist es aber langweilig, da die SPARC-Architektur
solche Zugriffe nicht zulässt. Ich habe das Beispiel jetzt
so angepasst, dass es auch mit GCC 4.7 klappt:
nonatomic.cpp,
lflist.hpp
- 2. Dezember 2013: Folien,
rootfinder.tar.gz
- 11. Dezember 2013: Folien
- 16. Dezember 2013: Folien
- 13. Januar 2014: Folien
(Seite 335 korrigiert am 17. Januar),
properties.cu,
vector.cu,
bigvector.cu.
- 20. Januar 2014: Folien,
simpson.cu,
simpson2.cu,
mmm.cu.
- 3. Februar 2014: Folien
- 10. Februar 2014:
opencl-properties.tar.gz,
opencl-compile.tar.gz,
opencl-simpson.tar.gz
- Alle bisher veröffentlichten Folien in einer
Datei (Stand: 3. Februar 2014)
|
| |
Voraussetzungen |
Es werden einführende Vorlesungen in die praktische Informatik
vorausgesetzt. Denkbar sind entweder Allgemeine Informatik I und II
oder Praktische Informatik I und II. Insbesondere hilfreich (aber
nicht zwingend notwendig) wären
- Grundlegende Kenntnisse in Unix/Linux
- Grundlegende Kenntnisse von Netzwerken,
insbesondere TCP/IP und BSD-Sockets wie
sie beispielsweise in Systemnahe Software II vermittelt
werden
Eine Einführung in C++ findet zu Beginn in den Übungen statt.
|
| |
Übungen |
Bitte melden Sie sich zu den Übungen im
SLC
an.
Die ersten Übungsstunden dienen u.a. auch der Einführung
von C++ für all diejenigen, die mit C++ noch nicht vertraut
sind. Die hierzu verwendeten Folien
stehen zur Verfügung.
Blatt |
Abgabetermin |
Angabe |
Sonstiges |
Lösung |
1 |
23.10.2013 |
[PDF]
|
Vorgegebene Schnittstelle:
Nim.hpp;
eine Vorlage für Nim.cpp;
zum Testen fertige Objekte für Debian-Linux, 64 Bit:
Nim.o
TestNim.o;
und zum Zusammenbau ein
makefile.
Hinweis zu den Aufgaben 1 und 2: Achten Sie darauf,
dass die erste Prozessdefinition diejenige ist, die
die einzelnen anderen Prozesse mit dem ||-Operator
kombiniert. Sonst werden die anderen Prozessdefinitionen
von dem trace-Werkzeug aus dem csp.tar.gz-Werkzeug
ignoriert.
|
Aufgabe 1:
handshake.csp,
handshake2.csp;
Aufgabe 2:
pipe.csp;
Aufgabe 3:
Nim.cpp
TestNim.cpp
|
2 |
30.10.2013 |
[PDF]
|
|
Computer.cpp,
Computer.hpp,
Game.cpp,
Game.hpp,
Human.cpp,
Human.hpp,
Nim.cpp,
Nim.hpp,
Player.hpp,
PlayerVsComputer.cpp,
makefile
|
3 |
06.11.2013 |
[PDF]
|
|
dnsreq.csp,
matrix.hpp
|
4 |
13.11.2013 |
[PDF]
|
mapped_file.hpp
|
pgrep.cpp
pgrep2.cpp
|
5 |
20.11.2013 |
[PDF]
|
condition.hpp
|
condition.cpp
|
6 |
27.11.2013 |
[PDF]
|
gen-mp.pl
|
Makefile,
barrier.hpp,
jacobi-thread.hpp,
jacobi.hpp,
matrix.hpp,
testit.cpp
|
7 |
04.12.2013 |
[PDF]
|
|
chash.hpp,
testit.cpp
|
8 |
11.12.2013
verlängert bis zum 18.12.2013
|
[PDF]
|
|
Makefile,
prootfinder.hpp,
romberg.hpp,
rootcnt.hpp,
rootfinder.hpp,
testcount.cpp,
testfinder.cpp,
testpfinder.cpp,
testpool.cpp,
testtpfinder.cpp,
tpool.hpp,
tprootfinder.hpp
|
9 |
18.12.2013
verlängert bis zum 8.01.2014
|
[PDF]
|
|
Makefile,
integer.hpp,
mpi-primes.cpp,
primes.cpp,
primes.hpp
|
10 |
08.01.2014
|
[PDF]
|
|
mandelbrot.tar.gz
|
11 |
15.01.2014
|
[PDF]
|
|
sharedmem.tar.gz
|
12 |
22.01.2014
|
[PDF]
|
tracer.tar.gz
(nicht-parallelisierte Vorlage,
Aufruf von gdk_pixbuf_save
korrigiert am 16.01.2014)
|
cuda-tracer.tar.gz
(Hinweis: erzeugt jetzt anders als in der Vorlage PNGs statt
JPGs)
|
13 |
29.01.2014
|
[PDF]
|
jacobi.tar.gz
(Vorlage ohne geeignetes Abbruchkriterium)
|
|
14 |
10.02.2014
|
[PDF]
(Wurde unmittelbar nach den Übungen aktualisiert.
Ich hatte mich hier zunächst geirrt. Eine Synchronisierung der
Schreibzugriffe auf den Hauptspeicher ist hier nicht
notwendig. Die Hinweise im Übungsblatt wurden entsprechend
vereinfacht und das Blatt wird dadurch auch deutlich
einfacher.) Noch zwei Hinweise: Beachten Sie bitte,
dass die Erzeugung von PNG-Dateien recht aufwendig
ist. Es ist ggf. sinnvoller, die Realzeit ohne die Erzeugung
der PNG-Datei zu messen bzw. statt PNG-Dateien das JPG-Format
zu wählen, das sich sehr viel schneller erzeugen lässt. Die
Vorlage sollte noch dahingehend korrigiert werden, dass sie
mit nicht durch 32 teilbaren Höhen- und Weitenangaben korrekt
umgehen kann.
|
mandelbrot.tar.gz
(Konventionelle Vorlage)
|
|
|
| |
Weitere Materialien |
|
| |
|