Andreas Krall (andi@complang.tuwien.ac.at, Tel. 58801/18511)Praktikum: Embedded-C Extension for GCCArchitecture Description Languages (ADL) are used to describe processors and computer architectures. The task for this practical work is to develop a GUI for our XML based ADL, so that the user can create and manipulate a description. Components like registers, memories and functional units, as well as the interconnect should be displayed and manipulated in a graphical environment.
In addition a consistency checker should be developed that checks for invalid or meaningless constructs.
Andreas Krall (andi@complang.tuwien.ac.at, Tel. 58801/18511)Praktikum: ArchitekturbeschreibungEmbedded-C is a C language extension [1,2] that provides portability and access to common performance-increasing features of processors used in the domain of DSP and embedded processing. Extensions for fixed-point arithmetic, named address spaces and named registers allow the programmer to access those features of the target processor in a high level language, thereby significantly improving the performance of applications
The task in this practical work is to implement the Embedded-C extensions in the gcc [3] frontend.
[1] http://www.embedded-c.org
[2] http://www.open-std.org/jtc1/sc22/wg14/
[3] http://gcc.gnu.org
Andreas Krall (andi@complang.tuwien.ac.at, Tel. 58801/18511)Praktikum: Weitere Codegeneratoren für CACAOIm Rahmen dieses Praktikums soll mittels unserer Architekturbeschreibungssprache ein einfacher Mikroprozessor wie ein ARM beschrieben werden. Simulator und Compiler werden automatisch generiert.
Andreas Krall (andi@complang.tuwien.ac.at, Tel. 58801/18511)Praktikum: Optimierung des Codegenerators von CACAOAn unserem Institut ist CACAO, ein 64 Bit JavaVM just-in-time Compiler für Alpha Prozessoren entwickelt worden. Der Codegenerator für den ALPHA Prozessor soll um weitere für MIPS, SPARC, POWERPC und HP-Precision Architecture Prozessoren erweitert werden. Kenntnisse einer dieser Prozessoren ist von Vorteil.
Andreas Krall (andi@complang.tuwien.ac.at, Tel. 58801/18511)Praktikum: Debugging für CACAOAn unserem Institut ist CACAO, ein 64 Bit JavaVM just-in-time Compiler für Alpha Prozessoren entwickelt worden. Der Codegenerator für den Alpha Prozessor soll optimiert werden.
Andreas Krall (andi@complang.tuwien.ac.at, Tel. 58801/18511)Praktikum: Profiling für CACAOAn unserem Institut ist CACAO, ein 64 Bit JavaVM just-in-time Compiler für Alpha Prozessoren entwickelt worden. CACAO unterstützt zur Zeit keine Debugging-Möglichkeiten wie BackTracing und Ausgabe von Zeilennummern. Diese Möglichkeiten sollen zu CACAO hinzugefügt werden.
Andreas Krall (andi@complang.tuwien.ac.at, Tel. 58801/18511)Praktikum: Implementierung des Java Runtime Systems (API, Net) für CACAOAn unserem Institut ist CACAO, ein 64 Bit JavaVM just-in-time Compiler für Alpha Prozessoren entwickelt worden. CACAO soll um Profiling erweitert werden. Die Profileergebnisse sollen dabei als HTML-Datei ausgegeben werden.
Andreas Krall (andi@complang.tuwien.ac.at, Tel. 58801/18511)Diplomarbeit: Architecture Emulator Generator (bezahlt)An unserem Institut ist CACAO, ein 64 Bit JavaVM just-in-time Compiler für Alpha Prozessoren entwickelt worden. Teile des das Java Runtime System sind noch unvollständig (z.B. die Net-Bibliothek) und müssen noch dem CACAO System hinzugefügt werden. Kenntnisse von Java sind von Vorteil.
Andreas Krall (andi@complang.tuwien.ac.at, Tel. 58801/18511)Praktikum: ArchitekturbeschreibungIm Rahmen dieser Diplomarbeit soll ein Generator für zyklengenaue Architektur Emulatoren entwickelt werden. Die Architekturen werden in einer ADL beschrieben. Der Emulator soll Übersetzung und Interpretation unterstützen.
Andreas Krall (andi@complang.tuwien.ac.at, Tel. 58801/18511)Praktikum: Interprocedural Register Allocation for Global VariablesIm Rahmen dieser Diplomarbeit soll mittels unserer Architekturbeschreibungssprache ein einfacher Mikroprozessor wie ein ARM beschrieben werden. Simulator und Compiler werden automatisch generiert.
Andreas Krall (andi@complang.tuwien.ac.at, Tel. 58801/18511)Praktikum: Adaptive Calling ConventionsThe CDLab (Christian Doppler Labor) 'Compilation Techniques for Embedded Processors' currently develops a compiler for the CHILI architecture by OnDemand Microelectronics.
The CHILI is a four-way VLIW DSP (Digital Signal Processor) designed for efficient processing of video/audio streams. The architecture offers an extensive general purpose register file, with 64 32 bit registers. A distinguishing feature of the CHILI is it's capability to execute most instructions conditionally and it's memory subsystem. The CHILI is able to execute up to four load and store instructions concurrently.
The compiler is based on the LLVM compiler infrastructure developed at the University of Illinois. LLVM is a C++ based framework for static compilers, dynamic compilers (Just-In-Time, JIT), (whole) program optimizations and (whole) program analysis.
The CHILI architecture offers a set of registers specifically reserved for global variables. A simple interprocedural optimization should be implemented that analyses the usage of global variables and allocates them to registers.
- Prerequisites:
* Good knowledge of C++
* Basic compiler courses
Andreas Krall (andi@complang.tuwien.ac.at, Tel. 58801/18511)Diplomarbeit: Tree Pattern Matcher based on lburgThe CDLab (Christian Doppler Labor) 'Compilation Techniques for Embedded Processors' currently develops a compiler for the CHILI architecture by OnDemand Microelectronics.
The CHILI is a four-way VLIW DSP (Digital Signal Processor) designed for efficient processing of video/audio streams. The architecture offers an extensive general purpose register file, with 64 32 bit registers. A distinguishing feature of the CHILI is it's capability to execute most instructions conditionally and it's memory subsystem. The CHILI is able to execute up to four load and store instructions concurrently.
The compiler is based on the LLVM compiler infrastructure developed at the University of Illinois. LLVM is a C++ based framework for static compilers, dynamic compilers (Just-In-Time, JIT), (whole) program optimizations and (whole) program analysis.
Branch and memory load instructions have a very large latency on the CHILI architecture. Branches take four cycles to take effect. In general it is hard to fill these four delay slots with usefull instructions - up to 19 instructions (4*4+3) may be executed in delay slots. Loads take at least 5 cycles to complete. Thus it is important to minimize the number of loads, stores and branches to get high quality code. Adaptive calling conventions may be used to reduce the number of memory accesses needed at function entry and exit. In addition the usage of the return address register (specifies where to resume after a function has completed its execution) may be optimized to minimize data dependencies and improve the filling of delay slots.
- Prerequisites:
* Good knowledge of C++
* Basic compiler courses
Andreas Krall (andi@complang.tuwien.ac.at, Tel. 58801/18511)Praktikum: Vector Types and OperationsThe CDLab (Christian Doppler Labor) 'Compilation Techniques for Embedded Processors' currently develops a compiler for the CHILI architecture by OnDemand Microelectronics.
The CHILI is a four-way VLIW DSP (Digital Signal Processor) designed for efficient processing of video/audio streams. The architecture offers an extensive general purpose register file, with 64 32 bit registers. A distinguishing feature of the CHILI is it's capability to execute most instructions conditionally and it's memory subsystem. The CHILI is able to execute up to four load and store instructions concurrently.
The compiler is based on the LLVM compiler infrastructure developed at the University of Illinois. LLVM is a C++ based framework for static compilers, dynamic compilers (Just-In-Time, JIT), (whole) program optimizations and (whole) program analysis.
The instruction selector of the LLVM infrastructure is based on a simple buttom-up DAG matcher. This work should implement a two-pass instruction selector based on dynamic programming, well known from systems like lburg[1]. Patterns for the tree grammer should be derived using the `tablegen` tool included in LLVM.
- Prerequisites:
* Good knowledge of C++
* Basic compiler courses
- [1] Christopher W. Fraser and David R. Hanson and Todd A. Proebsting, "Engineering a simple, efficient code-generator generator", 1992, p. 213-126, ACM Letters on Programming Languages and Systems
Andreas Krall (andi@complang.tuwien.ac.at, Tel. 58801/18511)Praktikum: Debug InformationThe CDLab (Christian Doppler Labor) 'Compilation Techniques for Embedded Processors' currently develops a compiler for the CHILI architecture by OnDemand Microelectronics.
The CHILI is a four-way VLIW DSP (Digital Signal Processor) designed for efficient processing of video/audio streams. The architecture offers an extensive general purpose register file, with 64 32 bit registers. A distinguishing feature of the CHILI is it's capability to execute most instructions conditionally and it's memory subsystem. The CHILI is able to execute up to four load and store instructions concurrently.
The compiler is based on the LLVM compiler infrastructure developed at the University of Illinois. LLVM is a C++ based framework for static compilers, dynamic compilers (Just-In-Time, JIT), (whole) program optimizations and (whole) program analysis.
The LLVM compiler infrastructure supports a C language extension, that allows to define vector types. These types can be used in regular C expressions (e.g., arithmetics, function calls, etc.). The Chili architecture, developed by OnDemand Microelectronics, supports vector operations natively. The existing LLVM-Chili backend should be extended to support all vector operations offered by the Chili using the extended C syntax.
- Prerequisites:
* Good knowledge of C++
* Basic compiler courses
Andreas Krall (andi@complang.tuwien.ac.at, Tel. 58801/18511)Praktikum: ProfilingThe CDLab (Christian Doppler Labor) 'Compilation Techniques for Embedded Processors' currently develops a compiler for the CHILI architecture by OnDemand Microelectronics.
The CHILI is a four-way VLIW DSP (Digital Signal Processor) designed for efficient processing of video/audio streams. The architecture offers an extensive general purpose register file, with 64 32 bit registers. A distinguishing feature of the CHILI is it's capability to execute most instructions conditionally and it's memory subsystem. The CHILI is able to execute up to four load and store instructions concurrently.
The compiler is based on the LLVM compiler infrastructure developed at the University of Illinois. LLVM is a C++ based framework for static compilers, dynamic compilers (Just-In-Time, JIT), (whole) program optimizations and (whole) program analysis.
During this practical work debug support should be added to the existing LLVM backend for the Chili architecture. LLVM already offers a library for the DWARF debugging format, that has to be adopted for the Chili.
- Prerequisites:
* Good knowledge of C++
* Basic compiler courses
Andreas Krall (andi@complang.tuwien.ac.at, Tel. 58801/18511)Diplomarbeit: Compiler for arm-processorThe CDLab (Christian Doppler Labor) 'Compilation Techniques for Embedded Processors' currently develops a compiler for the CHILI architecture by OnDemand Microelectronics.
The CHILI is a four-way VLIW DSP (Digital Signal Processor) designed for efficient processing of video/audio streams. The architecture offers an extensive general purpose register file, with 64 32 bit registers. A distinguishing feature of the CHILI is it's capability to execute most instructions conditionally and it's memory subsystem. The CHILI is able to execute up to four load and store instructions concurrently.
The compiler is based on the LLVM compiler infrastructure developed at the University of Illinois. LLVM is a C++ based framework for static compilers, dynamic compilers (Just-In-Time, JIT), (whole) program optimizations and (whole) program analysis.
For this practical work profiling support should be added to the existing LLVM-Chili compiler. LLVM already offers a library for basic block, function and edge profiling, which should be used during this work.
- Prerequisites:
* Good knowledge of C++
* Basic compiler courses
Andreas Krall (andi@complang.tuwien.ac.at, Tel. 58801/18511)Diplomarbeit: Statische Typüberprüfung für ForthContext YesControl is a DCS-System, consisting of a SCADA (Supervisory Control and Data Acquisition) system and a PLC (programmable logic control) based on IEC 61131-3. Its concept of combining these two worlds with one engineering tool based on standard hardware for SCADA and PLC is unique, and the integration is much better than competitive products on the market. Task Description YesControl has an integrated compiler, which compiles Structured-Text- Source to Intel X86 assembler code, which then runs on the PLC. The Compiler first generates intermediate code, and then the intermediate code is compiled by the backend to the assembler code of the corresponding processor, with the help of The New Jersey Machine-Code Toolkit (see http://www.eecs.harvard.edu/~nr/toolkit/) The task of this diploma thesis is to port the PLC runtime system of YesControl (which is easily portable plain C) to an arm-processor-based hardware, and then to make an arm-backend for the compiler, including a Dissassembler for the ARM built with the help of the New Jersey machine- Code Toolkit Requirements
. Good knowledge in C
. Interest in building compilers
. knowledge of the arm-processor would be helpful, but is not necessary
M. Anton Ertl (anton@mips.complang.tuwien.ac.at, Tel. 58801/18515)Diplomarbeit: Testen der Absturz-Resistenz von DateisystemenForth hat weder statisches noch dynamische Typüberprüfung, der Programmierer ist dafür verantwortlich, keine Typfehler zu machen (wobei es gar nicht so einfach ist, festzumachen, was ein Typfehler ist). Trotzdem wäre ein statischer Prüfer hilfreich, der vor wahrscheinlichen Typfehlern warnt. Im Rahmen dieser Arbeit soll so ein Prüfer erstellt werden. Ein 74-min Video mit Gedanken dazu.
M. Anton Ertl (anton@mips.complang.tuwien.ac.at, Tel. 58801/18515)Praktikum oder Diplomarbeit: Beschleunigung von RubyEs ist mit realer Hardware schwierig und langwierig, zu Testen, ob und wie gut ein Dateisystem einen Absturz übersteht, insbesondere ob die Daten dabei konsistent sind. Im Rahmen dieser Arbeit soll ein Testframework auf Basis einer virtuellen Maschine entwickelt werden, das auf verschiedene Dateisysteme angewendet werden kann. Einige Ideen dazu: Die virtuelle Maschine stellt eine virtuelle Platte zur Verfügung, die für jeden Sektor mitführt, ob er sicher geschrieben wurde, oder nur vielleicht (oder eventuell, in welchem logischen Zeitbereich der Sektor geschrieben wurde). Nach einem simulierten Stromausfall darf das Filesystem nicht von Sektoren lesen, die vielleicht geschrieben wurden. Man müßte sich allerdings noch etwas für Dateisysteme überlegen, die mit Checksums arbeiten. Weiters müssen noch Testprogramme geschrieben und/oder gesammelt werden, bei denen die Dateisysteme eher zu Inkonsistenzen neigen.
M. Anton Ertl (anton@mips.complang.tuwien.ac.at, Tel. 58801/18515)Diplomarbeit: Ein portabler Codegenerator-GeneratorEs 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.
M. Anton Ertl (anton@mips.complang.tuwien.ac.at, Tel. 58801/18515)Praktikum oder Diplomarbeit: Parallelisierung mit ChannelsCodegenerator-Libraries wie Vcode und GNU Lightning leiden darunter, dass sie nur wenige Zielmaschinen unterstützen, und dass die Unterstuetzung zusätzlicher Zielmaschinen viel Arbeit kostet. Im Rahmen dieser Diplomarbeit soll die Unterstützung für zusätzliche Zielmaschinen automatisch erzeugt werden, indem ein bestimmtes C-Programm mit einem C-Compiler fuer die Zielmaschine compiliert wird, und dann aus dem erzeugten Code Maschinencodefragmente extrahiert werden, die dann in der Codegenerator-Library verwendet werden. Alternativ zum Einbauen in eine Codegenerator-Library kann auch ein Compiler wie z.B. tcc so mit neuen Zielmaschinen erweitert werden.
M. Anton Ertl (anton@mips.complang.tuwien.ac.at, Tel. 58801/18515)Diplomarbeit: Globale Stackallokation für JavaVM oder ForthMit der zunehmenden Verbreitung von Multi-Core CPUs wird die Parallelisierung allgemeiner Anwendungen immer interessanter; eine sinnvolle Möglichkeit dazu scheinen Channels (Ein-Richtungs-Kommunikationskanäle zwischen zwei Threads, ähnlich der üblichen Verwendung von Pipes) zu sein: sie erlauben die Parallelisierung bei gleichzeitiger Modularisierung. Im Rahmen dieser Arbeit soll eine Anwendung auf diese Weise parallelisiert werden; mögliche Anwendungen wären Compiler wie lcc, tcc, oder gcc; Sie können aber nach Absprache auch eine beliebige andere Anwendung parallelisieren.
M. Anton Ertl (anton@mips.complang.tuwien.ac.at, Tel. 58801/18515)Praktikum: Disassembler und Assembler für die Architekturen RISC-V oder SPARC in ForthStackmaschinen haben einen Stack statt des Registersatzes konventioneller Prozessoren. Analog zur Registerbelegung bei Registermaschinen ergibt sich das Problem, Variablen auf den Stack abzubilden, um Hauptspeicherzugriffe zu minimieren. Im Rahmen dieser Diplomarbeit sind Methoden für die globale Stackallokation für die JavaVM oder Forth zu entwickeln.
M. Anton Ertl (anton@mips.complang.tuwien.ac.at, Tel. 58801/18515)Diplomarbeit: Trennung von Maschinenbeschreibung und Optimierung in Baumgrammatiken(je ein Praktikum pro Architektur). Der Assembler soll sehr einfach gehalten werden, die komplizierteren Teile (Parsing, Symbolverwaltung) werden vom zugrundeliegenden Forth-System übernommen.
M. Anton Ertl (anton@mips.complang.tuwien.ac.at, Tel. 58801/18515)Diplomarbeit: Schnelle Maschinencodeerzeugung für stapelbasierte ZwischensprachenBaumgrammatiken beschreiben die Befehlsauswahl in Compilern. Allerdings wird in solchen Baumgrammatiken jeder Maschinenbefehl oft auf mehrere Arten beschrieben, um besseren Code zu erzeugen. Die zusätzlichen Regeln entsprechen dabei gewissen Mustern, die bei allen Maschinenbeschreibungen vorkommen, und vor allem auf Eigenschaften des Zwischencodes zurückzuführen sind (z.B. die Kommutativität eines Operators). In dieser Arbeit soll ein System entwickelt werden, das aus einer einfachen Maschinenbeschreibung und einer Beschreibung von Optimierungen des Zwischencodes eine Baumgrammatik für eine gute Befehlsauswahl erzeugt.
M. Anton Ertl (anton@mips.complang.tuwien.ac.at, Tel. 58801/18515)Praktikum oder Diplomarbeit: Für Themen siehe linkBei der Codeerzeugung zur Laufzeit kommt es besonders auf kurze Übersetzungszeiten an. In dieser Arbeit soll am Beispiel eines Forth-Compilers untersucht werden, wie schnell stack-basierter Code in effizienten Maschinencode für eine Registerarchitektur (Intel oder RISC) übersetzt werden kann.
eva Kühn (eva@complang.tuwien.ac.at, Tel. 58801/18512)Praktikum: Vergleich objektorientierter Programmiersprachen
Franz Puntigam (franz@complang.tuwien.ac.at, Tel. 58801/18514)Diplomarbeit: Verständlichkeit objektorientierter ProgrammierkonzepteProgrammiersprachen unterscheiden sich in vielen Details, die manchmal große Auswirkungen auf die Ausdrucksstärke haben. In einer Reihe von Praktika sollen jeweils zwei objektorientierte Programmiersprachen hinsichtlich ihrer Fähigkeit, für je eine Klasse von Problemstellungen einfache, effiziente und wiederverwendbare Lösungen zu ermöglichen, verglichen werden. Als Problemstellungen bieten sich unter anderem Sammlungen heterogener Daten (Listen, Stacks, etc.) und Operationen auf Paaren gleichartiger Objekte; es ist bekannt, dass diese Aufgaben in einigen Sprachen viel besser zu lösen sind als in anderen. Es werden z.B. Vergleiche zwischen allen Paaren von Java, Smalltalk, C++, Eiffel und Ada'95 vorgeschlagen, aber interessierte Praktikanten können auch Vergleiche zwischen weniger bekannten Sprachen durchführen. Diese Praktika richten sich auch an Gruppen beliebig vieler Personen, die solche Aufgaben im Team lösen wollen.
Voraussetzungen: grundlegende Programmierkenntnisse
Franz Puntigam (franz@complang.tuwien.ac.at, Tel. 58801/18514)Diplomarbeit: Typisierte aktive Objekte in JavaProgrammiersprachen bieten dem Programmierer viele verschiedene Konzepte zur Lösung unterschiedlichster Aufgaben und sind dadurch oft sehr komplex. In der Lehre wie in der Praxis ist diese Komplexität unerwünscht. Andererseits sollen alle wichtigen Konzepte wie Subtyping, Generizität, Überladen, Dynamic Binding, Reflection, strenge Typisierung, getrennte Typ- und Vererbungshierarchien, Kapselung und Data Hiding, etc. in einer objektorientierten Sprache vorhanden sein. Es soll in einer Diplomarbeit untersucht werden, wie gut die Sprachen Java, Smalltalk, C++, Eiffel und Ada'95 diese Konzepte unterstützen und wie verständlich und leicht verwendbar diese sind. Dabei muss natürlich der Charakter einer Sprache (d.h. deren Ziele sowie Zusammenhänge zwischen deren Konzepten) berücksichtigt werden.
Voraussetzungen: Grundkenntnisse der objektorientierten Programmierung
Franz Puntigam (franz@complang.tuwien.ac.at, Tel. 58801/18514)Diplomarbeit: Sprachkonzepte und WiederverwendungObwohl Java als Programmiersprache für das Internet angepriesen wird, gibt es nur minimale Unterstützung für die nebenläufige Programmierung. Daher empfiehlt es sich, Java um aktive Objekte (= nebenläufige Prozesse) zu erweitern. In einer Diplomarbeit sollen aktive Objekte und deren Klassen zu Java dazugefügt werden, so dass jedes aktive (wie auch jedes passive) Objekt einen Typ hat. Auch auf Klassen aktiver Objekte soll eine Art von Vererbung realisiert werden.
Voraussetzungen: Java, Compilerbau
Franz Puntigam (franz@complang.tuwien.ac.at, Tel. 58801/18514)Praktikum oder Diplomarbeit: Configuration Web-UIAls Vorteil der objektorientierten Programmierung wird meist die Unterstützung der Wiederverwendung von Code und Spezifikationen genannt. In der Praxis treten dabei jedoch häufig Probleme auf. Es sollen die Ursachen für diese Probleme untersucht werden. Dabei sollen Zusammenhänge zwischen den Problemen und verschiedenen Unterparadigmen des objektorientierten Paradigmas bzw. den Konzepten der entsprechenden Programmiersprachen hergestellt werden.
Voraussetzungen: Erfahrungen mit objektorientierter Programmierung
Markus Raab (markus.raab@tuwien.ac.at, Tel. 58801/)Praktikum: ABI/API Testing
Elektra provides a universal and secure framework to store configuration parameters in a global, hierarchical key database. The core is a small library implemented in C. The plugin-based framework fulfills many configuration-related tasks to avoid any unnecessary code duplication across applications while it still allows the core to stay without any external dependency. Elektra abstracts from cross-platform-related issues with an consistent API, and allows applications to be aware of other applications' configurations, leveraging easy application integration.
Your task is to generate a Web-UI out of a given configuration schema.
For more bachelor/master theses related to this topic, please search for Elektra in TISS. It is also possible to suggest your own topics or combine different topics.
Needed skills:
- Rust, Typescript and React with focus on good code quality, documentation and unit tests.
Markus Raab (markus.raab@tuwien.ac.at, Tel. 58801/)Praktikum: Allgemeine tail-call Optimierung für den C-Compiler gcc
Elektra provides a universal and secure framework to store configuration parameters in a global, hierarchical key database. The core is a small library implemented in C. The plugin-based framework fulfills many configuration-related tasks to avoid any unnecessary code duplication across applications while it still allows the core to stay without any external dependency. Elektra abstracts from cross-platform-related issues with an consistent API, and allows applications to be aware of other applications' configurations, leveraging easy application integration.
Compatible ABI (Application Binary Interface) ensures that a program linked against a library continues to work when the library is upgraded. Your task is to compare different technologies to check if libraries are compatible and integrate them in a Jenkins build server.
For more bachelor/master theses related to this topic, please search for Elektra in TISS. It is also possible to suggest your own topics or combine different topics.
Needed skills:
- Testing and ideally Jenkins knowledge
- The thesis should be written in english.
Ulrich Neumerkel (ulrich@complang.tuwien.ac.at, Tel. 58801/18513)Praktikum: CachestatistikenGegenwärtig optimiert gcc (bzw. egcs) nur direkt rekursive tail-calls. Diese Optimierung soll möglichst allgemein für tail-calls erweitert werden.
Ulrich Neumerkel (ulrich@complang.tuwien.ac.at, Tel. 58801/18513)Praktikum oder Diplomarbeit: Energiesparendes Scheduling unter LinuxNeuere Prozessoren führen Statistiken über viele Vorgänge wie das genaue Verhalten des Cache. In diesem Praktikum sollen diese Daten über eine möglichst allgemein gehaltene Schnittstelle unter Linux für intel x86 und dec alpha zur Verfügung gestellt werden.
Voraussetzungen: Linux-Kernel
Ulrich Neumerkel (ulrich@complang.tuwien.ac.at, Tel. 58801/18513)Praktikum oder Diplomarbeit: Program-slicing für Prolog und Constraint-SprachenViele Prozessoren erlauben es, während der Laufzeit die Betriebsfrequenz des Prozessors herunterzusetzen. Dadurch laufen Programme natürlich langsamer. Der Stromverbrauch geht jedoch effektiv meist stärker als nur proportional zurück. Wenn also keine hohen Anforderungen an die Antwortzeit eines Prozesses bestehen, kann es energiesparender sein, diesen Prozess bei niedriger Taktfrequenz auszuführen, statt ihn bei höchster Frequenz auszuführen und entsprechend früher in die Idle-Loop zu gehen.
Literatur: Mark Weiser, Alan Demers, Brent Welch, Scott Shenker. "Scheduling for Reduced CPU Energy", Operating System Design and Implementation (OSDI) Conference, Monterey, CA. November, 1994.
- BIOS-Schnittstellen
- Scheduler
- Traces
Voraussetzungen: Linux-Kernel
Ulrich Neumerkel (ulrich@complang.tuwien.ac.at, Tel. 58801/18513)Praktikum oder Diplomarbeit: Constraintbasierte Datenflußanalyse imperativer ProgrammeProgramm slicing ist eine Programmanalysetechnik, um jene Programmteile herauszufinden, die für gewisse Eigenschaften verantwortlich sind. Im folgenden Programm ist etwa nur ein sehr kleiner Teil für die Nichttermination der Anfrage verantwortlich. Die in der Laborübung logikorientierte Programmiersprachen verwendeten Lesarten sollen nun mittels Slicing-Techniken implementiert werden. Eine Technik zur Generierung von Slices, die die Terminationseigenschaft eines Programms erklärt, wurde bereits entwickelt. Siehe dazu den Artikel Termination slicing in logic programs.
:- phrase(rnaloop, "AAAGCGTTT"). rnaloop --> {Bs = [_,_,_|_]}, complseq(Bs), {false},list([_,_,_|_]),list(Bs). %list([]) --> {false},[].list([E|Es]) --> {false},[E],list(Es). %complseq([]) --> {false},[]. complseq([B|Bs]) --> complseq(Bs), {false},[C],{base_compl(C,B)}. %base_compl(0'A,0'T) :- false.base_compl(0'T,0'A) :- false.base_compl(0'C,0'G) :- false.base_compl(0'G,0'C) :- false.Voraussetzungen: Prologübung
Ulrich Neumerkel (ulrich@complang.tuwien.ac.at, Tel. 58801/18513)Praktikum oder Diplomarbeit: Seiteneffektfreie Ein-/Ausgabe in Logik-ProgrammiersprachenConstraints erlauben die flexible Analyse von Programmanhängigkeiten. In dieser Diplomarbeit sollen constraints zur Implementierung einer Datenflußanalyse eingesetzt werden
Voraussetzungen: Prologübung
Ulrich Neumerkel (ulrich@complang.tuwien.ac.at, Tel. 58801/18513)Praktikum oder Diplomarbeit: Vergleich von Labelingstrategien für finite DomainsSeiteneffekte, wie sie in herkömmlichen Programmiersprachen üblich sind, passen nicht direkt zu deklarativen Programmiersprachen. Wie Entwicklungen vor allem in puren funktionalen Programmiersprachen gezeigt haben, ist es aber dennoch möglich Seitenffekte mit einer deklarativen Programmiersprache zu verbinden. Es sollen die bisherigen Ansätze zusammengefaßt werden, und auf Logik-Programmiersprachen angewandt werden.
Voraussetzungen: Prologübung
Ulrich Neumerkel (ulrich@complang.tuwien.ac.at, Tel. 58801/18513)Praktikum: Ein seiteneffektfreier PrologparserDie Wahl der richtigen Methode zum Labeling eines Constraintsystems entscheidet oft über seine praktische Einsetzbarkeit. Vergleich anhand konkreter Probleme.
Voraussetzungen: Prologübung
Ulrich Neumerkel (ulrich@complang.tuwien.ac.at, Tel. 58801/18513)Praktikum: Ars Magna des Raymundus LullusDie meisten praktischen Implementierungen von Parsern in Prolog verwenden Seiteneffekte zum Lesen einer Datei. Durch neuere Implementierungstechniken ist es möglich geworden, daß eine Datei direkt auf eine Liste von Zeichen effizient abgebildet werden kann. Dadurch erübrigt sich die Verwendung von Seiteneffekten innerhalb eines Parsers. Es soll ein Parser für Prolog entwickelt werden, der eine Liste von Zeichen auf den entsprechenden Prologterm abbildet. Dieser Parser soll mit existierenden Parsern verglichen werden.
Voraussetzungen: Prologübung
Ulrich Neumerkel (ulrich@complang.tuwien.ac.at, Tel. 58801/18513)Praktikum: Linux Disk-Management für Laptops
In diesem Werk beschreibt Raymondus Lullus (1232-1316) eine Art Grammatik zur Darstellung von Argumentationsweisen (Ars compediosa inveniendi veritatem), die sich zur Umsetzung in Prolog geradezu anbietet.
Eine interessante Persönlichkeit ist Raimundus Lullus, der um 1300 mittels mehrerer konzentrischer Scheiben, die mit verschiedenen Wörtern beschriftet waren, durch Drehen der Scheiben immer neue »Wahrheiten« hervorbrachte (»ars inveniendi«). Die Fortsetzung findet solche »automatische Wissensverarbeitung und -erzeugung« in den Kalkülen von Leibniz, de Morgan und Boole und schließlich in den regelbasierten Expertensystemen, wie man sie im Bereich der sogenannten Künstlichen Intelligenz hat. (Aus: Uni Ulm intern, Juni 1995:
- Die Ars des Raimundus Lullus. Eine mediterrane Kommunikationslogik, Berlin 1989, text machines text
- Texte der österreichischen Nationalbibliothek.
- Kommt in vielen Romanen vor: Umberto Eco, Die Insel des vorigen Tages als aristotelisches Fernrohr. Jonathan Swift, Gullivers Reisen. Christoph Martin Wieland, Der neue Amadis, 10. Gesang.
- Artistic Websites
Voraussetzungen: Prologübung
Ulrich Neumerkel (ulrich@complang.tuwien.ac.at, Tel. 58801/18513)Praktikum: Graphische Darstellung gerichteter GraphenZur Schonung der Batterie auf einem Laptop sollen die Plattenzugriffsstrategien von Linux adaptiert werden. üblicherweise wird durch den update-Dämon immer wieder auf die Platte zugegriffen. Dadurch ist es nicht möglich, die Platte zur Einsparung der Batterie abzuschalten. (Eine einfache, aber nicht optimale und zufriedenstellende Lösung ist es, den update-Dämon erst gar nicht zu starten und manuell zu sync-en.) Es soll eine für Laptops geeignetere Strategie implementiert werden, die die Zeit zu der die Platte abgeschaltet sein kann, maximiert.
Gegenwärtig gibt es eine relativ einfache, aber nicht optimale Lösung: mobile-update. Es fehlen vor allem Adaptierungen für Power-Managements etc.
Voraussetzungen: Linux-Kernel
Ulrich Neumerkel (ulrich@complang.tuwien.ac.at, Tel. 58801/18513)Praktikum: Postscript-Lösungsannotationen
Zur Darstellung gerichteter Graphen soll die Lösungsannotation graphs_marks(Graphs,Marks) realisiert werden. Dabei ist Graphs eine Liste von Prädikatsindikatoren. Jedes Prädikat beschreibt einen gerichteten Graphen, dessen Knoten Atome (Konstanten) sind. Marks ist eine Liste der Knoten, die gesondert hervorgehoben werden sollen (In diesem Falle Joseph II). Die erste Relation wird durch einfache möglichst senkrechte Striche dargestellt, die zweite durch doppelte möglichst horizontale Striche. Genauere Beschreibung im WWW.
kind_von(joseph_I, leopold_I). kind_von(karl_VI, leopold_I). kind_von(maria_theresia, karl_VI). kind_von(joseph_II, maria_theresia). kind_von(joseph_II, franz_I). kind_von(leopold_II, maria_theresia). kind_von(leopold_II, franz_I). kind_von(marie_antoinette, maria_theresia). kind_von(franz_II, leopold_II). gatte_gattin(franz_I, maria_theresia). :- graphs_marks([kind_von/2,gatte_gattin/2], [P]) <<< P = joseph_II.Voraussetzungen: Prologübung
Ulrich Neumerkel (ulrich@complang.tuwien.ac.at, Tel. 58801/18513)Praktikum: Linux Prozess-Memory-ManagementZur besseren Darstellung einer Lösung (Antwortsubstitution) soll diese graphisch (z.B. mittels postscript) dargestellt werden. Die Treiber sollen als DCGs beschrieben werden, die einen Postscript-Text beschreiben. Ein Treiber ist also nichts anderes als eine Relation zwischen einem Term und einem Postscripttext. Hier ein kleines Beispiel. Die Zeile besagt, daß die Variable Cs als Postscripttext dargestellt werden soll. Die Variable Cs wird durch das Nichtterminal box1//0 beschrieben. Fragt man nach den Antworsubstitutionen, so wird der Postscripttext in einem eigenen Fenster dargestellt.
:- postscript(Cs) <<< phrase(box1, Cs).Literatur zu Postscript::- europastadt(Stadt) <<< stadt(Stadt).
![]()
- PostScript-Minikurs, ziemlich gut
- Postscripttutorial (Dies ist eine lokale Kopie des Originals).
- Internet Postscript Resources
- Zürcher Postscriptcorner
- Cs4Ce
- Imation Postscript Pages
Voraussetzungen: Prologübung
Ulrich Neumerkel (ulrich@complang.tuwien.ac.at, Tel. 58801/18513)Praktikum: Ein Compiler für binäres PrologProzesse teilen gewisse Hauptspeicherbereiche miteinander. Etwa die nicht modifizierbaren Teile unabhängiger Prozessinstanzen, Bibliotheken und die nicht modifizierten Teile zwischen Vater- und Kindprozeß. Daten, die vom Prozeß selbst initialisiert wurden, werden jedoch nicht mit identischen Daten eines anderen Prozesses zusammengelegt. Durch das Zusammenlegen solcher Daten wird der Hauptspeicherbedarf und damit auch das Swapping (paging) in Linux weiter reduziert. Es soll a) gemessen werden, welche Speichereinsparungen dadurch erzielt werden könnten und b) der Linux-Kernel daraufhin adaptiert werden.
Siehe dazu auch das Mergemem-Projekt
Gegenwärtig sind vor allem effiziente Strategien zum Auffinden identischer Seiten von Interesse.
Voraussetzungen: Linux-Kernel
Ulrich Neumerkel (ulrich@complang.tuwien.ac.at, Tel. 58801/18513)Praktikum oder Diplomarbeit: Visualisierung und Animation von PrologmaschinenBinäres Prolog ist eine stark vereinfachte Prologvariante, die verhältnismäßig einfach zu implementieren ist. Es soll ein Compiler entwickelt werden, der BinWAM-Code erzeugt.
Voraussetzungen: Prologübung
Ulrich Neumerkel (ulrich@complang.tuwien.ac.at, Tel. 58801/18513)Praktikum: Schnittstelle für ein interaktives Programmtransformationssystem für PrologDie Ablaufmechanismen von Prologmaschinen sollen visualisiert werden. Beispiel 2-dimensionale Darstellung von WAM und VAM.
- Graphischer Entwurf. Z.B. Wie stellt man Terme, Stacks, Bindungen etc. graphisch dar?
- Animation. Für den Ablauf einer Prologmaschine beim Beweis eines konkreten Prologziels soll eine Folge von Bildbesschreibungen generiert werden.
Voraussetzungen: Prologübung
Ulrich Neumerkel (ulrich@complang.tuwien.ac.at, Tel. 58801/18513)Praktikum: Ein Emacs-Mode für PrologEs soll eine Schnittstelle entworfen werden, um Programmtransformationen in der Programmierumgebung GUPU interaktiv durchführen zu können.
Voraussetzungen: Prologübung
Ulrich Neumerkel (ulrich@complang.tuwien.ac.at, Tel. 58801/18513)50 gefundenFür die Programmierumgebung GUPU wurde ein spezieller Emacs-Mode entwickelt, der das Entwickeln und Testen von Prologprogrammen unterstützt. Es soll ein allgemeiner einsetzbarer Mode zum Entwickeln und Testen von Prologprogrammen entwickelt werden.
Voraussetzungen: Emacs und Emacs-Lisp