Hauptseminar Multi-Core-Programmierung - Semantic Scholar

Literaturverzeichnis. [AB10] Sarita V. Adve and Hans-J. Boehm. ... Springer, 1996. [BLSP10] Niko Böhm, Daniel Lohmann, and Wolfgang Schröder-Preikschat.
142KB Größe 11 Downloads 838 Ansichten
Hauptseminar Multi-Core-Programmierung Erhard Plödereder Torsten Görg Steffen Keul Mikhail Prokharau Martin Wittiger Sommer 2012

Allgemeines Regeln Als Inhalt Ihrer Arbeit erwarten wir mehr als nur die Präsentation einer einzelnen Veröffentlichung (also nicht das, was meistens in Seminaren ausreicht). Stattdessen sollen Sie sich das gestellte Thema mit Hilfe mehrerer Publikationen erschließen und es dann gesamtheitlich darstellen. Die Betreuer werden Ihnen Literaturhinweise geben, die Ihnen den Einstieg in das Thema leichter machen. Schauen Sie aber über den Tellerrand dieser Publikationen hinaus! Recherchieren Sie. Für einige Vorträge werden zentrale Publikationen unter den initialen Literaturstellen sein; in anderen Fällen werden Sie die wichtigsten Papiere selbst identifizieren müssen. Reden sie mit den Betreuern, inwieweit die vorgegebenen Papiere wesentlicher Teil ihrer Präsentation sein sollen. (Bedenken Sie immer, dass nicht alles, das gedruckt ist, auch wahr ist. Diese Warnung gilt vor allem für Konferenzbeiträge und selbstverständlich für Ungeprüftes aus dem Internet. Versuchen Sie, unabhängige Bestätigungen für Sachverhalte zu finden, bevor Sie sich Behauptungen in einem Papier zu eigen machen.) In aller Kürze: wir erwarten von Ihnen einen Vortrag und Beitrag wie auf einer guten Konferenz. Der Unterschied ist allenfalls, dass Sie nicht über eigene Forschung berichten, sondern aus den Ergebnissen anderer synthetisieren. Bleiben Sie thematisch nicht zu eng (nicht auf eine einzelne Publikation fokussiert), werden Sie aber auch nicht episch breit (wird nur oberflächlich und vage).

Notenvergabe Die Note wird aus drei Teilnoten gebildet. Ein Bestehen ist in allen drei Aspekten notwendig, um das Hauptseminar erfolgreich zu absolvieren. Die drei Aspekte und ihre Wertigkeiten sind:

Hauptseminar Multi-Core-Programmierung • 50 % Vortrag (z.B. Inhalte, Struktur, verständliche Darstellung, Foliengestaltung, Vortragsstil, Wissen in der Diskussion) • 40 % Ausarbeitung (z.B. saubere wissenschaftliche Beschreibung, nachvollziehbare Gliederung, schlüssiger Fluss, verständlicher Text, lesbare Graphiken; für gute Vorbilder, schauen sie sich Beiträge auf namhaften internationalen(!) Konferenzen an) • 10 % Mitarbeit (Für das Bestehen im Hauptseminar ist die Anwesenheit Pflicht. Ihre Note bestimmt sich aus Ihrer Mitarbeit bei den Vortragsdiskussionen.)

Organisation • Aktuelle Informationen werden auf der Webseite verfügbar gemacht. http://www.iste.uni-stuttgart.de/ps/lehre/ss2012/hs-multi-core.html • Über den Mail-Verteiler [email protected], werden wir Neuigkeiten verschicken. Wir gehen davon aus, dass diese Mails gelesen werden! • Jeder Teilnehmer muss einen Vortrag halten, eine schriftliche Ausarbeitung abgeben und bei allen Vorträgen anwesend sein und mitdiskutieren. • Eine erste Fassung der Ausarbeitungen wird eine Woche vor dem Vortrag abgegeben und wird auf der Webseite veröffentlicht. • Alle Teilnehmer am Hauptseminar lesen die veröffentlichte Fassung der Ausarbeitung vor dem Vortrag und verschaffen sich so einen Überblick über das jeweilige Thema. • Die endgültige Ausarbeitung muss uns zwei Wochen nach dem Vortrag vorliegen, in druckbarer Form und als Quelle (Orginaldokument und PDF). Die Ausarbeitung sollte unbedingt von einem Kommilitonen vor Abgabe auf Rechtschreibfehler etc. geprüft werden. • Die Ausarbeitungen müssen dem zweispaltigen IEEE-Format für Konferenzbeiträge genügen und sollten einen Umfang von ca. 12 Seiten haben (Vorlagen siehe Web, empfohlen: LATEX). • Der Vortrag dauert 45 - 60 Minuten. Anschließend diskutieren wir über das Thema. Dabei wird eine Beteiligung von allen erwartet.

2 / 19

Hauptseminar Multi-Core-Programmierung

Die Themen, Betreuer und Literaturvorschläge 1. Multi-Core Hardware (Multicore Hardware) Um eine Software-Anwendung überhaupt ausführen zu können, ist eine HardwarePlattform notwendig. Einer der wichtigsten Teile jedes Hardware-Systems ist die zentrale Recheneinheit (CPU). Bis vor einigen Jahren wurden sowohl auf üblichen als auch auf Echtzeitsystemen überwiegend CPUs mit einem Hauptrechenkern verwendet (Single-Core). Heutzutage ist die Anwendung von Mehrkernsystemen (Multi-Core) massiv zugenommen und stellt auch im Bereich der Echtzeitsysteme einen neuen Trend dar. Dieser Vortrag soll einige der gängigen auf Shared-Memory laufenden Multi-Core Hardware-Plattformen präsentieren. Dabei ist die Möglichkeit der Anwendung dieser Plattformen im Echtzeitbereich besonders zu beachten. Die relevanten Aspekte, wie Cache-Strukturen und ihre Kohärenz, sollen im Blickpunkt stehen. Zukunftsprognosen bezüglich der möglichen weiteren Entwicklung werden auch erwartet. Literatur: [HBK06, WGR+ 09, SVDN07, BDM09, GHF+ 06, AB10, CFG+ 10a, WFC+ 09] Betreuer: Termin nicht vor:

Mikhail Prokharau KW 15

