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 [2018-05-09 17:25] (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:​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/​O ​ - {{:​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: 2018-05-09 17:25 (external edit)