was ist das enhance projekt?

Heterogene Beschleuniger-Systeme sind spätestens seit dem Aufkommen von Multi-Core CPUs und programmierbaren „general-purpose” Grafikkarten (Graphics Processing Units, GPUs) weit verbreitet. Die Kombination von Multi-Core CPUs und GPUs wird heute bereits in Standard PCs ausgeliefert. Auch Rechenzentren setzten vermehrt auf experimentelle Cluster Systeme, die Multi-Core CPUs, GPUs und spezielle Co-Prozessoren, wie z.B. ClearSpeed CSX oder Field Programmable Gate Arrays (FPGAs) vereinen. Diese Entwicklung ist insbesondere für das kosten- und energieeffiziente Lösen mittelgroßer wissenschaftlicher Probleme interessant, da nicht auf einen teuren Großrechner zurückgegriffen werden muss. Dadurch wird es nahezu jeglicher wissenschaftlicher und industrieller Einrichtung ermöglicht, auf signifikante Rechenleistung zuzugreifen und zunehmend komplexere numerische Simulationen durchzuführen.

Die Nutzung solcher Systeme ist heute noch nur sehr eingeschränkt möglich, da die meisten Beschleuniger mit proprietären und ungewohnten Sprachen und „Application Programming Interfaces” (APIs) programmiert werden müssen. Das effiziente Entwickeln von Software für diese Architekturen ist für unerfahrene Entwickler in höchstem Maße herausfordernd und erfordert Wissen über die zugrunde liegenden Hard- und Software-Komponenten. Das ENHANCE Konsortium nimmt sich daher den Herausforderungen an, die Entwicklung und Anwendung von Hardware-beschleunigtem Quellcode zu vereinfachen.

Generelle Struktur des ENHANCE Projektes.

Um der ersten Herausforderung, der Vereinfachung der Softwareentwicklung für heterogene Systeme, zu begegnen, beabsichtigen wir die Entwicklung eines Tool-Flows, der Schleifenkonstrukte im Quellcode automatisch parallelisiert. Wir streben daher zum Zweck der automatischen „source-2-source” Übersetzung der Anwendungen die folgenden Schritte an:

  • Als erstes wird ein Quellcode Parser zur Analyse der Anwendung und der anschließenden Übersetzung in ein polyedrisches Modell eingesetzt.
  • Diese Zwischenrepräsentation wird durch Index-Transformationen optimiert, um die Anzahl der unabhängigen Indizes zu maximieren.
  • Um die optimierten Index-Pfade auf die vorhandenen Architekturen abzubilden, werden wir das PLUTO Projekt für die Unterstützung heterogener Architekturen erweitern. PLUTO beherrscht bereits das Abbilden eines polyedrisches Modells auf OpenMP. Das Ergebnis dieses Schrittes wird eine interne Repräsentation der Index-Pfade für eine spezielle Architektur sein.
  • Um Quellcode für die Zielarchitektur zu generieren, soll abschließend das CLooG tool eingesetzt und an die Erfordernisse der Programmiersprachen für heterogener Beschleuniger angepasst werden.

In einem zweiten Teil des Projektes adressieren wir die Herausforderung, Scheduling-Entscheidungen auf heterogenen Ressourcen zur Laufzeit zu treffen und verschiedene Beschleuniger als gleichgestellte Recheneinheiten zu betrachten, die damit vom Scheduler äquivalent zu CPUs behandelt werden können. Das Ziel des Schedulings ist die Unterstützung von Time-Sharing für heterogene Systeme, also das Aufteilen der Rechenzeit auf Prozesse, um eine fairen Verteilung der Rechenzeit auf konkurrieren Prozesse Rechnung zu ermöglichen. Wir zielen in ENHANCE daher darauf ab:

  • Spezifische Hardware Charakteristiken und den Status der verfügbaren heterogenen Recheneinheiten einzubeziehen.
  • Wissen über die Verfügbarkeit und Eignung eines Prozesses für einen bestimmten Beschleuniger von der Anwendung zu akquirieren.
  • Ein Scheduling- und Programmiermodell zu entwerfen, das pre-emption und Migration für Beschleuniger erlaubt.
  • Verschiedene Scheduling-Algorithmen zu entwerfen und auszuwerten.
  • Eine Erweiterung des „Linux Completely Fair Scheduler” zu entwickeln, um heterogene Recheneinheiten zu unterstützen.

Beide zuvor genannten Teile des Projektes benötigen Profiling Daten als Eingabe, um ihre Ergebnisse optimieren zu können. Zusätzlich erfordern die Entwicklungen ein wohldefiniertes Interface zwischen Anwendung und Betriebssystem. In einem dritten Teil des Projektes wird daher ein Performance-Modell und ein „fat-binary” Mechanismus entwickelt. Das Performance-Modell soll daher:

  • Über Benchmarking Werkzeuge genaue Laufzeiten, Ein- und Ausgabegrößen der Daten und die Aufrufhäufigkeit von prototypischen und später generierten Operationen bestimmen und zur Verfügung stellen.
  • Ein Modell zur bereitstellen, das die Beschreibung von Operationen und ihrer Abhängigkeiten erlaubt.
Das angestrebte „fat-binary” Modell soll folgende Informationen beinhalten:
  • Ein Metadaten-Modell, das Parameter der Anwendung beschreibt, die für das Scheduling der Prozesse der Anwendung genutzt werden können.
  • Ausführbaren Binärcode für heterogene Architekturen in eine Datei kapseln.

Die Partner des ENHANCE Projektes setzen sich mit diesen Vorhaben hohe Ziele und erstreben ein vollständiges Framework, das sowohl die automatische Programmierung und das Scheduling von Anwendungen auf heterogenen Recheneinheiten erlaubt und zusätzlich ein Performance-Modell für die Optimierung dieser Schritte einbezieht. Während des Entwicklungsprozesses des benötigten Tool-Flows und der Erweiterung des Linux Betriebssystems evaluieren wir entwickelte Prototypen des Frameworks iterativ durch das Einbeziehen der anspruchsvollen Anwendungen der Industriepartner der Bio-Informatik, des Automotive Computing, der Simulation von Schadstoffausbreitungen und der Thermodynamik. Auf diese Weise gehen theoretische Forschung und praktische Anwendung Hand in Hand und lassen das Projekt zu einer spannenden Herausforderung für alle beteiligten Partner werden.