2. Speicherkonsistenzmodelle in aktuellen Programmiersprachen (Memory Consistency Models in recent Programming Languages) Die Entwickler einiger Programmiersprachen haben sich mit Detailregeln für das Speicherverhalten von nebenläufigen Programmen befasst, was für das Funktionieren einer speicherbasierten Kommunikation essentiell ist. Diese Überlegungen sind als Speichermodelle in die Sprachdefinitionen eingegangen. Der Vortrag soll die grundsätzlichen Fragen erläutern, mit denen sich Speichermodelle auseinandersetzen, und die Umsetzung am Beispiel von (mindestens) C++ und Java aufzeigen. Dabei sollen auch die Unterschiede der Speichermodelle herausgearbeitet, die Gründe hierfür und die Konsequenzen auf die Programmierung im Kontext eines Multi-Core Systems erläutert werden. Literatur: • zu Speichermodellen allgemein: [GS12, BAM07] • zum C++-Speichermodell – Überblick über das C++ Memory Modell: [BA08] – Draft der Sprachspezifikation: [C++11] – Link- und Historien-Seite eines Hauptentwicklers: http://www.hpl.hp.com/personal/Hans_Boehm/c++mm/ – Sekundärquellen: [Gri11, Wil12]

3 / 19

Hauptseminar Multi-Core-Programmierung • zum Java-Speichermodell – Eine Überblicksseite mit Links: http://www.cs.umd.edu/~pugh/java/memoryModel/ – Sprachspezifikation: [GJSB05] – Veraltete Seiten zum Java Memory Modell, das jetzt in der Sprachspezifikation ist: http://jcp.org/aboutJava/communityprocess/final/jsr133/ Betreuer: Termin nicht vor:

Torsten Görg KW 15

3. Existierende Ansätze zur Echtzeitprogrammierung auf Single-Core und deren Übertragbarkeit auf Multi-Core (Existing Real-Time Programming Techniques for Single-Core Architectures and Their Applicability to Multicore Architectures) Im Gegensatz zur Programmierung auf konventionellen Rechnerplattformen weisen Programmieransätze für Echtzeitsysteme eine Reihe wesentlicher Unterschiede auf. Es müssen insbesondere mehrere Anforderungen beachtet werden, damit die gesetzten Fristen je nach Vorgaben immer oder im Durchschnitt erfüllt werden können. Zusätzlich zu den zeitlichen Einschränkungen unterliegen Echtzeitanwendungen auch wichtigen Voraussetzungen bezüglich des Speicherbedarfs. Während Nebenläufigkeit im Bereich von Echtzeitanwendungen auf Single-Core seit Jahren ganz üblich ist, bereitet der kommende Einstieg in die Multi-Core-Welt neue Herausforderungen auf. In diesem Vortrag sollen die schon vorhandenen Programmiertechniken für Echtzeitsysteme auf Single-Core mit dem Schwerpunkt Nebenläufigkeit präsentiert werden. Dabei sollen insbesondere sicherheitskritische Aspekte dieser Ansätze beleuchtet werden. Des Weiteren, sollen Schwierigkeiten angegangen werden, die beim Übertragen der vorhandenen Programmiertechniken auf physikalisch parallele Systeme mit Shared-Memory entstehen. Literatur: [WEE+ 08, MLC+ 09, GHW11] Betreuer: Termin nicht vor:

Mikhail Prokharau KW 15

4. Entwurfsmuster zur Implementierung nebenläufiger Systeme (Design Patterns for the Implementation of Concurrent Systems) Greifen nebenläufig ausgeführte Programmeinheiten auf gemeinsamen Speicher zu, so treten Race-Conditions auf. Synchronisation ist notwendig, um die InterThread Kommunikation so zu gestalten, dass das nebenläufige Programm tatsächlich die beabsichtigte Semantik hat. In diesem Vortrag sollen Implementierungsmuster vorgestellt werden, die eine korrekte und gleichzeitig effiziente Ausführung ermöglichen. Besonderes Augenmerk soll dabei auf die besonderen Anforderungen von eingebetteten Echtzeit-

4 / 19

Hauptseminar Multi-Core-Programmierung systemen gelegt werden. Eine wichtige Anforderung ist hierbei die Existenz konstanter oberer Schranken für Ausführungszeit und Speicherbedarf der eingesetzten Operationen. Literatur: [CRKH05] Suchbegriff: „Concurrency Patterns“ Als Kontrast, überwiegend in verteilten Systemen relevante Muster: • http://www.cs.wustl.edu/~schmidt/patterns-ace.html • http://www.mindspring.com/~mgrand/pattern_synopses.htm Betreuer: Termin nicht vor:

Steffen Keul KW 15

5. Vergleich verschiedener Parallelisierungsframeworks im Hinblick auf Multicore-Programmierung (Comparison of Parallelization Frameworks and Their Usability for Multicore Programming) Gegenwärtig wird Parallelisierung von Software in der Regel mit ParallelisierungsFrameworks realisiert, die Standard-Programmiersprachen um Sprachkonstrukte für parallele Ausführung erweitern oder entsprechende Funktionalitäten in Form einer Bibliothek zur Verfügung stellen. Im Rahmen dieses Seminarvortrags sollen verschiedene solcher Frameworks vergleichend gegenübergestellt werden. Ein spezieller Fokus soll dabei auf der Frage liegen, inwieweit diese Frameworks auch das Programmieren von Multicore-Prozessoren unterstützen und deren Besonderheiten berücksichtigen. Der Vortrag soll vor allem die sehr weit verbreiteten Frameworks OpenMP, TBB und MPI in den Blick nehmen. Während die ersten beiden sich auf Kommunkation über gemeinsamen Speicher konzentrieren, basiert MPI auf einem nachrichtenbasierten Ansatz. Literatur: • zu Open Multi Processing (OpenMP): – Einstieg in OpenMP: [GS12] [Gov11, S. 245-293] – OpenMP-Homepage: http://www.openmp.org/ – weiterführende Artikel: [CMG+ 10] [FPB+ 11] [BAG+ 10] • zu Threading Building Blocks (TBB): – Einstieg in TBB: [GS12] [KJ07] – TBB-Homepage: http://threadingbuildingblocks.org/ • zum Message Passing Interface (MPI): – Einstieg in MPI: [LS09, S. 216-249] [Ung97, S. 228-242] [RR10, S. 197-256] – MPI-Homepage: http://www.mcs.anl.gov/research/projects/mpi/ – OOMPI-Homepage: https://www.osl.iu.edu/research/oompi/ • zu Performanzvergleichen: [MTT+ 09]

