Bachelor-Arbeiten
Student*in: Katharina Schultheis
Betreuer*in: Ramon Wirsch
Zeitraum: 04.11.2020 - 26.05.2021
Am Fachgebiet Rechnersysteme werden Hardwarebeschleuniger für eine Reihe von Architekturen entwickelt. Hierzu sollen reguläre Programme zur Laufzeit analysiert und partiell mit dem Hardwarebeschleuniger ausgeführt werden können, ohne dass sie vorher dafür angepasst werden müssen.
Eine erste Fassung dieses Verfahrens läuft bereits, bei der der Assembler-Code in einen Kontrollflussgraphen (CFG) eingelesen wird und mithilfe einer Sammlung von Optimierungspasses für den Hardwarebeschleuniger optimiert wird. Hierbei muss der Hardwarebeschleuniger allerdings immer wieder auf den Stack des Host-Systems zugreifen, da der ursprüngliche Compiler hier zum Beispiel Funktionsargumente übergibt, oder Variablen, die nicht mehr in Register gepasst haben platziert hat.
Diese Stackzugriffe stellen einen Flaschenhals dar und sollen in dieser Arbeit so weit wie möglich durch Register-Zugriffe erstetzt werden.
Hierzu sollen Stack-Zugriffe analysiert werden, um notwendigerweise indirekte Zugriffe, wie auf Arrays, die auf dem Stack liegen, von Zugriffen auf skalare Werte zu unterscheiden. Anschließend sollen mindestens die skalaren Stack-Zugriffe durch Register-Zugriffe ersetzt werden. Manche Array-Zugriffe könnten eventuell in Kombination mit Loop-Unrolling ebenfalls eliminiert werden.
Student*in: Ann-Kathrin Werner
Betreuer*in: Dennis Wolf
Zeitraum: 01.11.2019 - 29.06.2020
Ein Coarse Grained Reconfigurable Array (CGRA) ist ein Hardwarebeschleuniger, in dem einzelne Rechenzellen entsprechend eines im voraus definierten Operationsplans (Scheduling) Daten massiv parallel verarbeiten.
Eines unserer Forschungsthemen ist die Heterogenität von CGRAs. Um dies möglich zu machen, wurde ein Framework realisiert, mit dem beliebig heterogene und irreguläre CGRA modelliert werden können. Dieses Modell ist auch die Grundlage für das Scheduling und dient als Input um Verilog Code zu erzeugen. Da die jetzige Modellierung nicht flexibel genug ist und Änderungen an der Mikroarchitektur vorgenommen wurden, wird nun basierend auf der Erfahrung der letzten Jahre ein generisches, Ressourcen basiertes Modell umgesetzt. Der Kern des CGRAs und eine generische Schnittstelle wurden realisiert. Nun fehlen noch die Systemspezifischen Komponenten zur Integration des CGRAs in Amidar. Amidar ist ein am Lehrstuhl Rechnersystem entwickelter adaptiver Prozessor. Hierfür sollen Kommunikationsmodule automatisiert generiert werden, die die generischen Schnittstellen des CGRA Kerns bedient. Außerdem soll die Cache-Anbindung überarbeitet werden.
In dieser Arbeit soll die Systemintegration in Amidar durchgeführt werden und automatisierte Tests des CGRAs implementiert werden. Die Integration des alten CGRAs in Amidar kann hierfür als Vorlage genutzt werden. Zu Beginn soll manuell ein exemplarisches CGRA in Verilog umgesetzt und für eine simple Anwendung simuliert werden. Danach folgt die Integration in das Framework, so dass die Generierung der Kommunikationsschnittstellen für beliebige CGRAs automatisiert geschieht. Der Fokus der Arbeit soll abschließend ein Tool sein, das für gegebenen Java Applikationen, automatisierte Tests durchführt und die korrekte Funktionsweise des CGRAs inkl. der Kommunikationsschnittstellen prüft.
Student*in: Sebastian Kleemann
Betreuer*in: Alexander Schwarz
Zeitraum: 02.11.2020 - 01.04.2021
Derzeit wird am Fachgebiet Rechnersysteme an AMIDAR-Prozessoren geforscht, die aus mehreren unabhängigen Funktionseinheiten (FUs) aufgebaut sind und verschiedene Möglichkeiten der Rekonfiguration bereitstellen. Bisher lag der Fokus auf Ausführung von Java Bytecode, jedoch eignet sich das Grundprinzip für verschiedenste Instruktionssätze.
Nun wird die Idee verfolgt, eine speziell auf das AMIDAR-Konzept zugeschnittene Instruction Set Architecture (ISA) zu entwickeln, die einige Gedanken von Datenflussarchitekturen aufgreift. Für diesen Instruktionssatz wurde bereits ein funktionierender Prozessor auf einem FPGA implementiert.
Speziell für die FU, die den Java-Heap implementiert, bieten sich noch einige Verbesserungsmöglichkeiten, die im Rahmen dieser Arbeit umgesetzt werden sollen. Primär ist dies die Unterstützung echter Byte- und Short-Arrays, die derzeit noch durch Integer-Arrays realisiert sind.
Master-Arbeiten
Student*in: Felix Hübner
Betreuer*in: Ramon Wirsch
Zeitraum: 19.10.2020 - 19.04.2021
Am Fachgebiet Rechnersysteme werden Hardwarebeschleuniger für eine Reihe von Architekturen entwickelt, unter anderem für die RISC-V Architektur. Hierzu sollen reguläre Programme zur Laufzeit analysiert und partiell mit dem Hardwarebeschleuniger ausgeführt werden können, ohne dass sie hierzu vorher angepasst werden müssen.
Um diese Verfahren zu testen und zu demonstrieren, soll ein vollständiges, lauffähiges System bestehend aus einem RISC-V Prozessor und unserem CGRA-Hardwarebeschleuniger auf einem FPGA gebaut werden. Dafür soll eine für FPGAs geeignete existierende RISC-V Implementierung ausgewählt werden.
Für ein lauffähiges System muss insbesondere der Beschleuniger cache-kohärenten Speicherzugriff auf den RAM erhalten, sowie als Peripherie an den Prozessor angebunden werden. Dies umfasst auch die Auswahl geeigneter Methoden zu Anbindung, sowie das Schreiben von Treibern, die Hardware spezifische Eigenheiten möglichst abstrahieren.
Student*in: Johannes Klöhn
Betreuer*in: Ramon Wirsch
Zeitraum: 09.11.2020 - 17.05.2021
Am Fachgebiet Rechnersysteme werden Hardwarebeschleuniger für eine Reihe von Architekturen entwickelt. Hierzu sollen reguläre Programme zur Laufzeit analysiert und partiell mit dem Hardwarebeschleuniger ausgeführt werden können, ohne dass sie vorher dafür angepasst werden müssen.
Eine erste Fassung dieses Verfahrens läuft bereits. Assemblercode wird dabei zur Laufzeit in einen Kontrollflussgraphen (CFG) eingelesen und mithilfe einer Sammlung von Optimierungspasses für den Hardwarebeschleuniger optimiert. Zurzeit werden allerdings noch alle Schreibzugriffe auf den Speicher in der originalen Reihenfolge ausgeführt und limitieren somit die möglichen Optimierungen. Dies ist nötig, da eine andere Reihenfolge potentiell zu falschen Ergebnissen kommen kann, wenn manche Speicherzugriffe überlappen.
Als Teil dieser Arbeit soll eine Points-To Analyse entwickelt werden, die auf Basis der existierenden CFGs versucht Überlappungen in Speicherzugriffen zu identifizieren. Diese Analyse soll möglichst unabhängig vom zugrunde liegenden Assembler-Befehlssatz sein, so dass sie auf den verschiedenen unterstützten Architekturen funktioniert und auch in der Lage sein, ähnliche Informationen zu verwenden, wie sie normalerweise vom Compiler bereitgestellt werden.
Die gewonnenen Informationen sollen anschließend genutzt werden, um die Reihenfolge von Speicherzugriffen zu lockern. Weiterhin kann in Fällen in denen Aliasing nicht ausgeschlossen werden kann, Spekulative Ausführung angewendet werden. Hier wird erst während der Ausführung eines Codeabschnittes auf Überlappung getestet und dann nur die dazu passende Variante des Abschnittes ausgeführt.
Student*in: David Volz
Betreuer*in: Johanna Rohde
Zeitraum: 06.11.2020 - 05.05.2021
Ein Forschungsprojekt am Fachgebiet Rechnersysteme der TU Darmstadt befasst sich mit der automatischen Erzeugung von Hardware-Beschleunigern. Das entwickelte GCC-Plugin führt dazu eine statische Programmanalyse des Programmcodes durch und wählt eigenständig die Schleifen aus, die voraussichtlich die größte Ausführungszeit benötigen. Anschließend wird deren Funktionalität mit Hilfe einer High Level Synthese (HLS) als Hardwarebeschleuniger implementiert.
Den Flaschenhals stellen dabei die Speicherzugriffe dar. Über ein Cache-System können zwar mehrere Speicherzugriffe gleichzeitig ausgeführt werden, dennoch kommt es bei Cache-Misses und dem anschließenden Laden aus dem Hauptspeicher zu langen Wartezeiten.
Die Anzahl an Cache-Misses kann durch Prefetching reduziert werden. Dabei werden zukünftige Speicheradressen antizipiert und während des Leerlaufs des Caches spekulativ geladen. Der Erfolg von Prefetching hängt maßgeblich davon ab, wie genau Speicheradressen vorhergesagt werden können. Ein Vorteil des High Level Synthese Tools besteht darin, dass die Speicherzugriffe der Hardware Beschleuniger bereits zur Compilezeit ausführlich analysiert werden. Die dabei gewonnenen Informationen könnten zum Prefetching verwendet werden.
Ziel dieser Arbeit ist es, eine Prefetch Engine für den Level-2 Cache des vorhandenen Cache-Systems zu implementieren und zu integrieren. Des Weiteren, sollen die generierten Hardware Beschleuniger gezielt um Prefetch-Instruktionen erweitert werden, welche an die Prefetch Egnine übergeben werden.
Voraussetzung für diese Masterarbeit ist der Level-2 Cache. Dieser kann im Vorfeld als Projektseminars implementiert werden.
Student*in: Jonas Gehrunger
Betreuer*in: Johanna Rohde
Zeitraum: 09.11.2020 - 10.05.2021
Ein Forschungsprojekt am Fachgebiet Rechnersysteme der TU Darmstadt befasst sich mit der automatischen Erzeugung von Hardware-Beschleunigern. Das entwickelte GCC-Plugin führt dazu eine statische Programmanalyse des Programmcodes durch und wählt eigenständig die Schleifen aus, die voraussichtlich die größte Ausführungszeit benötigen. Anschließend wird deren Funktionalität mit Hilfe einer High Level Synthese (HLS) als Hardwarebeschleuniger implementiert.
Eine Herausforderung besteht darin, die Abhängigkeiten von Lese- und Schreibzugriffen auf den Speicher zu bestimmen. Um die Semantik des Programms nicht zu verändern, müssen diese im konservativsten Fall im Beschleuniger in der gleichen Reihenfolge ausgeführt werden, wie in der Software beschrieben. Dies limitiert jedoch die Anzahl an parallel ausführbaren Instruktionen und stellt einen Flaschenhals dar.
Der GCC ermöglicht es, Speicherzugriffe umfassend zu charakterisieren. Diese Informationen werden derzeit dazu verwendet, möglichst viele Speicherzugriffe zur Compilezeit voneinander zu entkoppeln. Dies ist jedoch häufig nicht möglich, da es durch das Pointer-Aliasing dazu kommen kann, dass man über verschiedene Pointer auf den gleichen Speicher zugreift. Deswegen soll die Compilezeit-Analyse um eine Laufzeitanalyse erweitert werden. Dabei wird zur Compilezeit ein Satz an Bedingungen formuliert, deren Evaluation zur Laufzeit bestimmt, ob zwei Speicherzugriffe immer unabhängig voneinander sind. Bei einem positiven Ergebnis, kann dann ein optimierter Beschleuniger ausgeführt werden.
Aufgabe der Masterarbeit ist es, das Plugin so zu erweitern, dass möglichst viele Speicherzugriffe zur Laufzeit entkoppelt werden können. Dabei sollen insbesondere die Informationen zu Zugriffsmuster, Anzahl der Schleifeniterationen und Arraygröße herangezogen werden.
Die genauen Hintergründe zur Compilezeit-Analyse werden in diesem Paper beschrieben
Projektseminare Bachelor
Student*in: Nora Simon
Betreuer*in: Ramon Wirsch
Zeitraum: 12.02.2021 - 01.06.2021
Am Fachgebiet Rechnersysteme werden Hardwarebeschleuniger für eine Reihe von Architekturen entwickelt, unter anderem für die RISC-V Architektur. Hierzu sollen reguläre Programme zur Laufzeit analysiert und partiell mit dem Hardwarebeschleuniger ausgeführt werden können, ohne dass sie vorher dafür angepasst werden müssen.
Um den Gewinn der Laufzeitbeschleunigung praktisch testen und zeigen zu können, wird aktuell ein auf FPGAs lauffähiges System samt Beschleuniger entwickelt. Mit Taiga wurde bereits ein spezifischer RISC-V Prozessor ausgewählt, der zum aktuellen Zeitpunkt allerdings noch nicht über Fließkomma-Recheneinheiten verfügt. Diese sollen zu einem späteren Zeitpunkt nachgerüstet werden.
Um die Beschleunigung mit unserer Technik untersuchen und nachweisen zu können, ist es notwendig die Performance und das Verhalten des Beschleunigers und des Prozessors abzugleichen. Beispielsweise bringt es für die Beschleunigung nichts, wenn eine Komponente Rechenoperationen beherrscht, die das Gegenstück aber nicht unterstützt. Die dazu verwendeten Hardwareressourcen könnten anderweitig besser angelegt werden.
Im Rahmen dieser Arbeit sollen deshalb die existierenden Fließkomma-Operatoren des Beschleunigers, sowie andere zur Verfügung stehende oder von konkurrierenden Prozessoren verwendete Implementierungen untersucht und evaluiert werden. Besonders interessant ist hier beispielsweise die Unterstützung von denormalisierten Zahlen und Rounding-Modes, Operations-Latenzen, mögliches Pipelining, der Ressourcenverbrauch und maximaler Takt.
Projektseminare Master
Student*in: Simon Vetter
Betreuer*in: Ramon Wirsch
Zeitraum: 04.12.2020 - 01.03.2021
Am Fachgebiet Rechnersysteme werden Hardwarebeschleuniger für eine Reihe von Architekturen entwickelt, unter anderem für RISC-V und IBM Z-Architekturen. Hierzu sollen reguläre Programme zur Laufzeit analysiert und partiell mit dem Hardwarebeschleuniger ausgeführt werden können, ohne dass sie vorher dafür angepasst werden müssen.
Für die partielle Optimierung und Ausführung auf dem Beschleuniger müssen Code-Abschnitte zu einer speziellen Kontrollflussgraphendarstellung konvertiert werden. Hierzu müssen die Binärdaten in effizient maschinell verarbeitbare Instruktionen übersetzt werden. Anschließend können diese Instruktionen in die vorgegebene Darstellung in Static-Single-Assignment Form konvertiert werden, die alle nötigen Informationen enthält, um diesen Code zu testen, zu optimieren und auf den Beschleuniger abzubilden.
Im Rahmen dieser Arbeit soll der bestehende Konverter um die Dissassemblierung von üblichen x86 Programmen nachgerüstet werden. Damit würden 2 der popärsten CISC Architekturen unterstützt werden. Weiterhin soll die Implementierung mit den beiden existierenden Versionen für RISC-V und Z abgeglichen werden, um eine möglichst universelle Vorlage zur Umsetzung weiterer Architekturen zu erhalten.
Student*in: Maximilian Heer
Betreuer*in: Alexander Schwarz
Zeitraum: 01.11.2020 - 30.04.2021
Derzeit wird am Fachgebiet Rechnersysteme ein Java-Prozessor auf Basis des AMIDAR-Modells implementiert, der aus mehreren unabhängigen Funktionseinheiten (FUs) besteht und verschiedene Möglichkeiten der dynamischen Anpassung an die Software bereitstellt. Der Prozessor führt bisher Java Bytecode in fast unveränderter Form in Hardware aus. Allerdings ist Java Bytecode nicht für die Ausführung in Hardware konzipiert, weshalb das Potenzial des AMIDAR-Modells damit nur schwer voll auszuschöpfen ist.
Ein vielversprechender Ansatz für eine neue Instruction Set Architecture, die speziell auf das AMIDAR-Konzept zugschnitten ist, greift Ideen von Datenflussmaschinen auf. Der Ansatz erlaubt es, Datenübertragungen zwischen Operationen direkt in den Instruktionen zu definieren. Es wurde bereits ein Prozessor mit dieser neuen ISA auf einem FPGA implementiert.
Durch Simulation wurde herausgefunden, dass es für die neue ISA von Vorteil wäre, wenn zwei Instruktionen pro Takt dekodiert werden könnten. In dieser Arbeit soll die Dekodierungspipeline des Prozessors um diese Fähigkeit erweitert werden.
Student*in: Erik Kubaczka
Betreuer*in: Tobias Schladt
Zeitraum: 01.12.2020 - 30.04.2021
Das Ziel der Synthetischen Biologie ist es, biochemische Systeme von Grund auf neu zu entwickeln. Dabei spielen neben biologischen und chemischen Verfahren Methoden aus den Ingenieurswissenschaften und der Informationstechnik eine entscheidende Rolle. So wird unter anderem daran geforscht, digitale Schaltungen auf Basis genetischer Mechanismen in biologischen Zellen zu implementieren.
Für die Synthese dieser genetischen Schaltkreise kommen bisher vor allem Verfahren zum Einsatz, die nicht an die Rahmenbedingungen der Synthetischen Biologie angepasst sind. So ist die Bibliothek zur Verfügung stehender Logikgatter stark eingeschränkt und es kommt zu komplexen biochemischen Wechselwirkungen zwischen einzelnen Bausteinen. Die Robustheit einzelner Schaltungsimplementierungen kann dabei durch Simulation ermittelt werden. Das Technology Mapping, also die Wahl von Bibliotheksgattern als Realisierungen für Gatter der Schaltung, stellt somit ein kombinatorisches Optimierungsproblem dar.
In dieser Arbeit soll ein Technology Mapping-Algorithmus für genetische Schaltkreise auf Basis des Branch-and-Bound-Ansatzes entwickelt werden. Dieser soll Teillösungen mit Hilfe eines optimistischen Schätzers bewerten und gegebenenfalls vom weiteren Suchprozess ausschließen.