Laufende Arbeiten

Bachelor-Arbeiten

Student*in: Daniel Diener
Betreuer*in: Dennis Wolf
Zeitraum: 18.10.2018 - 30.09.2019

Ein Coarse Grained Reconfigurable Array (CGRAs) ist eine Rechnenarchitektur, die Hardwarebeschleuniger eingesetzt wird. Einzelne Rechenzellen verarbeiten entsprechend eines im voraus definierten Operationsplans (Scheduling) Daten massiv parallel. Die individuelle Auslegung eines CGRAs (u.a. der Selektion an Operationen der einzelnen Rechenzellen, deren Anzahl und Verbindung untereinander) ist generisch und im Einzelfall entscheidend für die Laufzeit einzelner Applikationen.

Entsprechend mehrerer Beispielapplikationen kann die Komposition eines CGRAs für eine Anwendungsdomäne optimiert werden. Die Erzeugung einer optimalen Komposition ist dabei aufgrund der Komplexität nicht mehr möglich. In solchen Fällen werden heuristische Optimierungsverfahren genutzt. Für diese Verfahren, liegen zwei der drei relevanten Qualitätsmaße in der möglichen Taktfrequenz und den benötigten Ressourcen einer CGRA Instanz. Da ein Syntheselauf zu deren Bestimmung im Stundenbereich liegen kann, muss eine Schätzung genutzt werden.

Im Rahmen dieser Arbeit soll ein (in Java) geschriebenes Framework zu einem neuronalen Netzwerk entstehen. Das Netz soll genutzt werden, um die maximale Taktfrequenz und den Ressourcenverbrauch einer Komposition auf einem FPGA zu schätzen. Es gilt ein generisches Netzwerk zu implementieren und ein geeignetes Rahmenwerk zur automatisierten Erstellung und Nutzung eines Netzes zu entwerfen. Dabei können bestehende Methoden und Klassen des jetzigen Frameworks wiederverwendet werden. Fokus im Bereich der Forschung liegt in der Repräsentation der CGRAs an dem Eingang des Netztes.

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: 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: 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: Jonathan Strobl
Betreuer*in: Jakob Wenzel
Zeitraum: 30.04.2019 - 28.10.2019

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 SpartanMC-Prozessor verfügt über 3 Pipelinestufen und einen entprechend simplen RISC-Befehlssatz. Diverse Bypasses der Pipelinestufen liegen auf dem kritischen Pfad und limitieren somit die maximal mögliche Taktgeschwindigkeit des Prozessors.

Ziel dieser Arbeit ist die Entfernung bzw. Beschleunigung dieses Pfades. In Folge dessen wird es dazu kommen, dass bei bestimmten Instruktionssequenzen Wartetakte eingefügt werden müssen. Die bestehende Hazard Detection Unit des Prozessors ist dahingehend zu erweitern, dass sie die nicht mehr möglichen Fälle erkennt und Stalls einfügt.

Außerdem soll der Compiler angepasst werden, sodass er von der neu eingefügten Limitation des Prozessors weiß. Durch die dann bessere Instruktionsreihenfolge sollte sich die Anzahl der Straftakte reduzieren.

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: 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.

Projektseminare Bachelor

Student*in: Leonard Anderweit
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 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 Code Converter entwickelt, der ausgehend von Java Class Files Code erzeugt. Dieser kann anschließend in einer Simulation ausgeführt werden.

Zur kurzzeitigen Zwischenspeicherung steht im Prozessor ein Scratch Pad Memory zur Verfügung. Dessen Speicherplätze müssen vom Code Converter verwaltet werden. Hierzu wurde bereits eine einfache Registerallokation implementiert. Diese ist jedoch nicht in der Lage, Lebenszeiten von Werten aufzutrennen oder zusammenzulegen. Diese Fähigkeit soll im Rahmen der Arbeit ergänzt werden. Es kann sich hierbei an den Algorithmen anderer Compiler orientiert werden.

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 - 23.10.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.