5 / 19

Hauptseminar Multi-Core-Programmierung • weiterführende Artikel: [WLY09] Betreuer: Termin nicht vor:

Torsten Görg KW 16

6. Möglichkeiten der zeitlichen und räumlichen Isolation von Anwendungen (Possibilities of Temporal and Spatial Isolation of Applications) Bei Echtzeit-Systemen mit sicherheitskritischen Anforderungen müssen bestimmte Maßnahmen getroffen werden, um die vorausgesetzte möglichst niedrige Ausfallwahrscheinlichkeit zu erreichen. Eine solche Maßnahme ist die räumliche Trennung von Anwendungen. Dabei wird sichergestellt, dass eine Anwendung auf den Speicherbereich einer anderen Anwendung keinen Zugriff hat und die funktionale Korrektheit erhalten bleibt. Oft haben Echtzeit-Anwendungen auch zeitliche Anforderungen, wobei bestimmte Deadlines berücksichtigt werden müssen. Eine zeitliche Isolation garantiert, dass der gegenseitige Einfluß von Anwendungen auf ihr Zeitverhalten das Einhalten von Deadlines nicht gefährden kann. Obwohl mehrere Isolationsansätze für Single-Core-Architekturen vorhanden sind, es stellt sich die Frage, ob diese Techniken auch auf Multi-Core-Plattformen übertragen werden können. In diesem Vortrag sollen zuerst allgemeine Isolationstechniken angesprochen werden. Weiter sollen Zusammenhänge geschaffen werden, in wie weit solche Ansätze auf Multi-Core Architekturen anwendbar sind und wie die Lösungen aussehen könnten. Literatur: [WGR+ 09, RGBW07, BCSM08, HP08, MHC+ 08] [GR10, HvK11, BBW11, SCMLC12, MV10] Betreuer: Termin nicht vor:

Mikhail Prokharau KW 17

7. Möglichkeiten zur statischen oder dynamischen Zuweisung von Tasks an Cores (Possibilities of Static or Dynamic Assignment of Tasks to Cores) Während Tasks auf einem Single-Core-System nur den einzigen vorhandenen Rechenkern benutzen können, bieten Multi-Core-Systeme eine Möglichkeit, Tasks an unterschiedliche Kerne zuzuweisen. Dabei dürfen aber die generell geltenden zeitlichen, räumlichen und sicherheitsrelevanten Anforderungen an Echtzeitsysteme keinesfalls verletzt werden. In diesem Vortrag sollen Möglichkeiten sowohl zur statischen als auch zur dynamischen Zuweisung von Tasks an Cores unter der Berücksichtigung der vorhandenen Anforderungen an Echtzeitsysteme diskutiert werden. Insbesondere, soll es genauer erläutert werden, unter welchen Umständen Task-Migration von einem Kern zu einem anderen sinnvoll möglich ist. Literatur: [Hei08, SYR+ 09, SYN11, SKR07, HvK10, KST11]

6 / 19

Hauptseminar Multi-Core-Programmierung Betreuer: Termin nicht vor:

Mikhail Prokharau KW 19

8. Scheduling auf Multi-Cores (Scheduling on Multicore Architectures) Echtzeitsysteme werden oft in sicherheitskritischen Bereichen angewandt, wodurch das Leben von Menschen und der Wohlstand der Umwelt vom richtigen Funktionieren solcher Systeme abhängig gemacht werden. Es ist deswegen ausgesprochen wichtig, dass Echtzeitsysteme durch einen hohen Grad an Determinismus und Vorhersagbarkeit sich ausweisen können. Um dieses Ziel zu erreichen, müssen aufwändige und tiefgreifende Maßnahmen beim Task-Scheduling getroffen werden, was auch durch die gesetzliche Zertifizierung vorgeschrieben ist. Mit der Einführung der Multi-Core Architekturen nimmt die Komplexität von Scheduling deutlich zu. In diesem Vortrag sollen Scheduling-Ansätze auf Multi-Core-Systemen präsentiert werden. Außer Effizienz und reduzierter Wartungskosten ist dabei die Robustheit und Zertifizierbarkeit dieser Ansätze von einem besonderen Interesse. Literatur: [BCL09, DA08, ACD06, BCA08, BCB+ 08, DB11, LKR10, PQC+ 11, SALG11, HG11] Betreuer: Termin nicht vor:

Mikhail Prokharau KW 20

9. Semi-automatische Partitionierung (Semi-Automatic Partitioning) Sollen mehrere ausführbare Einheiten auf einem Multi-Core-System zusammen laufen müssen sie – statisch oder dynamisch – Cores zugewiesen werden. Eine solche Partitionierung muss gegebenenfalls Timing Constraints oder anderen Anforderungen genügen und wird versuchen den Kommunikationsaufwand zwischen Kernen gering zu halten. In diesem Vortrag sollen bestehende Algorithmen für verteilte Systeme beschrieben und auf ihre Multi-Core Tauglichkeit untersucht werden. Literatur: [KDSS10, Bok81, BSER11, HvK11] Betreuer: Termin nicht vor:

Martin Wittiger KW 21

10. Automatisierte Parallelisierung von sequentiellem Code (Autoparallelization of Sequential Code) Um sequentielle Programme auf Multi-Core-Rechnern zu portieren, sollen diese Programme automatisiert parallelisiert werden. In bestimmten Fällen kann ein Compiler genügend Wissen über den Quelltext eines sequentiellen Programms herleiten, um diese Parallelisierung automatisch durchzuführen. Offensichtlicher

7 / 19

Hauptseminar Multi-Core-Programmierung Vorteil dieser Herangehensweise ist, dass Entwickler kein Wissen über besondere Fehlerquellen der Parallelität haben müssen. Als Nachteil gilt, dass dieser Technologie oft nicht weniger erfolgreich ist als erhofft. Dieser Vortrag soll die Möglichkeiten und Schwierigkeiten einer automatisierten Parallelisierung von sequentiellen Programmen untersuchen. Literatur: [LDB+ 99, SMH98] Suchbegriffe: „Autoparallelization“, „Vectorization“ Parallelität in GCC: http://www.airs.com/dnovillo/Papers Automatische Parallelisierung in einem kommerziellen Compiler: http://software. intel.com/en-us/articles/automatic-parallelization-with-intel-compilers/ Betreuer: Termin nicht vor:

