Kommentar |
Spätestens mit dem Erreichen der natürlichen physikalischen Grenzen von Single-Core-Systemen haben Many-Core-Systeme, wie beispielsweise Multi-Core-Prozessoren (CPUs) oder Grafikkarten (GPUs), zunehmend an Bedeutung gewonnen. Die Programmierung von Many-Core-Systemen unterscheidet sich dabei jedoch maßgeblich von der herkömmlichen Art der Programmierung und ist in vielerlei Hinsicht anspruchsvoller. Beispielsweise muss sich der Programmierer explizit um die Verwaltung der Parallelität kümmern, was mit Herausforderungen wie Synchronisation und effizienten Datentransfers einhergeht. Auch erfordert die Entwicklung effizienter Algorithmen detaillierte Kenntnisse der zugrundeliegenden Hardware.
Dies motiviert die Erforschung von Ansätzen zur Vereinfachung der parallelen Programmierung. Einen bedeutenden Zweig stellt dabei die Abstraktion durch “parallele Programmiermuster” dar, in der Fachsprache auch als “algorithmische Skelette” bezeichnet. Durch ihre Verwendung wird es dem Anwender möglich, seine Programme weiterhin auf einem algorithmischen Level zu formulieren, ohne sich dabei explizit den Herausforderungen der Parallelität stellen zu müssen.
In diesem Projektseminar wollen wir uns mit der Umsetzung solcher parallelen Programmiermuster auseinandersetzen. Hierfür werden wir uns zunächst detailliert mit der Architektur verschiedener moderner Many-Core-Systeme, wie beispielsweise den Intel Sandy/Ivy Bridge CPUs, NVIDIA Kepler GPUs oder den Intel Xeon Phis auseinandersetzen. Anschließend werden wir dieses Wissen nutzen, um verschiedene parallele Programmiermuster systematisch in optimierten Programmcode umzusetzen. Die Umsetzung wird dabei in OpenCL geschehen, einem populären Standard zur uniformen Programmierung von Many-Core-Systemen. Im Rahmen einer Evaluation werden wir die gewonnen Ergebnisse dann detailliert analysieren und mit den Resultaten bestehender Ansätze vergleichen.
Die Teilnehmer sollen im Anschluss an das Projektseminar detaillierte Kenntnisse über moderne Many-Core-Systeme erlangt haben und dieses Wissen für eine effiziente Programmierung dieser nutzen können. |