2019

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: Ivan Rubinskii
Betreuer*in: Tajas Ruschke
Zeitraum: 03.12.2018 - 03.05.2019

Am Fachgebiet Rechnersysteme wird momentan an einer CGRA-Architektur geforscht, die zur Beschleunigung des Programmablaufs verwendet werden soll.

Damit ein Programmteil auf das CGRA abgebildet werden kann, muss ein Scheduler die Problemgraphen auf die Zielhardware abbilden. Dabei müssen verschiedene Abhängigkeiten berücksichtigt werden, um den korrekten Programmablauf zu gewährleisten. Eine besondere Herausforderung besteht in der Berücksichtigung der Datenlokalität und der Verbindungseinschränkungen. Wenn keine direkte Verbindung zwischen Quelle und Senke eines Datums besteht, ist eine Weiterleitung nötig. Dabei muss auch beachtet werden, dass eine Ressource bereits mit einer anderen Operation beschäftigt sein kann und deshalb ein vermeintlich längerer Pfad dennoch schneller zum Ziel führt.

Ziel dieser Arbeit ist das Design und die Implementierung eines Routingverfahrens, das einen geeigneten Pfad für die Weiterleitung der Werte produziert.

Student*in: Yannik Böttcher
Betreuer*in: Alexander Schwarz
Zeitraum: 29.10.2018 - 29.03.2019

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, einen speziell auf das AMIDAR-Konzept zugeschnittenen Instruktionssatz zu entwickeln, der einige Gedanken von Datenflussarchitekturen aufgreift. Für diesen Instruktionssatz wurde bereits ein Simulator implementiert, der jedoch nur einen Thread ausführen kann.

In dieser Arbeit soll zunächst ein Mechanismus für Kontextwechsel entwickelt und in den Simulator integriert werden. Anschließend ist ein Simulationsmodell für einen Thread Scheduler zu entwerfen. Hierfür kann sich am Verhalten der bereits existierenden Hardware-Implementierung orientiert werden. Abschließend soll die Funktionalität mit einem einfachen Programm, das mehrere Threads nutzt, getestet werden.

Student*in: Philipp Müller
Betreuer*in: Alexander Schwarz
Zeitraum: 23.07.2018 - 14.02.2019

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. Zudem werden bisher Tags für die Zuordnung der Daten zu den Operationen der Funktionseinheiten benutzt. Über diese Zuordnung erfolgt die Synchronisation zwischen den Funktionseinheiten.

Zurzeit wird die Idee verfolgt, einen speziell auf das AMIDAR-Konzept zugeschnittenen Instruktionssatz zu entwickeln, der einige Gedanken von Datenflussarchitekturen aufgreift. Ein neuer Instruktionssatz eröffnet die Möglichkeit, andere Mechanismen zu verwenden, um die Daten den Operationen der Funktionseinheiten zuzuordnen. Hierzu gibt es bereits zwei Ideen.

In dieser Arbeit soll die Anwendbarkeit der Mechanismen untersucht werden. Hierzu sollen aus Java-Methoden generierte Graphen hinsichtlich bestimmter Muster analysiert werden, die eine solche Synchronisation überhaupt nötig machen. Darüber hinaus sollen offene Fragen zu den Mechanismen durch weitergehende Analyse der Graphen geklärt werden.

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: Uzay Yavuz
Betreuer*in: Ramon Wirsch
Zeitraum: 31.10.2018 - 27.02.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.

Die Firmware / Daten der Prozessoren liegen meist in BlockRAMs des FPGAs. Da es sich bei BlockRAMs nur um kleine Speicherblöcke mit festen Größen handelt, müssen diese kombiniert und die Daten aufgeteilt werden, um ausreichende Mengen an Speicher zu erhalten. Momentan werden nur 2 im voraus festgelegte Varianten zur Aufteilung der Daten unterstützt.

Eine geschicktere Aufteilung der Daten könnte insbesondere bei hohem Speicherbedarf die möglichen Taktfrequenzen und damit die Geschwindigkeit des Prozessors steigern.

Weiterhin kann das am Fachgebiet entwickelte grafische Konfigurationstool angepasst werden, um die Optimierung der Aufteilung zu automatisieren oder den Benutzer auf mögliche bessere Alternativen hinzuweisen.

Student*in: Katja Münch
Betreuer*in: Tobias Schladt
Zeitraum: 29.07.2019 - 28.10.2019

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 Logiksynthese kommen dabei bisher vor allem Verfahren zum Einsatz, die nicht an die Rahmenbedingungen genetischer Schaltkreise angepasst sind. So ist die Bibliothek zur Verfügung stehender Logikgatter stark eingeschränkt und es kommt zu biochemischen Wechselwirkungen zwischen einzelnen Bausteinen. Ein Ansatz zur Lösung dieses Problems ist es, alle Implementierungen einer kombinatorischen Funktion aufzuzählen und die gefundenen Gatterschaltungen später zu bewerten.