Steffen Keul KW 23

11. Statische Programmanalyse zur Erkennung von Data-Races (Static Program Analysis for the Detection of Data Races) Greifen mehrere Threads unsynchronisiert nebenläufig auf gemeinsamen Speicher zu, und verändert einer der Threads den Speicher durch diesen Zugriff, so spricht man von einem Data-Race. Data-Races werden häufig als Programmierfehler definiert. Die Ausführung eines Programms, das Data-Races enthält, kann somit undefinierte, also potentiell katastrophale Effekte haben. Besonders in eingebetteten Systemen, bei denen eine Fehlfunktion Schaden für Leib und Leben zur Folge haben kann, sollte somit die Abwesenheit von Data-Races nachgewiesen werden. Dieser Vortrag soll Techniken einführen, die Data-Races bereits vor der ersten Ausführung des Programms im Quelltext erkennen, oder gegebenenfalls deren Abwesenheit beweisen können. Literatur: [EA03, VJL07, Keu11] Artikel zu Data-Races im neuen C++-Standard: http://www.hpl.hp.com/personal/Hans_Boehm/c++mm/why_undef.html Betreuer: Termin nicht vor:

Steffen Keul KW 24

12. Model Checking zur partiellen Verifikation (Software Verification using Model Checking) Mithilfe von Model Checking können Eigenschaften von Programmen ermittelt und nachgewiesen werden. Dieser Vortrag stellt dar, welche Methoden sich für die Bearbeitung von nebenläufigen Programmen eignen und wie wichtige Eigenschaften für Multicore / Embedded Systems behandelt werden. Stichworte: Model Checking, Bounded Model Checking, LTL/CTL, LTS, Interleaving, Safety and Liveness properties, Dead-Locks

8 / 19

Hauptseminar Multi-Core-Programmierung Literatur: [JGP99, RG05, CKL04] Betreuer: Termin nicht vor:

Martin Wittiger KW 25

13. Multi-Core-Unterstützung in AUTOSAR 4.0 (Multicore Support in AUTOSAR 4.0) AUTOSAR ist ein Standard zur Realisierung von verteilen, eingebetteten Systemen in Fahrzeugen. Mittlerweile erstellen viele große Automobilhersteller ihre Automotive-Software auf Basis dieses Standards. Da Multi-Core-Prozessoren auch in eingebettete Systeme Einzug halten, wird diese Thematik ab der Version 4.0 in der AUTOSAR-Spezifikation berücksichtigt, wohingegen bis einschließlich Version 3.2 Single-Core-Prozessoren vorausgesetzt werden. In diesem Vortrag soll dargestellt werden, wie Multi-Core-Hardware durch AUTOSAR 4.0 unterstützt wird. Dazu ist zunächst zu untersuchen, welche Kommunikationsmöglichkeiten in AUTOSAR zwischen parallel laufenden Komponenten bestehen. Dann ist ein Vergleich zwischen den Spezifikationsversionen 3.2 und 4.0 durchzuführen, um zu ermitteln, was für die Unterstützung von Multi-CoreProzessoren verändert wurde. Abschließend soll eine Bewertung erfolgen, ob dadurch alle Aspekte der Multi-Core-Programmierung hinreichend abgedeckt sind. Literatur: • Spezifikationen von AUTOSAR 3.2 und AUTOSAR 4.0: http://www.autosar.org/ • weiterführende Artikel: [BLSP10] [SH11] [ZDN11] [CFG+ 10b] [NMBSL10] [BSER11] Betreuer: Termin nicht vor:

Torsten Görg KW 26

14. Lock-freie Inter-Core-Kommunikation auf Multicores (Lock-free inter-core Communication in Multi-Core Systems) Die Kommunikation zwischen den Kernen benötigt Synchronisation um auf korrekte Weise Daten auszutauschen. Die Anwendung von Synchronisation erfordert jedoch stets einen gewissen Mehraufwand an Rechenzeit. Hinzu können Wartezeiten von der Freigabe eines Locks von einem Thread bis zu dessen erneuten Sperrung durch einen anderen Thread kommen. In diesem Vortrag werden Datenstrukturen vorgestellt, deren Verwendung ohne explizite Synchronisationsmittel eines API auskommen. Diese Lock-freie Synchronisation definiert hierbei bestimmte Zugriffsprotokolle auf den gemeinsamen Speicher und setzt an bestimmten Stellen besondere Speicher-Instruktionen ein. Insgesamt kann somit eine höhere Effizienz bei konkurrierendem Zugriff erreicht werden, als mit anderen Mitteln. Literatur: [KP11, MS96, SGPT11]

9 / 19

Hauptseminar Multi-Core-Programmierung Betreuer: Termin nicht vor:

Steffen Keul KW 27

15. Elegante Möglichkeiten zur Parallelisierung durch Verwendung funktionaler Sprachen (Elegant Parallelization Possibilities using Functional Languages) Das funktionale Paradigma ist schon seit langem bekannt. Die ersten funktionalen Sprachen gab es bereits in den 1950er-Jahren. Allerdings standen diese Sprachen bislang im Schatten der sehr viel verbreiteteren imperativen Sprachen. Das scheint sich aktuell zu ändern. Zum einen sind in den letzten Jahren mit F#, Scala und Clojure neue, moderne funktionale Sprachen etabliert worden. Zum anderen werden zur Zeit in vielen imperativen Sprachen funktionale Konzepte nachgerüstet (z.B. λ-Ausdrücke und Delegates in C# und C++11). Auf Grund der referentiellen Transparenz ist ein rein-funktionales Programm in besonders leichter Weise parallelisierbar. Bei Verwendung von seiteneffektfreien Funktionen und unveränderlichen Objekten, wie sie in funktionalen Sprachen üblich sind, sind Datenabhängigkeiten leicht erkennbar. Damit wird unmittelbar sichtbar, welche Teilausdrücke parallel ausgewertet werden können. Im funktionalen Paradigma sind also Möglichkeiten, Programme leicht parallelisieren zu können, mit guter Wartbarkeit (durch die Seiteneffektfreiheit) vereint. In diesem Vortrag sollen diese Möglichkeiten vor allem an Hand der funktionalen Sprachen Haskell, MapReduce und Erlang beleutet werden. Literatur: • Vorteile des funktionale Paradigmas für die Parallelisierung: [Pet10] • Multicore-Programmierung mit Haskell: [CLJ+ 07] [MJS09] [BLOMPM96] [TLP02] [NC] • datenparallele Skelette: [PH06, S. 443-457] [CK10] [SHMB05] • das Parallelisierungs-Framework MapReduce: [DG10] • das Actor-Concurrency-Modell in Scala und Erlang: [HO09] [Pel08] [TBH11] • weiterführende Artikel: [VP11] Betreuer: Termin nicht vor:

