2020

Bachelor-Arbeiten

Student*in: Pascal Rehfinger
Betreuer*in: Ramon Wirsch
Zeitraum: 05.09.2019 - 01.04.2020

Am Fachgebiet Rechnersysteme wird ein Hardwarebeschleuniger für IBM-Z Prozessoren entwickelt. Hierzu sollen reguläre Programme ohne jegliche Anpassungen an den Hardwarebeschleuniger zur Laufzeit analysiert und partiell mit dem Hardwarebeschleuniger ausgeführt werden können.

Um die Analyse und Synthese für den Beschleuniger zu evaluieren, soll im Rahmen dieser Arbeit ein Simulator geschaffen werden, der sowohl den Z-Befehlssatz als auch den Beschleuniger simulieren kann. Dieser Simulator soll als Plattform für die weitere Entwicklung dienen und muss somit für die Z-Architektur kompilierte Binärdateien laden können. Da der Simulator hauptsächlich rechenlastige Benchmarks ausführen können soll, mit denen die Hardwarebeschleunigung in anderen Arbeiten evaluiert werden kann, muss nur eine rudimentäre Schnittstelle zu einem Betriebsystem implementiert werden.

Es existiert bereits ein modulares, in Java/Kotlin implementiertes Framework, dass den Hardwarebeschleuniger und eine andere Prozessor-Architektur simulieren kann, welches als Grundlage verwendet werden kann.

Student*in: Leon Mayrhofer
Betreuer*in: Dennis Wolf
Zeitraum: 01.07.2019 - 31.07.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 wernde 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 das gesamte Framework umgebaut. Basierend auf der Erfahrung der letzten Jahre wurde beschlossen ein generisches Ressourcen basiertes Modell umzusetzen. Der Kern des CGRAs wurde bereits weitgehend realisiert. Nun fehlen noch die Systemspezifischen Komponenten zur Integration des CGRAs. Das Konzept sieht ein Interface mit generischen Schnittstellen vor, das für die Nutzung des CGRA in verschiedene Systeme den eigentlich Kern des CGRAs zunächst kapselt. Dadurch müssen nur noch Systemspezifische Kommunikationsmodule generiert werden, die die generischen Schnittstellen des Interfaces nutzen.

Ziel dieser Arbeit ist eben ein solches Interface und die nötigen Kommunikationsmodule zu realisieren. Dies betrifft sowohl die Modellierung in Software, als auch die Erzeugung der resultierenden Hardwarebeschreibung. Dabei sollen innerhalb des Wrappers Live-In und Live-Out Mechanismen zusammengefasst werden, die die Anforderungen aller Systeme bedient werden können. Es sollen für die beiden bestehenden Systeme die nötigen Kommunikationsschnittstellen modularisiert werden und an die Mechanismen des Interfaces angeschlossen werden. Der Verlauf der Arbeit folgt den typischen Schritten der Analyse, des Entwurfs, der Implementierung und abschließend dem Testen. Die Arbeit soll in Abstimmung mit mehreren Entwicklern des Systems laufen.

Student*in: Maximilian Heer
Betreuer*in: Alexander Schwarz
Zeitraum: 11.05.2020 - 10.10.2020

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. Dieser kann bisher allerdings nur den Hauptthread eines Java-Programms ausführen. Darüber hinaus existiert ein Simulator für die ISA, der Programme mit beliebig vielen Threads entsprechend der Java-Spezifikation ausführen kann.

In dieser Arbeit soll die Hardware-Implementierung des Prozessors um die Fähigkeit ergänzt werden, Programme mit mehreren Threads auszuführen. Diese Fähigkeit soll durch zwei Komponenten realisiert werden. Zum einen ist eine Erweiterung der Token Machine notwendig. Diese spezielle FU verteilt die Operationen und die Zielinformationen der Operationsergebnisse an alle anderen FUs. Zum anderen ist eine Thread-Scheduler-FU notwendig, die Synchronisationsmechanismen für Threads bereitstellt und entscheidet, wann welcher Thread auszuführen ist.

Student*in: Kacper Wiecek
Betreuer*in: Jakob Wenzel
Zeitraum: 15.10.2019 - 16.03.2020

