Projekte

Aktuelle Projekte

Moderne Programmier-Paradigmen in heterogenen HPC-Umgebungen
Laufzeit: 21.07.2025 bis 20.07.2028

Im modernen wissenschaftlichen Rechnen werden große numerische Probleme in der Regel auf Cluster-Rechnern gelöst, also großen Sammlungen miteinander verbundener Rechenknoten, die durch Nachrichtenübermittlung zusammenarbeiten können. Im Hochleistungsrechnen (HPC) ist ein zunehmender Trend zu heterogenen Clustern erkennbar, in denen neben herkömmlichen CPUs auch Beschleuniger wie GPUs oder FPGAs zum Einsatz kommen. Diese Entwicklung erhöht zwar die theoretische Spitzenleistung dieser Systeme, doch ihre wachsende Komplexität macht auch die Programmierung und Leistungsoptimierung anspruchsvoller. Infolgedessen werden die verfügbaren Rechenressourcen von Cluster-Computern oft nicht voll ausgeschöpft. Um den Herausforderungen der Programmierung heterogener Systeme zu begegnen, führte Intel 2018 das oneAPI-Framework ein, das sich später zu einem offenen Standard entwickelte. Zusätzlich zu einer Reihe wissenschaftlicher Bibliotheken bietet oneAPI Unterstützung für Single-Source-Programmierung durch SYCL, eine C++-basierte Abstraktionsschicht für das Rechnen auf heterogenen Systemen. Allerdings haben Programmiersprachen wie C/C++ und Fortran, die traditionell im HPC weit verbreitet sind, gegenüber moderneren Sprachen wie Rust erhebliche Nachteile, insbesondere in Bezug auf Speichersicherheit und allgemeine Benutzerfreundlichkeit. Andererseits, obwohl Rust in der Entwickler-Community sehr beliebt ist aufgrund seines modernen Designs und der erheblichen Sicherheitsgarantien, die der Rust-Compiler zur Kompilierungszeit bieten kann, nimmt es im Bereich des Hochleistungsrechnens nur eine Nischenrolle ein. Gründe dafür könnten sein, dass Rust in HPC-Kurrikula wenig unterrichtet wird und dass Bibliotheken wie Rayon, die parallele Programmierung für gemeinsamen Speicher erheblich vereinfachen, nicht auf heterogenen Umgebungen eingesetzt werden können.

In diesem Projekt evaluieren wir die Verwendung von Rust für die Single-Source-Programmierung, die auf verschiedene Recheneinheiten (CPUs, GPUs, etc.) abzielt. Eine zentrale Forschungsfrage ist, welche Sicherheitsgarantien von Rust innerhalb eines solchen Programmiermodells beibehalten werden können. Unser Ziel ist es, ein umfassend ausgestattettes HPC-Framework auf Basis von oneAPI zu entwickeln, das Single-Source-Programmierung in Rust mit hohem Abstraktionsgrad ermöglicht und für Entwickler einen ähnlich hohen Komfort bietet wie bestehende Lösungen wie Rayon oder SYCL. Wir untersuchen auch, ob ein solches Framework HPC-Programmierern helfen kann, sichereren Code in heterogenen Umgebungen zu schreiben. Darüber hinaus untersuchen wir die Machbarkeit der automatischen Auswahl einer geeigneten Recheneinheit für parallele Programmkomponenten zur Laufzeit. Hierfür können Modelle aus dem Maschinellen Lernen zum Einsatz kommen, die auf den Ergebnissen von Benchmarks und statischer Code-Analyse numerischer Anwendungen trainiert wurden, um die am besten geeignete Recheneinheit für bestimmte Rechenmuster vorherzusagen. Dies könnte dazu beitragen, die Ressourcennutzung von Cluster-Computern in Zukunft zu verbessern.

Projekt im Forschungsportal ansehen

Compiler-basierte Korrektheitsprüfungen für SPMD-Anwendungen
Laufzeit: 01.03.2021 bis 28.02.2027

Die Probleme, die heute im Bereich des wissenschaftlichen Rechnens und des Hochleistungsrechnens bearbeitet werden, sind sehr komplex und erfordern immense Rechenressourcen. Aufgrund des Umfangs von Anwendungen wie z. B. Klimasimulationen müssen diese auf Clustern ausgeführt werden, die aus vielen vernetzten Rechnerknoten bestehen. Um diese Ressourcen nutzen zu können, muss eine Anwendung mit parallelen verteilten Programmiermodellen implementiert werden. Die Standardmethode, die hierfür im Hochleistungsrechnen verwendet wird, heißt Single Program, Multiple Data (SPMD). Eine Anwendung erzeugt mehrere Prozesse, die an demselben Problem arbeiten und über Nachrichtenübermittlung miteinander kommunizieren. Dies ermöglicht zwar eine hohe Skalierbarkeit, doch ist das SPMD-Modell nicht einfach zu programmieren, und es können viele neue Arten von Programmierfehlern auftreten.

