teaching:sommersemester_2010:parallele_programmierung

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

teaching:sommersemester_2010:parallele_programmierung [2020-07-31 18:12] (current)
Line 1: Line 1:
 +====== Praktikum „Parallele Programmierung“ ======
  
 +===== Beschreibung =====
 +Um Mehrkernprozessoren und Multiprozessoren effizient zu nutzen, genügt es nicht, ein serielles Programm zu schreiben. 
 +Vierkernsysteme sind auch schon bei Arbeitsplatzrechnern weit verbreitet.
 +Standards wie MPI und OpenMP, erlauben es, in den Programmiersprachen C(++) und Fortran Code zu schreiben, welcher auch auf Hochleistungsrechnern lauffähig ist.
 +
 +Im Praktikum werden wir das parallele Programmieren mit MPI und OpenMP erlernen und auch eigenständige Anwendungen (z.B. Spielelöser) in Gruppen entwickeln.
 +Beachten Sie auch unsere allgemeinen organisatorischen [[:Teaching:Organisatorische Hinweise#praktika|Hinweise zu Praktika]].
 +
 +===== Lernziel =====
 +Ziel des Praktikums ist es, aktuelle Parallelisierungskonzepte kennen zu lernen und Problemstellungen im Team zu bearbeiten.
 +Die Studierenden gewinnen eine Übersicht über hilfreiche Werkzeuge zur Entwicklung und Bewertung von Anwendungen.
 +
 +===== Zielgruppe =====
 +
 +Das Projekt eignet sich für Studierende der Informatik in den Diplom- und Bachelorstudiengängen.
 +Studierende anderer Studiengänge müssen die Anrechnung mit dem jeweiligen Prüfungsausschuss klären.
 +
 +Interessierte Zuhörer sind auch herzlich willkommen.
 +
 +===== Daten der Veranstaltung =====
 +|| Zeit || Mi 10:00-11:30 Uhr ||
 +|| Ort || [[http://maps.google.com/maps?q=DKRZ,+Bundesstra%C3%9Fe+45a,+20146+Hamburg&hl=de&cd=2&ei=BUxYS-GvKIuLOKaotbgJ&sig2=Kv8CBjHeXm8lAVC3XxRrIQ&ie=UTF8&view=map&cid=262423906154203330&ved=0CBsQpQY&hq=DKRZ,+Bundesstra%C3%9Fe+45a,+20146+Hamburg&hnear=&z=16&iwloc=A|DKRZ]], Raum 034 ||
 +|| Beginn || Mi 02.06.2010 ||
 +|| Vorbesprechung || 01.04.2010 - 14 Uhr im DKRZ, Raum 034||
 +|| Mailingliste || [[http://wr.informatik.uni-hamburg.de/listinfo/papo-10|PAPO-10]] ||
 +
 +===== Dozenten =====
 +
 +  * [[People:Thomas Ludwig]]
 +  * [[People:Alumni:Michael Kuhn]]
 +  * [[People:Alumni:Julian Kunkel]]
 +  * [[People:Hermann Lenhart]]
 +
 +===== Vorgehen =====
 +Zunächst werden die Grundlagen theoretisch vermittelt und mit kleinen Beispielen geübt.
 +Im zweiten Teil werden in kleinen Gruppen jeweils unterschiedliche Problemstellungen bearbeitet.
 +Hierbei wird ein (kleiner) Projektplan erstellt und im Team eine Anwendung zur Problemlösung implementiert.
 +Status und aufgetretene Probleme werden regelmäßig gemeinsam besprochen.
 +
 +===== Verfügbare Problemstellungen =====
 +  * Optimale Spielzüge ermitteln (Suchbaumverfahren):
 +    * [[http://de.wikipedia.org/wiki/Solit%C3%A4r_%28Brettspiel%29|Solitär]]
 +    * Solitär Kartenspiel (Karten-mischen und lösen).
 +  * Numerische Anwendungen (Gebietszerlegung):
 +    * (Einfache) Räuber-Beute-Beziehung eines abgeschlossenen Systems mit Tierwanderung
 +    * Autos im Straßenverkehr eines Stadtnetzes und entstehende Staus
 +
 +Für weitere Vorschläge sind wir offen. Wichtig ist vor allem die korrekte Parallelisierung (evtl. mit Alternativen) und Auswertung. Detaillierte Kenntnisse der Numerik sind nicht erforderlich.
 +
 +===== Zeitplan und Materialien =====
 +  - **Theoretische Grundlagen** (in der Vorlesungszeit)
 +    * //02.06.2010// - Architekturen, Programmierkonzepte von OpenMP und MPI, Versionsverwaltung, Anwendungsklassen, Gebietszerlegung und Aufgabenteilung.
 +      * //Übung:// erste Schritte mit OpenMP und MPI auf unserem Cluster, anlegen eines Repositories und Testbeispiele verwalten.
 +    * //09.06.2010// - Parallelisierung von Anwendungen, Einführung in GDB und Valgrind, Speichermanagment von C/Fortran, MPI, Individuelle und kollektive Operationen im Detail, nicht-blockierende Aufrufe
 +      * //Übung:// einfache Probleme selbständig parallelisieren. GDB+Valgrind. {{:teaching:sommersemester_2010:papo-01-gdb-valgrind-mpi.pdf|Übungsblatt 1}} {{:teaching:sommersemester_2010:papo-01-gdb-valgrind-mpi-matrizen.tgz|Matrizen}}
 +    * //16.06.2010// - Leistungsbewertung von Anwendungen, PGAS, MPI-I/ - {{:teaching:sommersemester_2010:papo-10-modell.pdf|Folien}}
 +      * Einfaches Modell für Leistungsengpässe; CPU: Betrachtungen zu FLOPS, Instructions per Second, Cache-Hit/Miss Ratio, ...
 +      * //Übung:// Amdahls Gesetz, Speedup-Diagramme bewerten, PGAS, MPI-I/O. {{:teaching:sommersemester_2010:papo-uebung-02-mpi-io-pgas.pdf|Übungsblatt 2}}  {{:teaching:sommersemester_2010:papo-juliamengen.tgz|Julia Mengen SourceCode}}{{:teaching:sommersemester_2010:papo-ioantriebsdaten.tgz|Antriebsdaten + SoureCode}}
 +    * //23.06.2010// - OpenMP, Programmanalyse Werkzeuge {{:teaching:sommersemester_2010:hr-10-openmp.pdf|Folien}}
 +      * //Übung:// Verschiedene Code-Fragmente parallelisieren und die Leistung bewerten. {{:teaching:sommersemester_2010:papo-uebung-03-openmp.pdf|Übungsblatt 3}}
 +    * //30.06.2010// 
 +      * //Übung:// Verschiedene Code-Fragmente parallelisieren und die Leistung bewerten. Sunshot bzw. Jumpshot zur Analyse verwenden. Programm mit Hardware-Countern laufen lassen und bewerten.
 +    * //07.07.2010// - Leistungsanalyse
 +      * PIOviz und PIOsim -- wir simulieren unser Programm für ein alternatives System.
 +  - **Projektbearbeitung** (in der vorlesungsfreien Zeit)
 +    * Projektvorstellung und Präsentation der algorithmischen Lösung und Projektplan
 +    * Statustreffen -- Vorstellung der bisherigen Arbeiten und aufgetretene Probleme (2 Wochen später)
 +    * Statustreffen -- Vorstellung der bisherigen Arbeiten und aufgetretene Probleme, erste Leistungsergebnisse (2 Wochen später)
 +    * Präsentation der Ergebnisse (2 Wochen später)
 +
 +===== Ergebnisse =====
 +   * **Solitär (PEG) Löser** -- //Florian Ehmke// -- {{:teaching:sommersemester_2010:papo-10_ehmke_presentation.pdf|Präsentation}} -- [[http://stud.wr.informatik.uni-hamburg.de/projects/10-solitaire|Source Code im Redmine]] -- {{:teaching:sommersemester_2010:papo-10_ehmke_report.pdf|Ausarbeitung}}
 +   * **Strömungsmechanik** -- //Cedrick Ansorge und Johann Weging//
 +===== Literaturhinweise =====
 +==== Links ====
 +  * Programmierung: [[http://de.wikibooks.org/wiki/C-Programmierung|C]] [[http://de.wikibooks.org/wiki/Fortran|Fortran]]
 +  * Debugging: [[http://sourceware.org/gdb/current/onlinedocs/gdb/|GDB]] [[http://valgrind.org/docs/manual/mc-manual.html|Valgrind]]
 +  * [[http://de.wikipedia.org/wiki/Message_Passing_Interface|Wikipedia MPI]]
 +  * [[https://computing.llnl.gov/tutorials/mpi/|MPI Tutorial]]
 +  * [[http://eagain.net/articles/git-for-computer-scientists/|Git for Computer Scientists]]
 +  * [[http://de.wikipedia.org/wiki/Dynamischer_Speicher|Heap vs. Stack]] [[http://en.wikipedia.org/wiki/Call_stack|Call Stack/Stackframe]] [[http://www.a-m-i.de/tips/stack/stack.php| Stack im Detail auf Deutsch]]
 +  * [[https://computing.llnl.gov/tutorials/openMP/|OpenMP Tutorial]] [[http://gcc.gnu.org/wiki/openmp|GCC Doku zu OpenMP und Links zum Standard]]
 +  * [[http://www.mpi-forum.org/mpi2_1/index.htm|Links zu den MPI Standards]]
 +  * [[https://computing.llnl.gov/tutorials/mpi_advanced/DavidCronkSlides.pdf|Nice MPI Presentation]]
 +  * [[http://cs.boisestate.edu/~amit/teaching/530/notes/mpi-advanced.pdf|MPI-2 Features als Folien]]
 +  * [[http://mpi.deino.net/mpi_functions/|MPI Function Man-Pages sehr detailliert mit Beispielen!]]
 +  * [[http://www.mpi-forum.org/docs/mpi21-report/mpi21-report.htm#Node0|MPI-2 Standard Beschreibung]]
 +  * [[http://www.mhpcc.edu/training/workshop2/mpi_io/MAIN.html|MPI-2 Beschreibung von Maui]]
 +  * [[https://computing.llnl.gov/tutorials/pthreads/|Pthread-Programmierung und schöne Erklärung von Threads]]
 +  * [[http://www.openmp.org/mp-documents|OpenMP Spezifikation]]
 +  * Interne Verarbeitung von OpenMP und Auto-Parallisierung im GCC (von 2006) - [[http://www.airs.com/dnovillo/Papers/gcc2006.pdf|OpenMP and automatic parallelization in GCC]]
 +  * GCC Features um parallel zu programmieren, auch eine schöne kurze Übersicht über die parallele Programmierung [[http://www.airs.com/dnovillo/Papers/rhs2006.pdf|Parallel programming with GCC]]
 +  * GCC Optimierungsflags [[http://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html|GCC Handbuch HTML]]
 +  * SIMD Assembler Instruction Sets [[http://softpixel.com/~cwright/programming/simd/|HTML]] , GCC Inline Assembly Guide [[http://www.ibiblio.org/gferg/ldp/GCC-Inline-Assembly-HOWTO.html|HTML]] [[http://www.roma1.infn.it/SIC/_OLD_documentazione/unix/migr/digital-unix-doc/DOCUMENTATION/HTML/AA-PS31D-TET1_html/asm5.html|Assembly Language FPU]]
 +  * Analyse: [[http://www.cs.utah.edu/dept/old/texinfo/as/gprof_toc.html|gprof]] [[http://www.mcs.anl.gov/research/projects/perfvis/software/viewers/index.htm|Jumpshot]] [[https://perf.wiki.kernel.org/index.php/Main_Page|Perf - Linux Counter + Kernel Analyse]]
 +  * Details zu Intel Architektur [[http://www.intel.com/products/processor/manuals/]]
 +
 +==== Bücher ====
 +  * Using MPI, 2nd Edition,  by William Gropp, Ewing Lusk, and Anthony Skjellum, published by  MIT Press  ISBN 0-262-57132-3. 
 +  * MPI: The Complete Reference, by Marc Snir, Steve Otto, Steven Huss-Lederman, David Walker, and Jack Dongarra,  The MIT Press. 
 +  * [[http://mitpress.mit.edu/book-home.tcl?isbn=0262571234|MPI: The Complete Reference - 2nd Edition: Volume 2 - The MPI-2 Extensions]], by William Gropp, Steven Huss-Lederman, Andrew Lumsdaine, Ewing Lusk, Bill Nitzberg, William Saphir, and Marc Snir, The MIT Press. 
 +  * Parallel Programming With MPI, by Peter S. Pacheco, published by Morgan Kaufmann. 
teaching/sommersemester_2010/parallele_programmierung.txt · Last modified: 2020-07-31 18:12 (external edit)