Parallelismus kann in einem Programm implizit enthalten sein - z. B. in einer Schleife mit unabhängigen Iterationen - oder durch parallele Sprachkonstrukte explizit spezifiziert sein. Die Lehrveranstaltung zeigt, wie ein Übersetzer impliziten Parallelismus erkennt, und wie er Parallelismus für eine bestimmte parallele Architektur umsetzen kann. Sie vermittelt Übersetzungstechniken, die effizienten Code für Parallelrechner liefern.
Absolventinnen und Absolventen verstehen das Konzept der Datenabhängigkeit und dessen Bedeutung für die Parallelisierung von Programmen. Sie können vorbereitende Programmtransformationen angeben, sowie Vektorisierungs- und Parallelisierungsmethoden beschreiben und anwenden.
Überblick über Parallele Systeme, Datenabhängigkeit, Kontrollabhängigkeit, Programmtransformationen, Vektorisierung, Parallelisierung für Systeme mit gemeinsamem und verteiltem Speicher, Lokalitätsoptimierungen, Polyhedrales Modell, Zwischendarstellungen, Programmanalysen, Übersetzung von parallelen Sprachen; Ausblick: Autotuning, Laufzeitparallelisierung. Im Übungsteil wird u.a. ein gegebener source-to-source Compiler um Programmtransformationen und parallele Übersetzungstechniken erweitert.
Übungsbeispiele, Programmieraufgaben, Präsentation zu einem ausgewählten Thema, schriftl. Prüfung
Randy Allen, Ken Kennedy. Optimizing compilers for modern architectures. Kaufmann, 2002.
Alfred V. Aho, Monica S. Lam, Ravi Sethi, Jeffrey D. Ullman, Compilers: Principles, Techniques, & Tools (2nd Edition). Pearson Addison Wesley, 2007.
Michael J. Wolfe. High-Performance Compilers for Parallel Computing. Addison-Wesley, 1996.
Hans Zima, Barbara Chapman. Supercompilers for Parallel and Vector Computers. ACM Press, 1990.