Für die Erzeugung von Implementierungsvarianten wird aktuell ein boolesches Matching-Verfahren in Verbindung mit einer Bibliothek aus "Supergates" verwendet. Diese stellen (Teil-)Schaltungen dar, die aus Kombinationen der zur Verfügung stehenden primitiven Gatter generiert werden. Dabei verfügen die erzeugten Supergates nicht über internes Fanout, Logik wird also innerhalb eines Supergates nicht wiederverwendet. Das Ziel dieser Arbeit ist die Implementierung eines Verfahrens zur Optimierung der Supergate-Bibliothek, sodass Teile der Schaltungen wenn möglich wiederverwendet werden.

Master-Arbeiten

Student*in: Julian Käuser
Betreuer*in: Tajas Ruschke
Zeitraum: 02.05.2019 - 04.11.2019

Ziel der Arbeit ist der Entwurf und die Implementierung eines Schedulers für ein generisches, resourcenbasiertes CGRA-Modell. Dafür müssen die abzubildenden Operationen aus einem Kontroll- und Datenflussgraphen ausgelesen werden und unter Berücksichtigung der belegten Elemente korrekt auf das Modell abgebildet werden. Für die Teilaufgaben des Schedulers und der Kontextgenerierung sind sinnvolle Schnittstellen zu erstellen.

Student*in: Christoph Spang
Betreuer*in: Dennis Wolf
Zeitraum: 19.11.2018 - 18.05.2019

