TU Wien:Parallel Computing VU (Träff)

From VoWi
Jump to navigation Jump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

Daten

Lecturers Jesper Larsson Träff, Sascha Hunold, Markus Lehr
ECTS 6
Department Computer Engineering
When summer semester
Language Deutsch
Abbreviation parcomp
Links tiss:184710, Homepage, Mattermost-Channel
Zuordnungen
Bachelor Wirtschaftsinformatik Wahlmodul SPF/INT - Schwerpunkt Informationstechnologie
Bachelor Software & Information Engineering Pflichtmodul Einführung in paralleles Rechnen (Parallel Computing)
Bachelor Technische Informatik Wahlmodul Einführung in paralleles Rechnen (Parallel Computing)
E066393 Pflichtmodul Elective module A

Mattermost: Channel "parallel-computing"RegisterMattermost-Infos

Inhalt

Es werden verschiedene Frameworks für die Parallelisierung von Algorithmen und auch parallelisierbare Algorithmen selbst vorgestellt. Im speziellen wird auf folgende Frameworks bzw. Spracherweiterungen eingegangen:

  • Grundlagen Parallel Computing
  • Modelle von parallelen Rechnern
  • Erweiterung von Konzepten wie Laufzeit, Aufwand, etc. für parallele Algorithmen
  • Definitionen von Speedup, Parallelism, etc.
  • Anwenden der Konzepte auf einigen Beispielalgorithmen
  • OpenMP
  • pthreads (Im S20 nicht mehr behandelt, aber wurde in der VO erwähnt)
  • Cilk (Im S20 nicht mehr behandelt, aber wurde in der VO erwähnt)
  • MPI

Ablauf

Wöchentliche Vorlesung, ca. jeden Monat ein Übungsbeispiel. Drei Beispiele insgesamt. Die Beispiele dürfen alleine oder in Gruppen von zwei Personen bearbeitet werden, wobei die Arbeit nicht geteilt werden soll (Jedes Mitglied der Gruppe soll alle Beispiele selbst lösen). Am Ende des Semesters gab es eine schritfliche Prüfung.

Benötigte/Empfehlenswerte Vorkenntnisse

C Kenntnisse sind sehr wichtig, da die Projekte alle in C bzw. Erweiterungen von C(Cilk) zu programmieren sind. Darüber hinaus sollte man eventuell auch ein bisschen mit Shell-Skripten umgehen können.

Update S20: Cilk kam nur noch am Rande vor und wurde nur kurz nebenbei in der Vorlesung erwähnt. Programmiert wurde nur noch in C und mit den OpenMP und MPI Erweiterungen.

Basics der Laufzeitanalyse und Vorwissen aus Algorithmen und Datenstrukturen von Vorteil.

Vortrag

Eigene Erfahrung S20: Die zweite Hälfte der VO wurde aufgezeichnet, die erste Hälfte ist leider entfallen. Ich fand den Vortrag eigentlich ganz gut und angenehm. Hätte für meinen Geschmack schneller sein können, aber sonst fand ich es leicht dem Vortrag zu folgen. Der Vortrag wurde auf Deutsch abgehalten.

Übungen

SS 2020

Drei Übungsblätter:

  1. Übungsblatt: zehn Beispiele
  2. Übungsblatt: sieben Beispiele
  3. Übungsblatt: sieben Beispiele

, wobei beim 2. und 3. Übungsblatt Programmierbeispiele dabei waren. Dabei war immer ein Teil des Programms gegeben und es mussten nur einzelne Funktionen selbst implementiert werden.

SS 2019/20

Tipp: Nachdem alle Übungsblätter abgegeben wurden, haben sie mir nachträglich Punkte für Übungsblatt 2. abgezogen. Also nicht zu knapp rechnen.

WS 2015/16

Aus 5 Projekten muss eines ausgewählt werden und - je nach Projekt - in verschiedenen Variationen (verschiedene Lösungsansätze, verschiedene Algorithmen) und mit verschiedenen Laufzeitsystemen implementiert werden. Dabei ist jedenfalls zumindest eine sequentielle, pthreads oder OpenMP, Cilk und MPI Implementierung notwendig. In Summe kommt man auf rund 10 Implementierungen, die mit geschickten #ifdefs jedoch überschaubar bleiben. Diese müssen dann in einem Abschlussbericht verglichen und analysiert werden, vor allem hinsichtlich der Performance auf den großen Rechnern des Instituts. Es kommt nicht so sehr darauf an, dass man einen perfekten Speedup erreicht, sondern darauf, dass man gewissenhaft misst und dokumentiert und die Stärken, Schwächen und Eigenheiten seiner Lösung dokumentiert.