Torsten Görg KW 28

16. Transactional Memory (Transactional Memory) Transactional Memory wurde von Herstellern als die Lösung für die Konsistenzerhaltung globalen Speichers angepriesen, die in Many-Cores zu einem Flaschenhals der Performanz wird. In diesem Vortrag sollen die Mechanismen des Transactional Memory genau beschrieben werden. Dabei ist zum einen die dem Benutzer angebotene Funktionalität wichtig, zum anderen aber auch die Details der Implementierung, um die

10 / 19

Hauptseminar Multi-Core-Programmierung Performanzfragen informiert diskutieren zu können. Schließlich sind die Erkenntnisse auf die Situation der Multi-Core-Architekturen abzubilden und zu bewerten. Literatur: [Dre08, ATLM+ 06, DFGG11, CBM+ 08, HM93] Betreuer: Termin nicht vor:

Martin Wittiger KW 29

Literaturverzeichnis [AB10] Sarita V. Adve and Hans-J. Boehm. Memory models: a case for rethinking parallel languages and hardware. Commun. ACM, 53:90–101, August 2010. [ACD06] J.H. Anderson, J.M. Calandrino, and U.C. Devi. Real-time scheduling on multicore platforms. In Real-Time and Embedded Technology and Applications Symposium, 2006. Proceedings of the 12th IEEE, pages 179 – 190, april 2006. [ATLM+ 06] Ali-Reza Adl-Tabatabai, Brian T. Lewis, Vijay Menon, Brian R. Murphy, Bratin Saha, and Tatiana Shpeisman. Compiler and runtime support for efficient software transactional memory. In Proceedings of the 2006 ACM SIGPLAN conference on Programming language design and implementation, PLDI ’06, pages 26–37, New York, NY, USA, 2006. ACM. [BA08] Hans-J. Boehm and Sarita V. Adve. Foundations of the c++ concurrency memory model. In PLDI ’08, pages 68–78, New York, NY, USA, 2008. ACM. [BAG+ 10] Francois Broquedis, Olivier Aumage, Brice Goglin, Samuel Thibault, Pierre-Andr Wacrenier, and Raymond Namyst. Structuring the execution of openmp applications for multicore architectures. In Parallel and Distributed Processing (IPDPS), 2010 IEEE International Symposium, pages 1 – 10. IEEE, 19-23 April 2010. [BAM07] Sebastian Burckhardt, Rajeev Alur, and Milo M. K. Martin. Checkfence: checking consistency of concurrent data types on relaxed memory models. ACM SIGPLAN Notices, 2007. [BBW11] G. Buttazzo, E. Bini, and Yifan Wu. Partitioning real-time applications over multicore reservations. Industrial Informatics, IEEE Transactions on, 7(2):302 –315, may 2011. [BCA08] B.B. Brandenburg, J.M. Calandrino, and J.H. Anderson. On the scalability of real-time scheduling algorithms on multicore platforms: A case study. In Real-Time Systems Symposium, 2008, pages 157 –169, 30 2008-dec. 3 2008.

11 / 19

Hauptseminar Multi-Core-Programmierung [BCB+ 08] B.B. Brandenburg, J.M. Calandrino, A. Block, H. Leontyev, and J.H. Anderson. Real-time synchronization on multiprocessors: To block or not to block, to suspend or spin? In Real-Time and Embedded Technology and Applications Symposium, 2008. RTAS ’08. IEEE, pages 342 –353, april 2008. [BCL09] M. Bertogna, M. Cirinei, and G. Lipari. Schedulability analysis of global scheduling algorithms on multiprocessor platforms. Parallel and Distributed Systems, IEEE Transactions on, 20(4):553 –566, april 2009. [BCSM08] B.D. Bui, M. Caccamo, Lui Sha, and J. Martinez. Impact of cache partitioning on multi-tasking real time embedded systems. In Embedded and Real-Time Computing Systems and Applications, 2008. RTCSA ’08. 14th IEEE International Conference on, pages 101 –110, aug. 2008. [BDM09] G. Blake, R.G. Dreslinski, and T. Mudge. A survey of multicore processors. Signal Processing Magazine, IEEE, 26(6):26 –37, november 2009. [BLOMPM96] S. Breitinger, R. Loogen, Y. Ortega Malln, and R. Pea Mar. Eden — the paradise of functional concurrent programming. In EuroPar’96 — European Conf. on Parallel Processing, Lyon, France, LNCS 1123, pages 710–713. Springer, 1996. [BLSP10] Niko Böhm, Daniel Lohmann, and Wolfgang Schröder-Preikschat. Multicore processors in the automotive domain: An autosar case study. In Proceedings Work-in-Progress Session of the 22nd Euromicro Conference on Real-Time Systems (ECRTS’10), July 6-9, 2010, Brussels, Belgium, 2010. [Bok81] S.H. Bokhari. A shortest tree algorithm for optimal assignments across space and time in a distributed processor system. Software Engineering, IEEE Transactions on, SE-7(6):583 – 589, nov. 1981. [BSER11] Michael Bohn, Jörn Schneider, Christian Eltges, and Robert Rößger. Migration von AUTOSAR-basierten Echtzeitanwendungen auf MulticoreSysteme. In 4. Workshop „Entwicklung zuverlässiger SoftwareSysteme“, 2011. [C++11] Working draft, standard for programming language C++, feb 2011. http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2011/ n3242.pdf. [CBM+ 08] Calin Cascaval, Colin Blundell, Maged Michael, Harold W. Cain, Peng Wu, Stefanie Chiras, and Siddhartha Chatterjee. Software transactional memory: Why is it only a research toy? Queue, 6:46–58, September 2008.