In diesem Projekt entwickeln wir ein compilerbasiertes Tool namens SPMDClang, das die Entwickler von SPMD-Anwendungen mit Korrektheitsprüfungen zur Kompilierzeit unterstützt. Es basiert auf dem Clang-Frontend der LLVM-Compiler-Toolchain. Ziel ist es, Compilerwarnungen und Fehler über die Korrektheit der Kommunikationsschemata von SPMD-Codes während der Kompilierung zu liefern. Dies erfordert eine statische Analyse der Struktur der Message-Passing-Operationen in einem Programm und neu entwickelte Algorithmen zur Erkennung potenzieller Probleme mit den Kommunikationsmustern. Da einige wichtige Programmparameter, wie z.B. die Anzahl der Prozesse, die zur Laufzeit verwendet werden, zur Kompilierungszeit nicht klar sind, ist ein symbolischer Ausführungsansatz erforderlich, um das potenzielle Laufzeitverhalten der SPMD-Anwendung zu simulieren. Hierfür wird ein Ansatz entwickelt, der farbige Petri-Netze verwendet, um das Laufzeitverhalten des analysierten Programms zu simulieren. Mit diesem Projekt wollen wir herausfinden, inwieweit es möglich ist, SPMD-bezogene Fehlerklassen mit einem statischen Kompilierzeitansatz zu erkennen, da die meisten existierenden Arbeiten auf diesem Gebiet auf Laufzeitkorrektheitsprüfungen basieren. Darüber hinaus ist die Frage relevant, wie stark sich die Analyse der symbolischen Ausführung auf die Kompilierzeit einer Anwendung auswirken wird. Das Ziel ist es, ein benutzerfreundliches Werkzeug zur Verfügung zu stellen, das die Entwicklung von SPMD-Anwendungen für Entwickler erleichtert. Wir haben die Möglichkeit, diese Aspekte zu evaluieren, indem wir das entwickelte Werkzeug in unsere Kurse zur parallelen Programmierung einbinden, in denen die Entwicklung von SPMD-Anwendungen in den Übungen gelehrt wird.
Dieser Text wurde mit DeepL übersetzt

Projekt im Forschungsportal ansehen

Eine allgemeine Speicher-Engine für moderne Speicherhierarchien
Laufzeit: 01.10.2022 bis 30.04.2026

Die wissenschaftliche Forschung wird zunehmend von datenintensiven Problemen bestimmt. Da die Komplexität der untersuchten Probleme zunimmt, steigt auch der Bedarf an hohem Datendurchsatz und -kapazität. Das weltweit produzierte Datenvolumen verdoppelt sich etwa alle zwei Jahre, was zu einer exponentiellen Datenflut führt. Diese Datenflut stellt eine direkte Herausforderung für Datenbankmanagementsysteme und Dateisysteme dar, die die Grundlage für eine effiziente Datenanalyse und -verwaltung bilden. Diese Systeme verwenden verschiedene Speichergeräte, die traditionell in Primär-, Sekundär- und Tertiärspeicher unterteilt waren. Mit der Einführung der disruptiven Technologie des nichtflüchtigen Arbeitsspeichers (NVRAM) begannen diese Klassen jedoch miteinander zu verschmelzen, was zu heterogenen Speicherarchitekturen führte, bei denen jedes Speichergerät sehr unterschiedliche Leistungsmerkmale aufweist (z. B. Persistenz, Speicherkapazität, Latenz). Eine große Herausforderung ist daher die Ausnutzung der spezifischen Leistungscharakteristika dieser Speichergeräte.
Zu diesem Zweck wird SMASH die Vorteile einer gemeinsamen Speicher-Engine untersuchen, die eine heterogene Speicherlandschaft verwaltet, einschließlich herkömmlicher Speichergeräte und nichtflüchtiger Speichertechnologien. Das Herzstück dieser Speicher-Engine werden B-epsilon-Bäume sein, da diese zur effizienten Nutzung dieser unterschiedlichen Geräte verwendet werden können. Darüber hinaus werden Strategien zur Datenplatzierung und -migration untersucht, um den durch die Übertragung von Daten zwischen verschiedenen Geräten verursachten Overhead zu minimieren. Durch den Wegfall der Notwendigkeit flüchtiger Caches kann die Datenkonsistenz besser sichergestellt werden. Auf der Anwendungsseite wird die Speicher-Engine Key-Value- und Objekt-Schnittstellen bieten, die für eine Vielzahl von Anwendungsfällen genutzt werden können, zum Beispiel für das Hochleistungsrechnen (HPC) und für Datenbankmanagementsysteme. Aufgrund der immer größer werdenden Kluft zwischen der Leistung von Rechen- und Speichergeräten sowie deren stagnierender Zugriffsleistung sind außerdem Techniken zur Datenreduzierung sehr gefragt, um den Bandbreitenbedarf beim Speichern und Abrufen von Daten zu verringern. Wir werden daher Forschungsarbeiten zu Datentransformationen im Allgemeinen und zu den Möglichkeiten externer und beschleunigter Transformationen durchführen. Übliche HPC-Workflows werden durch die Integration von SMASH in das bestehende JULEA-Storage-Framework unterstützt, während Datenbanksysteme die Schnittstelle von SMASH direkt nutzen können, um Daten zu speichern oder abzurufen.