Die Projekte finden in 2er Gruppen statt.

Tipp: Früh benchmarken, damit die Systeme nicht ausgelastet sind.

alter Modus

Es müssen kleine Projekte(Algorithmen) in C bzw. C-Erweiterungen(Cilk) unter Verwendung bestimmter Frameworks(pthreads, OpenMP, Cilk, MPI) realisiert werden. Im WS2012 mussten zumindest 2 von 3 Projekten entweder mit pthreads oder OpenMP(OpenMP wird empfohlen), 1 von 2 Projekten in Cilk und 3 von 4 Projekten in MPI implementiert werden. Das ergibt insgesamt eine Anzahl von 6 Projekten, dabei muss für jedes Projekt noch ein Report verfasst werden. Die Inhalte der Reports sollen sich hauptsächlich mit einem Performance-Vergleich des implementierten parallelen Algorithmus mit einem sequentiellen Algorithmus befassen.

Die Konzepte und Algorithmen welche beachtet bzw. implementiert werden sollen erklärt der Prof. prinzipiell in der VU. Daneben sind auch teilweise etwas kryptische Erklärungen in den Folien zu finden. Letzten Endes muss glaube ich jeder selbst eine Variante der erklärten bzw. geforderten Algorithmen entwickeln da die Code-Schnipsel und Erklärungen oft nicht vollständig ausreichen um den Anforderungen gerecht zu werden.

Prüfung, Benotung

S20: Vier Übungen, wobei die erste (exercise 0) nur die Abgabe eines public key ist. Lt. der Vorbesprechungsfolien ist die Benotung im Vergleich zum S19 etwas entschärft worden. Man muss zwar immer noch alle vier Übungen abgeben, muss aber nur noch in Summe mindestens 50% der erreichbaren Punkte haben (es muss also nicht mehr jedes einzelne Übungsblatt positiv sein). Bei der Prüfung müssen mindestens 50% der Punkte erreicht werden. Die Aufgabenblätter zählen 60%, die Prüfung 40% zur Endnote.

Ich fand die Prüfung doch schon sehr anspruchsvoll. Hauptsächlich, weil viel zu wenig Zeit für die Bearbeitung der Aufgaben zur Verfügung stand. Die Angabe war 14 (!) A4 Seiten lang (14 Seiten echte Angabe + 2 Seiten Info) und die Prüfung bestand aus insgesamt 60 Wahr/Falsch Fragen. Dabei waren manche Fragen recht kurz, andere wiederum sehr lang. Die meisten Aufgaben der Prüfung waren wie kürzere Versionen der Übungsbeispiele. Die prüfung beinhaltete auch diverse Code Beispiele. Es war z.B. ein Snippet gegeben mit MPI Aufrufen und man musste entscheiden, wie das Ergebnis des Programmes aussehen könnte. Die Grundlagen aus den ersten paar Einheiten wurden auch ausgiebig geprüft. Zur Bearbeitung der 60 Aufgaben stand eine Stunde (60 Minuten) zur Verfügung. Insgesamt war die Zeit am Ende schon sehr knapp. Ich denke, dass viele Probleme mit der Prüfung hatten. Der Notenspiegel für die Prüfung wurde dann heruntergesetzt.

SS2019 Vor allem die Benotung wurde stark verschärft. Es gibt 3 Übungsblätter und 2 Programmierprojekte, sowie eine Abschlussprüfung. Alle Teilleistungen müssen ausnahmslos positiv sein. Wer also zum Beispiel eines der Übungsblätter vergisst oder unter 50% der Punkte erreicht, bekommt nach jetzigem Stand ein negatives Zeugnis und muss es somit nächstes Jahr nochmal versuchen. Nach derzeitigem Stand gibt es auch keine Möglichkeit negative Teilleistungen zu wiederholen, auch die Abschlussprüfung darf scheinbar nicht wiederholt werden.