12 / 19

Hauptseminar Multi-Core-Programmierung [CFG+ 10a] Christoph Cullmann, Christian Ferdinand, Gernot Gebhard, Daniel Grund, Claire Maiza, Jan Reineke, Benoît Triquet, Simon Wegener, and Reinhard Wilhelm. Predictability considerations in the design of multicore embedded systems. Ingénieurs de l’Automobile, 807:36–42, September 2010. [CFG+ 10b] Christoph Cullmann, Christian Ferdinand, Gernot Gebhard, Daniel Grund, Claire Maiza, Jan Reineke, Benoît Triquet, and Reinhard Wilhelm. Predictability considerations in the design of multi-core embedded systems. In Industrial Embedded Systems (SIES), 2011 6th IEEE International Symposium, 2010. [CK10] Philipp Ciechanowicz and Herbert Kuchen. Enhancing muesli’s data parallel skeletons for multi-core computer architectures. In HPCC ’10 Proceedings of the 2010 IEEE 12th International Conference on High Performance Computing and Communications. IEEE Computer Society Washington, DC, USA, 2010. [CKL04] E Clarke, D Kroening, and F Lerda. A tool for checking ansi-c programs. In Tools and Algorithms for the Construction and Analysis of Systems (TACAS 2004), volume 2988 of Lecture, 2004. [CLJ+ 07] Manuel M. T. Chakravarty, Roman Leshchinskiy, Simon Peyton Jones, Gabriele Keller, and Simon Marlow. Data parallel haskell: a status report. In DAMP ’07 Proceedings of the 2007 workshop on Declarative aspects of multicore programming. ACM, 2007. [CMG+ 10] Chen Chen, Joseph B. Manzano, Ge Gan, Guang R. Gao, and Vivek Sarkar. A study of a software cache implementation of the openmp memory model for multicore and manycore architectures. In Euro-Par 2010, Part II, LNCS 6272, page 341–352, Berlin Heidelberg, 2010. SpringerVerlag. [CRKH05] Jonathan Corbet, Alessandro Rubini, and Greg Kroah-Hartman. Linux Device Drivers, 3rd Edition, chapter 5, pages 106–134. O’Reilly Media, Feb 2005. http://lwn.net/images/pdf/LDD3/ch05.pdf. [DA08] UmaMaheswari Devi and J. Anderson. Tardiness bounds under global edf scheduling on a multiprocessor. Real-Time Systems, 38:133–189, 2008. 10.1007/s11241-007-9042-1. [DB11] Robert I. Davis and Alan Burns. A survey of hard real-time scheduling for multiprocessor systems. ACM Comput. Surv., 43:35:1–35:44, October 2011. [DFGG11] Aleksandar Dragojevi´c, Pascal Felber, Vincent Gramoli, and Rachid Guerraoui. Why stm can be more than a research toy. Commun. ACM, 54:70–77, April 2011.

13 / 19

Hauptseminar Multi-Core-Programmierung [DG10] Jeffrey Dean and Sanjay Ghemawat. Mapreduce: simplified data processing on large clusters. Magazine Communications of the ACM - 50th anniversary issue: 1958 - 2008, Volume 51 Issue 1, January 200, 2010. [Dre08] Ulrich Drepper. Parallel programming with transactional memory. Queue, 6:38–45, September 2008. [EA03] Dawson Engler and Ken Ashcraft. RacerX: Effective, static detection of race conditions and deadlocks. In SOSP ’03, pages 237–252, New York, NY, USA, 2003. ACM. [FPB+ 11] Roger Ferrer, Judit Planas, Pieter Bellens, Alejandro Duran, Marc Gonzalez, Xavier Martorell, Rosa Badia, Eduard Ayguade, and Jesus Labarta. Optimizing the exploitation of multicore processors and gpus with openmp and opencl. In Keith Cooper, John Mellor-Crummey, and Vivek Sarkar, editors, Languages and Compilers for Parallel Computing, volume 6548 of Lecture Notes in Computer Science, pages 215–229. Springer Berlin / Heidelberg, 2011. [GHF+ 06] M. Gschwind, H.P. Hofstee, B. Flachs, M. Hopkin, Y. Watanabe, and T. Yamazaki. Synergistic processing in cell’s multicore architecture. Micro, IEEE, 26(2):10 –24, march-april 2006. [GHW11] Matthias Gerlach, Robert Hilbrich, and Stephan Weißleder. Can cars fly? from avionics to automotive: Comparability of domain specific safety standards. In Embedded World Conference 2011, March 2011. [GJSB05] James Gosling, Bill Joy, Guy Steele, and Gilad Bracha. The JavaTM Language Specification Third Edition. Addison Wesley, june 2005. http://java.sun.com/docs/books/jls/. [Gov11] Darryl Gove. Multicore Application Programming For Windows, Linux, and Oracle Solaris. Pearson Education, Inc., 2011. [GR10] Daniel Grund and Jan Reineke. Toward precise PLRU cache analysis. In Björn Lisper, editor, Proceedings of 10th International Workshop on Worst-Case Execution Time (WCET) Analysis, pages 28–39. Austrian Computer Society, July 2010. [Gri11] Rainer Grimm. C++11: Der Leitfaden für Programmierer zum neuen Standard. Addison-Wesley, 14. Dezember 2011. [GS12] Urs Gleim and Tobias Schüle. Multicore-Software. dpunkt, 2012. [HBK06] Jim Held, Jerry Bautista, and Sean Koehl. White paper from a few cores to many: A tera-scale computing research review, 2006.

14 / 19