Ein Coarse Grained Reconfigurable Array (CGRA) ist ein Hardwarebeschleuniger, in dem einzelne Rechenzellen entsprechend eines im voraus definierten Operationsplans (Scheduling) Daten massiv parallel verarbeiten. Die individuelle Auslegung eines CGRAs (u.a. die Selektion der 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 nachweislich 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 Verfahren implementiert werden, das automatisch den längsten Pfad beliebiger CGRAs schätzt. Wird der längste Pfad richtig bestimmt, kann mit diesen Informationen die Genauigkeit bereits bestehender Schätzfunktionen des längsten Pfades verbessert werden.

Student*in: Aljoscha Mazur
Betreuer*in: Dennis Wolf
Zeitraum: 01.11.2018 - 31.05.2019

Ein Coarse Grained Reconfigurable Array (CGRA) ist ein Hardwarebeschleuniger, in dem einzelne Rechenzellen entsprechend eines im voraus definierten Operationsplans (Scheduling) Daten massiv parallel verarbeiten. Auf Hardwareebene ist für die Performance des CGRAs neben der strukturellen Auslegung der Rechenzellen, vor allem die genutzte Operatorbibliothek entscheidend. Diese ist das Herzstück zur Generierung der ALUs aller Rechenzellen in Verilog.

Der Generator sieht vor, dass jede Operation als eigenständiges Modul instantiiert wird. Dies hat Vorteile bei der Parallelisierung von Anwendungen, benötigt aber unverhältnismäßig viel Ressourcen. Operationen wie Addition und Subtraktion oder Division und Modulo können zusammengeführt werden und reduzieren folglich die benötigten Hardware-Ressourcen auf fast die Hälfte. Außerdem soll die Operation MAC implementiert werden.

Ziel dieser Arbeit ist Optimierung der Bibliothek durch das Zusammenführen von Operationen. Dabei gilt es, sinnvolle Zusammenführung zu finden, diese umzusetzen und in das Backend ein zu pflegen. Abschließend soll eine ausführliche Evaluation durchgeführt werden.

Student*in: Hendrik Schöffmann
Betreuer*in: Alexander Schwarz
Zeitraum: 03.09.2018 - 02.03.2019

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. Zu diesen Möglichkeiten zählt insbesondere das integrierte Coarse Grained Reconfigurable Array (CGRA) als automatisch genutzter Hardwarebeschleuniger. 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 (ISA), 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. Um das CGRA weiter nutzen zu können, ist daher eine Anpassung des Syntheseverfahrens an die neue ISA notwendig.

Im Rahmen dieser Arbeit soll ein Graphgenerator entwickelt werden, der als Eingabe Code der neuen ISA nutzt. Die erzeugten Graphen dienen als Eingabe für den vorhandenen CGRA Scheduler. Dadurch kann die Hardware-Synthese auch mit der neuen ISA genutzt werden.

Student*in: Adrian Weber
Betreuer*in: Alexander Schwarz
Zeitraum: 01.04.2019 - 30.09.2019

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 Code ausgehend von Java Class Files erzeugt. Dieser kann anschließend in einer Simulation ausgeführt werden.

Eine besondere Herausforderung bei der neuen ISA ist das Scheduling der Instruktionen, da die Reihenfolge der Instruktionen einigen Einschränkungen unterliegt, damit sie ausführbar ist. Hierbei gilt es unter anderem, Deadlocks zu beseitigen. Derzeit funktioniert der Scheduling-Algorithmus unter bestimmten Voraussetzungen gut. Bei komplexem Code und unter engen Einschränkungen liefert er jedoch schlechte Ergebnisse oder scheitert ganz. Daher soll im Rahmen dieser Arbeit ein verbesserter Algorithmus implementiert werden.

Student*in: Benedikt Heumüller
Betreuer*in: Johanna Rohde
Zeitraum: 16.01.2019 - 15.07.2019

Ein Forschungsprojekt am Fachgebiet Rechnersysteme der TU Darmstadt befasst sich mit der automatischen Erzeugung von Hardware-Beschleunigern. Dabei kann der Zugriff der Beschleuniger auf den Datenspeicher wahlweise direkt oder über ein Cachesystem erfolgen.

Der verfolgte Ansatz ist unabhängig vom Prozessor, an welchen die Beschleuniger als Peripheriekomponente angeschlossen werden. Gegenwärtig steht dafür der SpartanMC des gleichnamigen SoC-Kits und der MicroBlaze von Xilinx zur Verfügung.

Der MicroBlaze ist ein 32-Bit RISC Softcore Prozessor. Er bietet zahlreiche Konfigurationsmöglichkeiten wie z.B. die Anzahl der Pipelinestufen, zusätzliche arithmetische Einheiten und optionale Caches für Daten und Instruktionen.

Derzeit ist das Cachesystem der Beschleuniger nur unzureichend mit dem MicroBlaze kompatibel. Grund dafür ist, dass das Cachesystem über die AXI Coherence Extension (ACE) an den Kohärenzbus des MicroBlaze eigenen Cache angeschlossen ist. Dies hat jedoch den Nachteil, dass nicht alle Funktionen des Cachesystems unterstützt werden und es zu zusätzlichen Verzögerungen beim Lesen und Schreiben kommt.

Ziel dieser Arbeit ist es, die Performanz des vorhandenen Cachesystems zu optimieren und dieses als Datenspeicher an den Local Memory Bus (LMB) des MicroBlaze anzuschließen.

Projektseminare Master

Student*in: Felix Retsch
Betreuer*in: Alexander Schwarz
Zeitraum: 15.04.2019 - 16.08.2019

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 ein Code Converter, der NISA-Instruktionsfolgen aus Java Bytecode erzeugt, ein Assembler und ein Simulator für diese Instruktionen. Der Code wird dem Simulator dabei in Form von Java-Objekten übergeben. Eine binäre Codierung, die in Hardware ausführbar wäre, existiert bisher noch nicht.

Im Rahmen dieser Arbeit soll eine binäre Codierung für die NISA-Instruktionen entwickelt werden, die später zur Ausführung in Hardware fähig ist. Anschließend sollen Software-Komponenten entwickelt werden, die die existierende Repräsentation eines Programms in Form von Java-Objekten in eine binäre Datei exportieren und aus dieser wieder importieren können.

Student*in: Heiko Schüßler
Betreuer*in: Johanna Rohde
Zeitraum: 25.02.2019 - 15.07.2019

Das SpartanMC SoC Kit ist eine Toolchain zur Erzeugung von FPGA basierten Systemen. Zentraler Bestandteil ist ein Soft-core, der durch verschiedene Hardwarekomponenten erweitert und mit Hilfe der Toolchain programmiert werden kann. Ein Forschungsprojekt innerhalb des SpartanMC SoC Kit befasst sich mit der Entwicklung des PIRANHA GCC Plugins zur automatischen Erzeugung von Hardwarebeschleunigern. 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 als Hardwarebeschleuniger implementiert.

Spekulation bezeichnet ein Verfahren zur Reduzierung des Kontrollflusses. Dabei werden beide Blöcke einer if/else Verzweigung spekulativ ausgeführt und die relevanten Ergebnisse werden hinterher durch Mutliplexer ausgewählt. Dies erhöht sowohl die Anzahl der parallel ausführbaren Instruktionen als auch die Effizienz von weiteren Optimierungen wie Chaining oder Loop Pipelining.

Die derzeitige Implementierung kann dabei nur simplen Kontrollfluss auflösen. Komplexere Strukturen, die z.B. durch verkettete Bedingungen entstehen, werden nicht optimiert.

Aufgabe dieses Projektseminares ist es, eine Mehrwegespekulation zu implementieren und dadurch die Performance der generierten Hardwarebeschleuniger zu verbessern. Durch die Optimierung des Algorithmus soll es möglich sein, Fälle abzudecken, bei denen mehr als zwei Wege zwischen dem Ausgangs- und dem Mergeblock existieren.