Am Fachgebiet Rechnersysteme wird ein SoC-Kit rund um den SpartanMC Soft-Core entwickelt. Dieser ist ein speziell für die Verwendung in FPGAs entwickelter CPU-Core. Aufgrund dieser Zielplattform nutzt der SpartanMC eine Befehls- und Datenbreite von 18 Bit, welche die Strukturen aktueller FPGAs optimal ausnutzt.

Der Befehlssatz des SpartanMC-Prozessors wurde eigens dafür entwickelt, allerdings verfügt er über mehrere auf bestimmte Anwendungen spezialisierte Befehle und wurde auch maßgeblich für das manuelle Schreiben von Assembler-Code optimiert.

Da mittlerweile hauptsächlich ein moderner, optimierender Compiler (GCC) eingesetzt wird, sind einige Befehle redundant geworden, während manche der spezialisierteren Befehle ungenutzt bleiben.

In dieser Arbeit soll analysiert werden, welche Befehle aktuell vom GCC nicht verwendet werden. Wenn es mit vertretbarem Aufwand möglich ist, soll die Machine Description des Compilers so angepasst werden, dass er diese Befehle verwendet. Wenn nicht möglich, sollen sie aus dem Prozessor entfernt werden.

Im Anschluss soll auch die Kodierung der Befehle optimiert werden, sodass der Decoder kleiner wird.

Master-Arbeiten

Student*in: Daniel Trigo
Betreuer*in: Dennis Wolf
Zeitraum: 01.10.2019 - 31.03.2020

Ein Coarse Grained Reconfigurable Array (CGRAs) ist Schaltung, die als Hardwarebeschleuniger eingesetzt wird. Einzelne Rechenzellen verarbeiten entsprechend eines im voraus definierten Operationsplans (Scheduling) Daten massiv parallel. Die individuelle Komposition eines CGRAs (Selektion an Operationen der einzelnen Rechenzellen, deren Anzahl und Verbindung untereinander etc.) kann entsprechend mehrerer Beispielapplikationen für eine Anwendungsdomäne optimiert werden. Da die Erzeugung einer optimalen Komposition dabei aufgrund der Komplexität nicht mehr möglich ist, werden heuristische Optimierungsverfahren genutzt

Am Fachgebiet Rechnersysteme wird an solchen Optimierungsverfahren geforscht. Um die Herausforderungen der Optimierungen besser zu verstehen und optimierte CGRAs gegeneinander evaluieren zu können, müssen diese quantitativ verglichen werden. Im Rahmen dieser Arbeit soll ein Tool umgesetzt werden, das CGRAs (z.B. auf Graphenbasis) vergleichen kann. Dabei soll bei einem Vergleich der Fokus auf verschiedene Eigenschaften gelegt werden können (z.B. Parallelität oder Operationsverteilung).

Student*in: Mario Wetzel
Betreuer*in: Tajas Ruschke
Zeitraum: 04.11.2019 - 04.06.2020

Ziel der Arbeit ist die Analyse von C-Code für die anschließende Umwandlung in einen Graphen. Dabei sollen Pragmas gefunden werden und die Live-In und Live-Out Variablen, sowie Array-Zugriffe gefunden werden. Diese werden benötigt, um eine Ausführung auf dem CGRA vorzubereiten und zu starten. In einer anschließenden Masterarbeit kann die vollständige Graphgenerierung implementiert und getestet werden.

Student*in: Marcel Heinlein
Betreuer*in: Ramon Wirsch
Zeitraum: 31.10.2019 - 01.05.2020

Am Fachgebiet Rechnersysteme werden Hardwarebeschleuniger für eine Reihe von Architekturen entwickelt, unter anderem für RISC-V, IBM Z und auf Java-Bytecode-basierende Architekturen. Hierzu sollen reguläre Programme ohne jegliche Anpassungen an den Hardwarebeschleuniger zur Laufzeit analysiert und partiell mit dem Hardwarebeschleuniger ausgeführt werden können.