Hauptseminar Multi-Core-Programmierung [Hei08] Gernot Heiser. The role of virtualization in embedded systems. In Proceedings of the 1st workshop on Isolation and integration in embedded systems, IIES ’08, pages 11–16, New York, NY, USA, 2008. ACM. [HG11] Robert Hilbrich and Hans-Joachim Goltz. Model-based generation of static schedules for safety critical multi-core systems in the avionics domain. In Proceedings of the 4th International Workshop on Multicore Software Engineering, IWMSE ’11, pages 9–16, New York, NY, USA, 2011. ACM. [HM93] Maurice Herlihy and J. Eliot B. Moss. Transactional memory: architectural support for lock-free data structures. SIGARCH Comput. Archit. News, 21:289–300, 1993. [HO09] Philipp Haller and Martin Odersky. Scala actors: Unifying thread-based and event-based programming. Theoretical Computer Science 410 (2009) 202–220, 2009. [HP08] D. Hardy and I. Puaut. Wcet analysis of multi-level non-inclusive setassociative instruction caches. In Real-Time Systems Symposium, 2008, pages 456 –466, 30 2008-dec. 3 2008. [HvK10] Robert Hilbrich and Reinier van Kampenhout. Dynamic reconfiguration in noc-based mpsocs in the avionics domain. In Proceedings of the 3rd International Workshop on Multicore Software Engineering, IWMSE ’10, pages 56–57, New York, NY, USA, 2010. ACM. [HvK11] Robert Hilbrich and J. Reinier van Kampenhout. Partitioning and task transfer on noc-based many-core processors in the avionics domain. In 4. Workshop: Entwicklung zuverlässiger Software-Systeme (Stuttgart, Germany), June 2011. [JGP99] Edmund M. Clarke Jr., Orna Grumberg, and Doron A. Peled. Model Checking. The MIT Press, 1999. [KDSS10] M. Knapp K. D. Scheidenmann and C. Stellwag. Load balancing in autosar-multicore-systemen. Elektroniknet, 2010. [Keu11] Steffen Keul. Tuning static data race analysis for automotive control software. In SCAM ’11, pages 45–54. IEEE Computer Society, 2011. [KJ07] Voss Kukanov, Alexey and Michael J. The foundations for scalable multiR threading building blocks. Intel Technology Jourcore software in intel nal, Vol. 11 Issue 4 (November 2007) Multi-Core Software, 2007. [KP11] Alex Kogan and Erez Petrank. Wait-free queues with multiple enqueuers and dequeuers. In Proceedings of the 16th ACM symposium on Principles and practice of parallel programming, PPoPP ’11, pages 223–234, New York, NY, USA, 2011. ACM.

15 / 19

Hauptseminar Multi-Core-Programmierung [KST11] Md Kamruzzaman, Steven Swanson, and Dean M. Tullsen. Inter-core prefetching for multicore processors using migrating helper threads. SIGPLAN Not., 46:393–404, March 2011. [LDB+ 99] Shih-Wei Liao, Amer Diwan, Robert P. Bosch, Jr., Anwar Ghuloum, and Monica S. Lam. SUIF Explorer: an interactive and interprocedural parallelizer. In Proceedings of the seventh ACM SIGPLAN symposium on Principles and practice of parallel programming, PPoPP ’99, pages 37– 48, New York, NY, USA, 1999. ACM. [LKR10] K. Lakshmanan, S. Kato, and R. Rajkumar. Scheduling parallel realtime tasks on multi-core processors. In Real-Time Systems Symposium (RTSS), 2010 IEEE 31st, pages 259 –268, 30 2010-dec. 3 2010. [LS09] Calvin Lin and Lawrence Snyder. Principles of Parallel Programming. Pearson Education, Inc., 2009. [MHC+ 08] Enrico Mezzetti, Niklas Holsti, Antoine Colin, Guillem Bernat, and Tullio Vardanega. Attacking the Sources of Unpredictability in the Instruction Cache Behavior. In Giorgio Buttazzo and Pascale Minet, editors, 16th International Conference on Real-Time and Network Systems (RTNS 2008), Rennes, France, 2008. Isabelle Puaut. [MJS09] Simon Marlow, Simon Peyton Jones, and Satnam Singh. Runtime support for multicore haskell. In ICFP ’09 Proceedings of the 14th ACM SIGPLAN international conference on Functional programming. ACM New York, NY, USA, 2009. [MLC+ 09] Carlos Madriles, Pedro López, Josep M. Codina, Enric Gibert, Fernando Latorre, Alejandro Martinez, Raúl Martinez, and Antonio Gonzalez. Boosting single-thread performance in multi-core systems through finegrain multi-threading. In Proceedings of the 36th annual international symposium on Computer architecture, ISCA ’09, pages 474–483, New York, NY, USA, 2009. ACM. [MS96] Maged M. Michael and Michael L. Scott. Simple, fast, and practical nonblocking and blocking concurrent queue algorithms. In Proceedings of the fifteenth annual ACM symposium on Principles of distributed computing, PODC ’96, pages 267–275, New York, NY, USA, 1996. ACM. [MTT+ 09] D Mallón, G Taboada, C Teijeiro, J Touriño, and ... Performance evaluation of mpi, upc and openmp on multicore architectures. Recent Advances in . . . , 2009. [MV10] E. Mezzetti and T. Vardanega. Towards a cache-aware development of high integrity real-time systems. In Embedded and Real-Time Computing Systems and Applications (RTCSA), 2010 IEEE 16th International Conference on, pages 329 –338, aug. 2010.

16 / 19