Projekt im Forschungsportal ansehen

Abgeschlossene Projekte

Gekoppeltes Speichersystem für die effiziente Verwaltung selbst-beschreibender Datenformate
Laufzeit: 01.10.2019 bis 31.05.2023

Die Informationstechnologie wurde in den vergangenen Jahrzehnten immer wichtiger für die Gesellschaft. Insbesondere in der wissenschaftlichen Forschung können dadurch zunehmend komplexe Probleme gelöst werden, die heutzutage die Rechenleistung von Supercomputern benötigen. Die wachsende Komplexität der Fragestellungen sowie die steigende Rechenleistung führen dabei zu immer größer werdenden Datenmengen; die weltweit produzierte Datenmenge verdoppelt sich ungefähr alle zwei Jahre, was zu einem exponentiellen Wachstum führt. Dies führt zu Problemen, da die Verbesserung der Speicher- und Netzwerktechnologie deutlich langsamer voranschreitet. Das Resultat ist eine immer größer werdende Lücke zwischen der Leistungsfähigkeit von Rechen- und Speichergeräten, die zu einem Flaschenhals bei der Datenverwaltung führt. Dies betrifft insbesondere große Speichersysteme, wie sie im Hochleistungsrechnen genutzt werden. Um diese Situation zu verbessern, wird eine Hierarchie unterschiedlicher Speichergeräte eingesetzt, um sowohl die Kapazitäts- als auch die Geschwindigkeitsanforderungen zu erfüllen. Indem die Vorteile unterschiedlicher Speichertechnologien vereint werden, können einerseits die Leistung erhöht und andererseits die Kosten für Anschaffung, Betrieb und Wartung reduziert werden. Für zukünftige Exascale-Systeme werden sich diese Probleme noch verschärfen, weswegen signifikante Verbesserungen notwendig werden, um die Leistungsfähigkeit solcher Systeme ausnutzen zu können. Die existierende E/A-Softwareumgebung verursacht zusätzliche Probleme bei der Leistungsfähigkeit und Datenverwaltung.
Die produzierten Daten werden typischerweise mithilfe selbst-beschreibender Datenformate gespeichert, um den Austausch und die Analyse in der wissenschaftlichen Gemeinschaft zu ermöglichen. Das Ziel des Projektes ist es, die Vorteile eines Speichersystems, das enger mit solchen Datenformaten gekoppelt ist, zu untersuchen. Im Rahmen des Projektes wird ein neuartiges hybrides Speichersystem entworfen, das Technologien aus dem Hochleistungsrechnen und den Datenbanksystemen nutzt. Durch die Kopplung können strukturelle Informationen genutzt werden, um passende Speichertechnologien und -hierarchiestufen auszuwählen. Da solche Informationen momentan nicht verfügbar sind, müssen existierende Speichersysteme auf Heuristiken zurückgreifen, die zu suboptimaler Leistung und unnötigen Datenbewegungen führen. Darüber hinaus wird das Speichersystem anpassbare E/A-Semantiken unterstützen, um Anwendungs- und Datenformatsanforderungen besser erfüllen zu können. Zusammengenommen werden diese Änderungen neuartige Datenverwaltungsansätze und Leistungssteigerungen ermöglichen. Existierende Abläufe wissenschaftlicher Nutzer werden mithilfe einer Datenanalyseschnittstelle unterstützt. Alle Änderungen werden ausführlich getestet, um Rückwärtskompatibilität zu garantieren. Es werden keine Änderungen notwendig sein, um existierende Anwendungen auf Basis von CoSEMoS auszuführen.

Projekt im Forschungsportal ansehen

Letzte Änderung: 08.06.2023 -
Ansprechpartner: Webmaster