Die Synthesetools des Hardwarebeschleunigers benötigen zur Zeit Kontroll- und Datenflussgraphen (CDFGs) als Eingabedaten. Diese wurden bisher für jede Prozessorarchitektur speziell erstellt und bedeuten einen hohen Portierungsaufwand zum Unterstützen neuer Architekturen.

Um einfacher andere Architekturen zu unterstützen, sollen in Zukunft Quell-Architektur-unabhängige Kontrollflussgraphen (CFGs) als Eingabedaten verwendet werden. Diese Graphen können dann, unabhängig von der ursprünglichen Prozessorarchitektur großteilig mit üblichen Compiler-Methoden optimiert werden und anschließend zu CDFGs für den Hardwarebeschleuniger transformiert werden.

Ziel dieser Arbeit ist es eine Vorgehensweise für diese Optimierungen und Konvertierungen zu entwickeln und zu implementieren die insbesondere mit den 3 vorhandenen Quell-Architekturen umgehen kann und möglichst optimale Ergebnisse liefert.

Student*in: Lars Stein
Betreuer*in: Dennis Wolf
Zeitraum: 02.03.2020 - 30.08.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 das gesamte Framework neu implementiert. Basierend auf der Erfahrung der letzten Jahre wurde beschlossen ein generisches Ressourcen basiertes Modell umzusetzen. Dabei soll auch untersucht werden, wie sich verschiedene Datenpfadbreiten auf die Performance des CGRA auswirken.

Die Arbeit besteht aus zwei Teilen. Zum einen soll das Framework angepasst werden, so dass Datenpfadbreite parametrisierbar ist. Somit müssen Funktionen des Ressourcen Models angepasst werden und die automatisierte Generierung von Verilog vervollständigt werden. Zum anderen soll neben funktionalen Tests vor allem eine detaillierte Evaluation durchgeführt werden.

Student*in: Felix Retsch
Betreuer*in: Alexander Schwarz
Zeitraum: 02.09.2019 - 01.03.2020

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 (NISA), 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. Bereits entwickelt wurde eine Toolchain, die es erlaubt, Binärcode für diese ISA ausgehend von Java Bytecode zu erzeugen und anschließend zu simulieren.

Im Rahmen dieser Arbeit soll nun ein Token Generator in (System)Verilog implementiert werden, der binär codierte NISA-Instruktionen decodiert und entsprechende Tokens an die FUs schickt. Dies ist der erste Baustein einer Hardware Implementierung für die neu entwickelte ISA.

Student*in: André Miebes
Betreuer*in: Johanna Rohde
Zeitraum: 04.09.2019 - 03.03.2020

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.

Die Performanz der Beschleuniger wird maßgeblich durch die Speicherzugriffe limitiert. Um diese zu beschleunigen, wurde ein Multicachesystem entwickelt, welches den Beschleunigern mehrere parallele Speicherports zur Verfügung stellt.

Derzeit werden die Speicherzugriffe erst zeitlich gescheduled und anschließend auf die Speicherports gemapped. Dabei entsteht eine erhöhte Anzahl geteilter Cache-Lines, welche die Ausführung verzögern. Wie in diesem Paper gezeigt wurde, ist es deswegen sinnvoll, die Speicherzugriffe zu Beginn zu klassifizieren und gegebenenfalls noch vor dem Schedulen auf die Ports zu verteilen. Diese Technik wird Access Classification and Distribution (ACD) genannt.

Aufgabe dieser Masterarbeit ist es, ACD in das PIRANHA Plugin zu integrieren und dadurch die Anzahl der Leertakte, die durch geteilten Cache-Lines entstehen, zu verringern. Anschließend ist der ACD Algorithmus selbst zu optimieren, indem untersucht wird, welche Kriterien für die Klassifizierung verwendet werden sollen und wie das Verhältnis von exklusiven Cache-Lines zu parallel ausführbaren Instruktionen verbessert werden kann.

Projektseminare Bachelor

Student*in: Maximilian Heer
Betreuer*in: Alexander Schwarz
Zeitraum: 04.11.2019 - 31.03.2020

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. Im Unterschied zu Java Bytecode ist hier kein Operand Stack erforderlich. Stattdessen wird zur kurzzeitigen Speicherung ein Scratch Pad Memory verwendet. Daher müssen FUs implementiert werden, die an diese Speicherverwaltung angepasst sind.