Hauptseminar Multi-Core-Programmierung [NC] R Newton, CP Chen, and ... Intel concurrent collections for haskell. Computer Science and Artificial Intelligence Laboratory Technical Report, MIT-CSAIL-TR-2011-015. [NMBSL10] Nicolas Navet, Aurélien Monot, Bernard Bavoux, and Françoise SimonotLion. Multi-source and multicore automotive ecus-os protection mechanisms and scheduling. In Industrial Electronics (ISIE), 2010 IEEE International Symposium, 4-7 July 2010, pages 3734 – 3741. IEEE, 2010. [Pel08] Simone Pellegrini. Scala and Erlang, the actor based concurrency model in the multi-core era. dps.uibk.ac.at, 2008. [Pet10] Tomas Petricek. Real-World Function Programming. Manning, 2010. [PH06] Peter Pepper and Petra Hofstedt. Funktionale Programmierung. Springer-Verlag Berlin/Heidelberg, 2006. [PQC+ 11] M. Paolieri, E. Quiñones, F.J. Cazorla, R.I. Davis, and M. Valero. Ia3: An interference aware allocation algorithm for multicore hard real-time systems. In Real-Time and Embedded Technology and Applications Symposium (RTAS), 2011 17th IEEE, pages 280 –290, april 2011. [RG05] I Rabinovitz and O Grumberg. Bounded model checking of concurrent programs. In In Proc. of CAV, 2005. [RGBW07] Jan Reineke, Daniel Grund, Christoph Berg, and Reinhard Wilhelm. Timing predictability of cache replacement policies. Real-Time Systems, 37(2):99–122, November 2007. [RR10] Thomas Rauber and Gudula Rünger. Parallel Programming for Multicore and Cluster Systems. Springer-Verlag Berlin/Heidelberg, 2010. [SALG11] Abusayeed Saifullah, Kunal Agrawal, Chenyang Lu, and Christopher Gill. Multi-core real-time scheduling for generalized parallel task models. In Real-Time Systems Symposium (RTSS), 2011 IEEE 32nd, pages 217 –226, 29 2011-dec. 2 2011. [SCMLC12] Maria Soler, Alfons Crespo, Miguel Masmano, and Roger Llorca-Cejudo. Implications of cache management in partitioned systems. January 2012. [SGPT11] Håkan Sundell, Anders Gidenstam, Marina Papatriantafilou, and Philippas Tsigas. A lock-free algorithm for concurrent bags. In Proceedings of the 23rd ACM symposium on Parallelism in algorithms and architectures, SPAA ’11, pages 335–344, New York, NY, USA, 2011. ACM. [SH11] Bin Sun and Yue-li Hu. Improved autosar based on multi-core architecture and its application in the body control. Research Journal of Applied Sciences, Engineering and Technology 3(10): 1197-1202, 2011, 2011.

17 / 19

Hauptseminar Multi-Core-Programmierung [SHMB05] Norman Scaife, Susumi Horiguchi, Greg Michaelson, and Paul Bristow. A parallel sml compiler based on algorithmic skeletons. Journal of Functional Programming, Volume 15 Issue 4, July 2005, 2005. [SKR07] Tyler Sondag, Viswanath Krishnamurthy, and Hridesh Rajan. Predictive thread-to-core assignment on a heterogeneous multi-core processor. In Proceedings of the 4th workshop on Programming languages and operating systems, PLOS ’07, pages 7:1–7:5, New York, NY, USA, 2007. ACM. [SMH98] Byoungro So, Sungdo Moon, and Mary W. Hall. Measuring the effectiveness of automatic parallelization in SUIF. In Proceedings of the 12th international conference on Supercomputing, ICS ’98, pages 212–219, New York, NY, USA, 1998. ACM. [SVDN07] A. Sangiovanni-Vincentelli and M. Di Natale. Embedded system design for automotive applications. Computer, 40(10):42 –51, oct. 2007. [SYN11] S Schneider, J Yeom, and D Nikolopoulos. Programming multiprocessors with explicitly managed memory hierarchies. Computer, PP(99):1, 2011. [SYR+ 09] Scott Schneider, Jae-Seung Yeom, Benjamin Rose, John C. Linford, Adrian Sandu, and Dimitrios S. Nikolopoulos. A comparison of programming models for multiprocessors with explicitly managed memory hierarchies. SIGPLAN Not., 44:131–140, February 2009. [TBH11] Melinda Toth, Istvan Bozo, and Zoltan Horvath. Static analysis and refactoring towerlang multicore programming. In Fourth Workshop on Programming Language Approaches to Concurrency and CommunicationcEntric Software, PLACES’11, Saarbrücken, Germany, pages 43–50, April 2011. [TLP02] P. W. Trinder, H.-W. Loidl, and R. F. Pointon. Parallel and distributed haskells. Journal of Functional Programming, Volume 12 Issue 5, July 2002, 2002. [Ung97] Theo Ungerer. Parallelrechner und parallele Programmierung. Spektrum, 1997. [VJL07] Jan Wen Voung, Ranjit Jhala, and Sorin Lerner. RELAY: static race detection on millions of lines of code. In ESEC-FSE ’07: Proceedings of the the 6th joint meeting of the European software engineering conference and the ACM SIGSOFT symposium on The foundations of software engineering, pages 205–214, New York, NY, USA, 2007. ACM.

18 / 19

Hauptseminar Multi-Core-Programmierung [VP11] Ronald Veldema and Michael Philippsen. A hybrid functional and objectoriented language for a multi-core future. it - Information Technology: Vol. 53, No. 2, pages 84–90, 2011. [WEE+ 08] Reinhard Wilhelm, Jakob Engblom, Andreas Ermedahl, Niklas Holsti, Stephan Thesing, David Whalley, Guillem Bernat, Christian Ferdinand, Reinhold Heckmann, Tulika Mitra, Frank Mueller, Isabelle Puaut, Peter Puschner, Jan Staschulat, and Per Stenström. The worst-case execution-time problem – overview of methods and survey of tools. ACM Trans. Embed. Comput. Syst., 7:36:1–36:53, May 2008. [WFC+ 09] Reinhard Wilhelm, Christian Ferdinand, Christoph Cullmann, Daniel Grund, Jan Reineke, and Benoît Triquet. Designing predictable multicore architectures for avionics and automotive systems. In Workshop on Reconciling Performance with Predictability (RePP), October 2009. [WGR+ 09] Reinhard Wilhelm, Daniel Grund, Jan Reineke, Marc Schlickling, Markus Pister, and Christian Ferdinand. Memory hierarchies, pipelines, and buses for future architectures in time-critical embedded systems. IEEE Transactions on CAD of Integrated Circuits and Systems, 28(7):966– 978, July 2009. [Wil12] Anthony Williams. C++ Concurrency in Action: Practical Multithreading. Manning Publications, January 28, 2012. [WLY09] CC Wu, LF Lai, CT Yang, and ... Using hybrid mpi and openmp programming to optimize communications in parallel loop self-scheduling schemes for multicore pc clusters. Journal of Supercomputing, 2009. [ZDN11] Haibo Zeng and Marco Di Natale. Mechanisms for guaranteeing data consistency and flow preservation in autosar software on multi-core platforms. In Industrial Embedded Systems (SIES), 2011 6th IEEE International Symposium. IEEE, 2011.

19 / 19