Update: Es scheint doch so, dass nur die Summe der Punkte alle Aufgaben und Projekte zusammen über 50% liegen muss. Es müssen aber alle Aufgaben zumindest abgegeben werden (Vermutlich müssen Lösungsansätzen vorhanden sein). Weiteres wird es mehrere Prüfungstermine geben, wobei einem zwei antritte zur verfügung stehen. Die Prüfung besteht aus einem reinen MC-Teil, welcher mit der Hand verbessert wird. Ein bzw. kein richtig gesetztes Kreuz bringt 0.5P ein vergessenes bzw. ein falsch Kreuz -0.5P. Zwischen den einzelnen Fragen gibt es keine negativen Punkte, die minimale Anzahl an Punkte pro Frage ist 0. Die Prüfung gilt mit 17 von 37 Punkten als bestanden (~47%). Zu beachten ist, dass man bei dieser Bewertung nach oben hin extrem schnell Punkte verliert, für ein Gut bzw. Sehr Gut darf man nur wenig Fehler machen. Die Fragen sind eigentlich fast ausschließlich Praxisbeispiele bzw. Rechenbeispiele, dabei sind die einzelnen MC-Antworten wie an der TU gewohnt oft nicht wirklich eindeutig. Es lohnt sich also überhaupt nicht die 1200 Folien durchzugehen, jedoch sollte man sich Code bzw. Befehle anschauen, da auch vor allem MPI-Befehle zur Prüfung kommen, welche kein Thema in der Übung sind.

WS2017/18: Abgabegespräch mit Prüfungsteil. Es wurden Fragen zum Projekt, und zu den unterschiedlichen Implementierungen gestellt. Es wird von den Teammitgliedern erwartet alle Teile des Programmes zu verstehen, und auch erklären zu können, was bei 8 verschiedenen Programmen nicht ohne ist. Daneben werden auch noch Fragen zu den verwendeten Frameworks und in der Vorlesung vorgestellten Algorithmen gestellt, auch wenn diese keinen Bezug zum Projekt haben.

WS2015/16: Verläuft ähnlich einem Abgabegespräch. Es wird das Verständnis des gewählten Projektthemas geprüft und Fragen zu den Implementierungsvarianten gestellt. Die Laufzeit des implementierten Algorithmus sollten die Studierenden wissen.

Dauer der Zeugnisausstellung

Semester Prüfung am Zeugnis erhalten am Bekanntgabe der Ergebnisse nach
2015W 08.02.2016 09.02.2016
2019S 18.10.2019 04.11.2019
2020S 09.07.2020 15.07.2020 27 h

Zeitaufwand

Die Projekte sind vom Umfang her zumindest zu Beginn überschaubar. Spätestens bei den MPI Projekten wird man feststellen, dass man einige Zeit benötigen wird um die Algorithmen wirklich richtig hin zu bekommen.

Der Lernaufwand für die Prüfung sollte nicht all zu hoch sein wenn man sich mit den Algorithmen beschäftigt hat und ein bisschen in den Folien nachliest.

Meine Erfahrung: Der Lernaufwand ist nicht extrem hoch, aber man sollte ihn auch nicht vernachlässigen.

Unterlagen

  • Parallel Programming (im TUNET/VPN gratis downloadbar)
  • Bertil Schmidt, Jorge Gonzaalez-Domiinguez and Christian Hundt and Moritz Schlarb: Parallel Programming. Concepts and Practice. Morgan Kaufmann, 2018.

Tipps

  • Beginnt so früh es euch nur möglich ist mit den Projekten und seht zu, dass ihr von Beginn an einen zuverlässigen Partner bekommt. Ohne Partner ist der Aufwand doch ziemlich hoch.
  • Benchmarks für sequentiell, openMP und cilk möglichst früh durchführen. Schon eine Woche vor der Deadline ist der Server oft ausgelastet, was wegen fehlendem Scheduling zu verfälschten Ergebnissen beim Benchmarken mit vielen Threads führen kann.
  • openMP und cilk sind schnell implementiert, da man das sequentielle Programm leicht anpassen kann. Die MPI Implementierung erfordert dagegen mehr Aufwand, da hier das Paradigma ein völlig anderes ist.

