Fertige Bachelorarbeiten und Praktika bei Anton Ertl

Das sind einige der Bachelorarbeiten und Praktika, die bei mir gemacht wurden.

KENDALL - A BURS Code Generator Generator for Stack Caching Stack-Based VMs

von Jakob Sievers, Bachelor's Thesis, Source Code

Abstract: Kendall is a code generator generator for stack-based stack caching VMs. Given a description of the target interpreter, it generates BURS tables suitable for controlling table-driven BURS pattern matchers which may be used to select a locally optimal sequence of transitions and instructions for any legal expression sequence of the target interpreter.

Recycling RAM content after reboots

von Manuel Wiesinger, Bachelor's thesis, Source code.

Abstract: Modern computers use DRAM modules as main memory. Data stored in them is likely to persist even in case of a short power outage. So it is possible, to reuse these memory contents, when rebooting the operating system. It could be useful to improve the boot time by recycling what what is already available in memory, instead of loading it from secondary storage. The present thesis investigates on the basis of the current literature the feasibility in the NetBSD operating system. Finally, the arising problems, which occur in practice are analysed.

Lot: prototype of a constraints-based spreadsheet

von Esad Hajdarevic. Bachelor's thesis, Ausprobieren, Source code.

Abstract: Spreadsheet formulas can be seen as a collection of unidirectional constraints. Users often want to apply the formulas in the other direction (for example, to find values that add up to a certain sum vs. calculating the sum), which can lead to a time consuming trial-and-error approach of finding the right values or error-prone rewriting of existing formulas.

As part of this thesis, I developed a web-based spreadsheet that supports working with constraints. Number of examples are presented to illustrate that addition of constraints make spreadsheets applicable to a whole new set of problems for which they would otherwise be unsuitable.

LLVM Compiler-Pass zur Optimierung von Switch-Instruktionen beim Dispatch in Interpretern

von Andreas Rohner. Bachelor's Thesis

Zusammenfassung: Interpreter verbringen einen Großteil ihrer Laufzeit mit der Ausführung von Indirect-Branches. Eine gute Indirect-Branch-Prediction ist also Schlüssel für eine gute Performanz. Interpreter, die eine Switch-Instruktion verwenden, sind um einen Faktor von bis zu 2, 02 langsamer als Interpreter mit Direct-Threaded-Code, weil letzere für jede VM-Instruktion einen eigenen Indirect-Branch haben, was die Indirect-Branch-Prediction enorm verbessert. Diese Arbeit stellt einen Compiler-Pass vor, der Switch-Statements so optimiert, dass ein ähnlicher Effekt wie bei Direct-Threaded-Code entsteht. Das führt für Ocaml zu einer Verbesserung der Performanz um einen Faktor von 1, 45-2, 4.

Optimizing Lua Using Run-Time Type Specialization

von Michael Schröder. Bachelor's Thesis, Source repository

Abstract: Like other dynamically typed languages, Lua spends a significant amount of execution time on type checks. Yet most programs, even if they are written in a dynamic language, are actually overwhelmingly monomorphically typed. To remove this unnecessary type- checking overhead, we implement a portable optimization scheme that rewrites virtual machine instructions at run-time based on the types of their operands. While not consistent across all platforms, we achieve average speed-ups of 1.2x on Intel, with a threaded variant of our VM showing improvements in the 1.5x to 2.4x range.

Implementierung der Python VM mit Vmgen

von Michal Revucky. Mehr

Aufgabe: Es gibt viele Techniken, um Interpreter schneller zu machen: schnellerer Dispatch z.B. durch threaded code, stack caching, statische und dynamische Superinstructions. Im Rahmen dieser Arbeit soll evaluiert werden, welche dieser Techniken auf den existierenden Python oder Ruby-Interpreter angewandt werden können, wieviel sie bringen können, und eventuell soll eine dieser Techniken angewendet werden.


von Andreas Meissl. Paket, ausgepackt, Dokumentation.

Aufgabe: In den Optimierungs- und Codeerzeugungsphasen werden oft große, spärlich besetzte Mengen verwendet. Drei verschiedene Implementationen dieses Datentyps sind zu programmieren, empirisch zu vergleichen, und die Ergebnisse sind graphisch darzustellen.

Anton Ertl