Florian Mayer

Florian Mayer, M. Sc.

Department Informatik (INF)
Lehrstuhl für Informatik 2 (Programmiersysteme)

Raum: Raum 05.156
Martensstr. 3
91058 Erlangen

Sprechstunde

n.V. per E-Mail

Projekte

  • OpenMP für rekonfigurierbare heterogene Architekturen

    (Drittmittelfinanzierte Gruppenförderung – Teilprojekt)

    Titel des Gesamtprojektes: OpenMP für rekonfigurierbare heterogene Architekturen
    Laufzeit: 01.11.2017 - 31.12.2023
    Mittelgeber: Bundesministerium für Bildung und Forschung (BMBF)
    URL: https://www2.cs.fau.de/research/ORKA/
    High-Performance Computing (HPC) ist ein wichtiger Bestandteil für die europäische Innovationskapazität und wird auch als ein Baustein bei der Digitalisierung der europäischen Industrie gesehen. Rekonfigurierbare Technologien wie Field Programmable Gate  Array (FPGA) Module gewinnen hier wegen ihrer Energieeffizienz, Performance und ihrer Flexibilität immer größere Bedeutung.
    Es wird außerdem zunehmend auf HPC-Systeme mit heterogenen Architekturen gesetzt, auch auf solche mit FPGA-Beschleunigern. Die große Flexibilität dieser FPGAs ermöglicht es, dass eine große Klasse von HPC-Applikationen mit FPGAs realisiert werden kann. Allerdings ist deren Programmierung bisher vorwiegend Spezialisten vorbehalten und sehr zeitaufwendig, wodurch deren Verwendung in Bereichen des wissenschaftlichen Höchstleistungsrechnens derzeit noch selten ist.
    Im HPC-Umfeld gibt es verschiedenste Programmiermodelle für heterogene Rechnersysteme mit einigen Typen von Beschleunigern. Gängige Programmiermodelle sind zum Beispiel OpenCL (opencl.org), OpenACC (openacc.org) und OpenMP (OpenMP.org). Eine produktive Verwendbarkeit dieser Standards für FPGAs ist heute jedoch noch nicht gegeben.

    Ziele des ORKA Projektes sind:

    1. Nutzung des OpenMP-4.0-Standards als Programmiermodell, um ohne Spezialkenntnisse heterogene Rechnerplattformen mit FPGAs als rekonfigurierbare Architekturen durch portable Implementierungen eine breitere Community im HPC-Umfeld zu erschließen.
    2. Entwurf und Implementierung eines Source-to-Source-Frameworks, welches C/C++-Code mit OpenMP-4.0-Direktiven in ein ausführbares Programm transformiert, das die Host-CPUs und FPGAs nutzt.
    3. Nutzung und Erweiterung existierender Lösungen von Teilproblemen für die optimale Abbildung von Algorithmen auf heterogene Systeme und FPGA-Hardware.
    4. Erforschung neuer (ggf. heuristischer) Methoden zur Optimierung von Programmen für inhärent parallele Architekturen.

    Im Jahr 2018 wurden folgende wesentlichen Beiträge geleistet:

    • Entwicklung eines source-to-source Übersetzerprototypen für die Umschreibung von OpenMP-C-Quellcode (vgl. Ziel 2).
    • Entwicklung eines HLS-Übersetzerprototypen, der in der Lage ist, C-Code in Hardware zu übersetzen. Dieser Prototyp bildet die Basis für die Ziele 3 und 4.
    • Entwicklung mehrerer experimenteller FPGA-Infrastrukturen für die Ausführung von Beschleunigerkernen (nötig für die Ziele 1 und 2).

    Im Jahr 2019 wurden folgende wesentlichen Beiträge geleistet:

    • Veröffentlichung zweier Papiere: "OpenMP on FPGAs - A Survey" und "OpenMP to FPGA Offloading Prototype using OpenCL SDK".
    • Erweiterung des source-to-source Übersetzerprototypen um OpenMP-Target-Outlining (incl. Smoke-Tests).
    • Fertigstellung des technischen Durchstichs für den ORKA-HPC-Prototypen (OpenMP-zu-FPGA-Übersetzer).
    • Benchmark-Suite für die quantitative Leistungsanalyse von ORKA-HPC.
    • Erweiterung des source-to-source Übersetzerprototypen um das Genom für die genetische Optimierung der High-Level-Synthese durch Einstellen von HLS-Pragmas.
    • Prototypische Erweiterung des TaPaSCo-Composers um ein (optionales) automatisches Einfügen von Hardware-Synchronisationsprimitiven in TaPaSCo-Systeme.

    Im Jahr 2020 wurden folgende wesentlichen Beiträge geleistet:

    • Weiterentwicklung der Genetischen Optimierung.
    • Aufbau eines Docker-Containers für zuverlässige Reproduzierbarkeit der Ergebnisse.
    • Integration der Softwarekomponenten der Projektpartner.
    • Plugin-Architektur für Low-Level-Platformen.
    • Implementation und Integration zweier LLP-Plugin-Komponenten.
    • Erweiterung des akzeptierten OpenMP-Sprachstandards.
    • Erweiterung der Test-Suite.

    Im Jahr 2021 wurden folgende wesentlichen Beiträge geleistet:

    • Erweiterung der Benchmark-Suite.
    • Erweiterung der Test-Infrastruktur.
    • Erfolgreicher Projektabschluss mit Live-Demo für den Projektträger.
    • Evaluation des Projekts.
    • Veröffentlichung der Publikation "ORKA-HPC - Practical OpenMP for FPGAs".
    • Veröffentlichung des Quell-Codes und der Disseminationsumgebung auf Github.
    • Erweiterung des akzeptierten OpenMP-Sprachstandards um neue OpenMP-Klauseln für die Steuerung der FPGA-bezogenen Transformationen.
    • Weiterentwicklung der Genetischen Optimierung.
    • Untersuchung des Verhältnisses von HLS-Leistungsschätzwerten und tatsächlichen Leistungskennzahlen.
    • Aufbau eines linearen Regressionsmodells für die Vorhersage der tatsächlichen Leistungskennzahlen auf Basis der HLS-Schätzwerte.
    • Entwicklung von Infrastruktur für die Übersetzung von OpenMP-Reduktionsklauseln.
    • Erweiterung um die Übersetzung vom OpenMP-Pragma `parallel for` in ein paralleles FPGA-System.

    Im Jahr 2022 wurden folgende wesentlichen Beiträge geleistet:

    • Generierung und Veröffentlichung eines Datensatzes zur Untersuchung des Verhältnisses von HLS-Ressourcenschätzwerten und tatsächlichen Leistungskennzahlen.
    • Erstellung und vergleichende Evaluierung verschiedener Regressionsmodelle zur Vorhersage der tatsächlichen Systemperformanz aus frühen Schätzwerten.
    • Analyse und Bewertung der durch die HLS generierten Ressourcenabschätzungen.
    • Veröffentlichung der Publikation “Reducing OpenMP to FPGA Round-trip Times with Predictive Modelling”.
    • Entwicklung eines auf dem Polyeder-Modell beruhenden Verfahrens zur Detektion und Entfernung von redundanten Lese-Operationen in FPGA-Stencil-Codes.
    • Implementierung dieses Verfahrens in ORKA-HPC.
    • Quantitative Evaluation der Stärken dieses Verfahrens und Ermittlung der Voraussetzungen, unter denen das Verfahren anwendbar ist.
    • Veröffentlichung der Publikation “Employing Polyhedral Methods to Reduce Data Movement in FPGA Stencil Codes”.

    Aktuelle Lehrveranstaltungen

    Ausgewählte Kapitel aus dem Übersetzerbau

    Titel Ausgewählte Kapitel aus dem Übersetzerbau
    Kurztext inf2-ueb3
    Turnus des Angebots nur im Wintersemester
    Semesterwochenstunden 2

    Es ist keine Anmeldung erforderlich.

    In der Vorlesung werden Aspekte des Übersetzerbaus beleuchtet, die über die Vorlesungen "Grundlagen des Übersetzerbaus" und "Optimierungen in Übersetzern" hinausgehen.

    Voraussichtliche Themen sind:
    - Übersetzer u. Optimierungen für funktionale Programmiersprachen
    - Übersetzung aspektorientierter Programmiersprachen
    - Erkennung von Wettlaufsituationen
    - Software Watermarking
    - Statische Analyse und symbolische Ausführung
    - Binden von Objektcode und Unterstützung für dynamische Bibliotheken
    - Strategien zur Ausnahmebehandlung
    - Just-in-Time-Übersetzer
    - Speicherverwaltung und Speicherbereinigung
    - LLVM

    Die Materialien zur Lehrveranstaltung werden über StudOn bereitgestellt: https://www.studon.fau.de/crs4533480.html

    1. Parallelgruppe

    Zeitpunkt Startdatum - Enddatum Ausfalltermin Durchführende/-r Bemerkung Raum
    wöchentlich Mi, 08:15 - 09:45 18.10.2023 - 07.02.2024 01.11.2023
    27.12.2023
    03.01.2024
    • Tobias Heineken
    • Florian Mayer
    • Julian Brandner
    • Prof. Dr. Michael Philippsen
    11302.02.133

    Grundlagen des Übersetzerbaus

    Titel Grundlagen des Übersetzerbaus
    Kurztext inf2-ueb
    Turnus des Angebots nur im Wintersemester
    Semesterwochenstunden 2

    Voraussetzung zur Teilnahme an der Modulprüfung ist die erfolgreiche Bearbeitung der Übungsaufgaben.

    *Motivation:*

    Auf den ersten Blick erscheint es wenig sinnvoll, sich mit Übersetzerbau zu beschäftigen. Andere Themen scheinen wesentlich näher an der direkten Anwendbarkeit in der industriellen Praxis. Der erste Blick täuscht:
    - Übersetzer gehören wohl zu den am gründlichsten studierten mittelgroßen sequentiellen Software-Systemen. Man kann viel aus den Erfahrungen lernen, die im Laufe der Jahre gesammelt wurden.
    - In den Übungen, die die Vorlesung begleiten, werden Sie selbst einen (kleinen) Übersetzer entwickeln.
    - Für viele Teilnehmer wird dieses Projekt das erste größere Software-Projekt sein. Viele der Algorithmen aus dem Grundstudium werden angewendet.
    - Bei jedem von Ihnen verwendeten Übersetzer gehen Sie in der Regel davon aus, dass richtiger Coder erzeugt wird. In der Vorlesung erfahren Sie, wie das geforderte hohe Maß an Korrektheit und Zuverlässigkeit erreicht wird.
    - Sie erlangen ein Verständnis für Konzepte von Programmiersprachen und verstehen, welcher Maschinen-Code aus Sprachkonstrukten gemacht wird. Mit diesem Wissen im Hinterkopf verbessern Sie Ihre Fähigkeit, gute und effiziente Programme zu schreiben.
    - Übersetzer werden nicht nur für Programmiersprachen benötigt. Spezielle Übersetzer braucht man in vielen Bereichen des täglichen Informatik-Lebens z.B. zur Textformatierung, für Programmtransformationen, für aspektorientiertes Programmieren, für die Verarbeitung von XML, ...
    - Es gehört zu einer Ingenieur-Ausbildung, in der Lage zu sein, diejenigen Werkzeuge selbst zu fertigen, die man verwendet. Für Informatiker gehört daher ein Verständnis vom Innenleben eines Übersetzers zum Rüstzeug.

    .

    *Fokus der Lehrveranstaltung:*

    Es werden Konzepte und Techniken der Übersetzerkonstruktion aus Sicht
    eines Übersetzerbauers und entlang der wesentlichen Arbeitsschritte
    eines Übersetzers (Frontend; Mittelschicht; Backend)
    vorgestellt. Übungen und Praxisaufgaben ergänzen die Vorlesung. Hier
    entwickeln die Studierenden auf der Basis eines vorgegebenen
    Programmrahmens einen eigenen Übersetzer für die Programmiersprache
    e2, die speziell für den Übersetzerbau-Vorlesungszyklus entworfen
    wurde.

    *Behandelte Themenfelder:*

    - Prinzipien der Übersetzung imperativer Programmiersprachen
    - Struktur eines Übersetzers
    - Symbolentschlüssler (Scanner) und Zerteiler (Parser)
    - Abstrakter Syntaxbaum (AST)
    - Besuchermuster
    - AST-Transformationen, Entzuckerung
    - Symboltabellen und Sichtbarkeitsbereiche
    - Semantische Analyse: Namensanalyse, Typprüfung
    - Übersetzung von arithmetischen Ausdrücken und Kontrollflusskonstrukten in registerbasierte oder stapelbasierte Zwischensprachen
    - Übersetzung von Methoden und Methodenaufrufen; Methodenschachteln
    - Übersetzung objektorientierter Sprachen mit Einfachvererbung, Schnittstellen und Mehrfachvererbung
    - Methodenauswahl in Java (überladene und überschriebene Methoden)
    - Code-Generierung nach Sethi-Ullmann, Graham-Glanville, per Baumtransformation sowie mit Hilfe dynamischer Programmierung
    - Registerallokation mit lokalen Techniken und mit Graphfärbung
    - Instruktionsanordnung mit "list scheduling"
    - Debugger

    .

    *Themen der Vorlesungseinheiten:*

    1. Einführung (Überblick, modulare Struktur von Übersetzern, Frontend,
    Mittelschicht, Backend), Bootstrapping)

    2. Symbolentschlüssler (Lexer) und Zerteiler (Parser), (Token,
    Literale, Symboltabelle, Grammatikklassen (LK(k), LL(k), ...),
    konkreter Syntaxbaum, Shift-Reduce-Parser)

    3. AST und semantische Analyse (abstrakter Syntaxbaum, Besuchermuster,
    Double Dispatch, Sichtbarkeitsbereiche, Definitionstabelle)

    4. Typkonsistenz (Typsicherheit, Typsystem, Typüberprüfung,
    Typberechnung, Typkonvertierung, attributierte Grammatiken)

    5. AST-Transformationen (Transformationsschablonen für Ausdrücke,
    Transformation innerer und generischer Klassen)

    6. Transformation in Zwischensprache (registerbasiert versus
    stapelbasiert, Übersetzung von arithmetischen Ausdrücken, Zuweisungen,
    mehrdimensionalen Feldern, struct-Datentypen und
    Kontrollflussstrukturen (einschließlich Kurzschlussauswertung))

    7. Methodenschachteln und Kellerrahmen (relative Adressen, call by
    value/reference/name, geschachtelte Funktionen, Funktionszeiger,
    Stack- und Framepointer, Funktionsaufruf, Prolog, Epilog)

    8. Objektorientierte Sprachen I: Einfachvererbung (Symbol- und
    Typanalyse, Methodenauswahl mit Überschreiben und Überladen, virtuelle
    Methodenaufrufe, Klassendeskriptoren, dynamische Typprüfung und
    -wandlung)

    9. Objektorientierte Sprachen II: Schnittstellen und Mehrfachvererbung
    (Interface v-Tables, dynamische Typprüfung und -wandlung mit
    Interfaces, Interfaces mit Default-Implementierung, Diamantenproblem)

    10. Einfache Code-Erzeugung (Code-Selektion nach Sethi-Ullman,
    Register-Allokation, Instruktionsreihenfolge, optimale Code-Erzeugung
    für Ausdrucksbäume)

    11. Fortgeschrittene Code-Erzeugung (Baumtransformation,
    Graham-Glanville, dynamisches Programmieren)

    12. Registerallokation (Leistungsabschätzung, Lebendigkeitsintervalle,
    Kollisions- und Interferenzgraph, Spilling, Färbungsheuristiken,
    Aufteilung von Lebendigkeitsintervallen, 2nd Chance Bin Packing,
    Registerverschmelzung)

    13. Parallelismus auf Instruktionsebene, Instruktionsreihenfolge,
    Debugger (Konflikte im Instruktionsfließband, List Scheduling,
    Delay-Slots, Sprungzielvorhersage, ptrace, Unterbrechungs- und
    Beobachtungspunkte, DWARF)

    *Meilensteine der Übungsbetriebs:*

    Im Rahmen der Übungen (separater UnivIS-Eintrag) werden die in der
    Vorlesung vorgestellten Konzepte und Techniken zur Implementierung
    eines Übersetzers in die Praxis umgesetzt. Ziel der Übungen ist es,
    bis zum Ende des Semesters einen funktionsfähigen Übersetzer für die
    Beispiel-Programmiersprache e2 zu implementieren. Ein Rahmenprogramm
    ist gegeben, das in fünf Meilensteinen um selbstentwickelte
    Schlüsselkomponenten zu erweitern ist.

    Folgende Meilensteine sind zu erreichen:

    Meilenstein 1: Grammatik, AST-Konstruktion: Antlr-Produktionen,
    AST-Besucherschnittschelle, generischer AST-Besucher für return und
    Schleifen, AST-Besucher zur Visualisierung.

    Meilenstein 2: Symbolanalyse, Symboltabelle, Standardfunktionen,
    AST-Besucher für die Symbolanalyse.

    Meilenstein 3: Konstantenfaltung per AST-Transformation, Typanalyse
    mit bottom-up AST-Besuch, der implizite Typwandlungen bei Bedarf
    ergänzt.

    Meilenstein 4: AST-Besucher zur Erzeugung der
    Zwischensprachrepräsentation, Übersetzung von arithmetischen
    Ausdrücken, return, Zuweisungen, logischen Ausdrücken, Bedingungen und
    Schleifen.

    Meilenstein 5.0: Speicherzuteilung: Festlegung und Umsetzung der ABI
    Aufrufkonvention, Zuweisung von Speicheradressen zu Variablen;
    Kellerrahmenallokation; caller-save und callee-save Register.

    Meilenstein 5.1: Code-Erzeugung: Implementierung der e2
    Standardbibliothek; IR-Besucher zur Erzeugung von Assembly-Code.

    Für die Meilensteine 1-3 soll der Übersetzer sowohl Integer- als auch
    Gleitkomma-Arithmetik unterstützen. Für die nachfolgenden Meilensteine
    reicht Integer-Arithmetik.

    Die Materialien zur Lehrveranstaltung werden über StudOn bereitgestellt: https://www.studon.fau.de/crs4533479.html

    1. Parallelgruppe

    Zeitpunkt Startdatum - Enddatum Ausfalltermin Durchführende/-r Bemerkung Raum
    wöchentlich Do, 08:15 - 09:45 19.10.2023 - 08.02.2024 28.12.2023
    04.01.2024
    • Prof. Dr. Michael Philippsen
    11301.00.005

    Übungen zu Ausgewählte Kapitel aus dem Übersetzerbau

    Titel Übungen zu Ausgewählte Kapitel aus dem Übersetzerbau
    Kurztext inf2-ueb3-ex
    Turnus des Angebots nur im Wintersemester
    Semesterwochenstunden 2

    Blockveranstaltung n.V. nach der Vorlesungszeit.

    Die Übungen zu Übersetzerbau 3 stellen eine Ergänzung zur
    Vorlesung dar. In der Vorlesung wird unter anderem die
    Architektur und Funktionsweise einer virtuellen Maschine
    beleuchtet. In den Übungen soll dies praktisch umgesetzt werden.
    Hierzu sollen die Studenten in einer Blockveranstaltung eine
    kleine virtuelle Maschine selbst implementieren. Den Anfang
    bildet das Einlesen des Byte-Codes und am Ende soll ein
    funktionsfähiger optimierender Just-in-Time-Übersetzer entstehen.

    Die Materialien zur Lehrveranstaltung werden über StudOn bereitgestellt: https://www.studon.fau.de/crs4533480.html

    1. Parallelgruppe

    Zeitpunkt Startdatum - Enddatum Ausfalltermin Durchführende/-r Bemerkung Raum
    Blockveranstaltung Mo, 09:00 - 18:00 04.03.2024 - 08.03.2024
    • Tobias Heineken
    • Julian Brandner
    • Florian Mayer
    11302.02.135

    Übungen zu Grundlagen des Übersetzerbaus

    Titel Übungen zu Grundlagen des Übersetzerbaus
    Kurztext inf2-ueb-ex
    Turnus des Angebots nur im Wintersemester
    Semesterwochenstunden 2

    Im Rahmen der Übungen werden die in der Vorlesung vorgestellten Konzepte und Techniken zur Implementierung eines Übersetzers in die Praxis umgesetzt. Ziel der Übungen ist es, bis zum Ende des Semesters einen funktionsfähigen Übersetzer für die Beispiel-Programmiersprache e2 zu implementieren.

    Die hierfür nötigen zusätzlichen Kenntnisse (z.B. Grundlagen des Assemblers für x86-64) werden in den Tafelübungen vermittelt.

    Die im Laufe des Semesters zu erreichenden Meilensteine sind im UnivIS-Eintrag der Vorlesung aufgelistet.

    Die Materialien zur Lehrveranstaltung werden über StudOn bereitgestellt: https://www.studon.fau.de/crs4533479.html

    1. Parallelgruppe

    Zeitpunkt Startdatum - Enddatum Ausfalltermin Durchführende/-r Bemerkung Raum
    wöchentlich Mo, 14:15 - 15:45 16.10.2023 - 05.02.2024 01.01.2024
    25.12.2023
    • Florian Mayer
    11302.02.133

    Im Rahmen der Übungen werden die in der Vorlesung vorgestellten Konzepte und Techniken zur Implementierung eines Übersetzers in die Praxis umgesetzt. Ziel der Übungen ist es, bis zum Ende des Semesters einen funktionsfähigen Übersetzer für die Beispiel-Programmiersprache e2 zu implementieren.

    Die hierfür nötigen zusätzlichen Kenntnisse (z.B. Grundlagen des Assemblers für x86-64) werden in den Tafelübungen vermittelt.

    Die im Laufe des Semesters zu erreichenden Meilensteine sind im UnivIS-Eintrag der Vorlesung aufgelistet.

    Die Materialien zur Lehrveranstaltung werden über StudOn bereitgestellt: https://www.studon.fau.de/crs4533479.html

    2. Parallelgruppe

    Zeitpunkt Startdatum - Enddatum Ausfalltermin Durchführende/-r Bemerkung Raum
    wöchentlich Fr, 08:15 - 09:45 20.10.2023 - 09.02.2024 29.12.2023
    05.01.2024
    • Sascha Hofmann
    11302.02.133

    Im Rahmen der Übungen werden die in der Vorlesung vorgestellten Konzepte und Techniken zur Implementierung eines Übersetzers in die Praxis umgesetzt. Ziel der Übungen ist es, bis zum Ende des Semesters einen funktionsfähigen Übersetzer für die Beispiel-Programmiersprache e2 zu implementieren.

    Die hierfür nötigen zusätzlichen Kenntnisse (z.B. Grundlagen des Assemblers für x86-64) werden in den Tafelübungen vermittelt.

    Die im Laufe des Semesters zu erreichenden Meilensteine sind im UnivIS-Eintrag der Vorlesung aufgelistet.

    Die Materialien zur Lehrveranstaltung werden über StudOn bereitgestellt: https://www.studon.fau.de/crs4533479.html

    3. Parallelgruppe

    Zeitpunkt Startdatum - Enddatum Ausfalltermin Durchführende/-r Bemerkung Raum
    wöchentlich Fr, 10:15 - 11:45 20.10.2023 - 09.02.2024 29.12.2023
    05.01.2024
    • Tobias Heineken
    11302.02.133

    Publikationen

    2023

    2022

    2019

    Betreute Examensarbeiten

    Alphabetisch sortiert im UnivIS