Verbesserungsvorschläge / Kritik

2020S: Ich bin mit der Kommunikation seitens des LVA-Teams sehr unzufrieden. Der Umgang mit der Lage im S20 (Corona) war meiner Meinung nach absolut mangelhaft. Die Folien der Vorlesung wurden zwar hochgeladen, allerdings waren diese alleine wenig hilfreich. Irgendwann wurde dann auch ein Skriptum nachgereicht, allerdings ist das auch eher dünn gehalten und reicht meiner Meinung nach absolut nicht aus um die Aufgaben zu lösen. Aufzeichnungen der VO, wie dies in vielen anderen Fächern während des distance-learning umgesetzt wurde, gibt es auch nicht. Wenn ich das alles hätte selbst lernen wollen, hätte ich mir für 50€ das Buch gekauft und mir die Studiengebühren für das Semester lieber gespart... [Anmerkung 29.6.: Mittlerweile gibt es 8 aufgenommene VOs. Das Parallel Programming Buch ist übrigens gratis über TU VPN]

2020S (andere Meinung): Ich finde nicht, dass die Kommunikation des LVA-Teams schlecht war. Das LVA-Team (vor allem Prof. Hunold) hat schnell auf Fragen per E-Mail oder TUWEL geantwortet. Bezüglich der Prüfung wurde insbesondere was den Inhalt als auch den Modus angegangen ist ausführlich informiert und die Übungsblätter waren im großen und ganzen schnell und einheitlich (!) korrigiert. Lediglich bei Übungsblatt 2 hat die Korrektur etwas länger gedauert, weil der Leitung zu Inkonsistenzen aufgefallen sind. Außerdem waren die Übungsvideos mit Musterlösungen hilfreich und gut gemacht. Prüfungsergebnis war nach einem Tag auf TUWEL verfügbar.

2020S (andere Meinung): Ich bin auch nicht sehr zufrieden mit der LVA Durchführung dieses Semester. Ich fands ein bisschen zynisch in der ersten VO darauf hinzuweisen, dass Folien lernen den LVA Besuch nicht ersetzt und andererseits unter den besonderen Umständen trotzdem lang nur Folien zur Verfügung zu stellen. Weiters wurden die Folien laufend durch aktuellere Versionen ersetzt, das wurde aber nicht kommuniziert. Das Skriptum war wirklich nur eine Ergänzung zu den Folien.

2019S: Eine fürchterliche LVA, wer kann sollte diese LVA unbedingt vermeiden. Miserable Kommunikation seitens der LVA Leitung, die Prüfung, welche eigentlich kein Killer werden sollte war zwar nicht unschaffbar aber an eine gute Note braucht man eigentlich nicht zu denken. Zusammenfassend teilt sich diese LVA wohl Platz 1 der schlechtesten Lehrveranstaltungen im SE-Bachelor gemeinsam mit Funktionale Programmierung.

Ich persönlich finde die LVA war schlecht organisiert. Informationen gab es nur auf der LVA-Seite bzw. in den PDFs welche dort zum Download angeboten wurden. Die Inhalte der veröffentlichten PDFs haben sich ohne Ankündigungen während des Semester geändert. Wir haben Prof. Träff angeraten das TUWEL-System zu verwenden jedoch hatte er bis zum WS12 keine Ahnung davon, dass es solch ein System gibt. Die Abgabemodalitäten waren nicht ganz klar, ich persönlich habe ihm die PDFs per Email geschickt und in diesen ein öffentliches Repository referenziert in welchen der Code verfügbar gemacht wurde. (Update WS2015/16: TUWEL wird für die Abgabe des Reports verwendet. Es existiert eine fixe Abgabedeadline.)

Weiters sind meiner Meinung nach die Folien noch nicht wirklich ausgereift. Hier und da mangelt es an den entscheidenden Aspekten um den Inhalt vollständig zu verstehen. Die Angaben für die Projekte sind darüber hinaus auch nicht immer wirklich verständlich(vielleicht geht es nur mir so aber es war teilweise nicht ganz klar was verlangt wird).

Es gibt kein Benotungsschema, dahingehend ist es schwierig einzuschätzen was man tun muss um die jeweilige Note zu erhalten.