Im Rahmen dieser Arbeit sollen zwei FUs entwickelt werden. Zum einen ist dies der Frame Stack. Er übernimmt die Speicherung der aufgerufenen Methoden und deren lokale Variablen. Zum anderen ist dies das Scratch Pad Memory. Es dient der kurzzeitigen Speicherung von Werten innerhalb einer Methode.

Projektseminare Master

Student*in: Kai Meinhard
Betreuer*in: Ramon Wirsch
Zeitraum: 24.10.2019 - 01.03.2020

Am Fachgebiet Rechnersysteme wird ein Hardwarebeschleuniger für RISC-V Prozessoren entwickelt. Hierzu sollen reguläre Programme ohne jegliche Anpassungen an den Hardwarebeschleuniger zur Laufzeit analysiert und partiell mit dem Hardwarebeschleuniger ausgeführt werden können.

Um die Analyse und Synthese für den Beschleuniger zu evaluieren, soll im Rahmen dieser Arbeit ein Simulator geschaffen werden, der sowohl den RISC-V Befehlssatz als auch den Beschleuniger simulieren kann. Dieser Simulator soll als Platform für die weitere Entwicklung dienen und muss daher für RISC-V kompilierte Binärdateien laden können. Da der Simulator hauptsächlich rechenlastige Benchmarks ausführen können soll, mit denen die Hardwarebeschleunigung in anderen Arbeiten evaluiert werden kann, muss nur eine rudimentäre Schnittstelle zu einem Betriebsystem implementiert werden.

Es existiert bereits ein modulares, in Java/Kotlin implementiertes Framework, dass den Hardwarebeschleuniger und eine andere Prozessor-Architektur simulieren kann, welches als Grundlage verwendet werden kann.

Student*in: David Volz
Betreuer*in: Johanna Rohde
Zeitraum: 23.04.2020 - 01.11.2020

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.

Ziel dieser Arbeit ist es, einen Level-2 Cache zu entwickeln und in das Cache-System zu integrieren. Dabei ist zu beachten, dass das Cache-System in seiner Modularität nicht eingeschränkt wird. Derzeit kann neben der Wortbreite und der Anzahl an Level-1 Caches z.B. auch das Kohärenzprotokoll vom Nutzer ausgewählt werden. So soll in Zukunft die Verwendung des Level-2 Caches als zusätzliche Option möglich sein.

Dieses Projektseminar ist so konzipiert, dass es idealerweise die Voraussetzung für die Masterarbeit "Implementierung einer Prefetch Engine für HLS" realisiert.

Student*in: Daniel Ortiz
Betreuer*in: Johanna Rohde
Zeitraum: 07.05.2020 - 07.11.2020

Ein Forschungsprojekt am Fachgebiet Rechnersysteme der TU Darmstadt befasst sich mit der automatischen Erzeugung von Hardware-Beschleunigern. Das entwickelte GCC-Plugin (PIRANHA) 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.

Um die Menge an Instruktionen, die parallel ausgeführt werden können, zu erhöhen, kann es sinnvoll sein die innersten Schleifen abzurollen. Dafür stellt der GCC eine Optimierung bereit. Dieser geht jedoch eine Analyse voraus, die bestimmen soll, ob eine solche Transformation im Hinblick auf Geschwindigkeit und Größe des Programmcodes sinnvoll ist. Für die High-Level-Synthese gelten jedoch andere Rahmenbedingungen, so dass die Analyse zu einem für diesen Zweck ungeeignetem Ergebnis kommt. In der Vergangenheit wurde deswegen eine eigene Optimierung implementiert, welche sowohl das komplette Abrollen als auch das partielle Abrollen von Schleifen ermöglicht.

Dennoch bleibt ungelöst, wann und in welchem Umfang das Abrollen einer Schleife für die High Level Synthese die beste Performance liefert. Ziel dieses Projektseminares ist es deswegen, mit Hilfe von Machine Learning einen Entscheider zu entwickeln.