HOME | ENGLISH | IMPRESSUM | KIT

Bachelorarbeit (abgeschlossen): Spezialisierung von Funktionen

Unter der Spezialisierung der Funktion versteht man eine Kopie dieser Funktion, die unter bestimmten Annahmen optimiert werden kann. Das folgende Programm zeigt, dass die Spezialisierung von Funktionen, viele andere Optimierungen ermöglicht:

int x;
int y;

int f(int a, int b)
{
    switch (a) {
        case 0:  return b;
        case 1:  return 3 * b;
        case 2:  return 6 * b;
        case 3:  return 13 * b;
        ...
        default: return b * b;
    }
}

int main(void)
{
    int x1 = f(0, y);
    int x2 = f(x, 0);
    f(x, y);

    return x1 + x2;
}

Die Funktion f kann hier sehr groß sein, weshalb der Compiler vom Inlining [1] der Funktionsaufrufe absieht. Allerdings kann er z.B. eine Spezialisierung f1 von f erstellen, die annimmt, dass der erste Funktionsparameter immer 0 ist:

int f1(int b)
{
    switch (0) {
        case 0:  return b;
        case 1:  return 3 * b;
        case 2:  return 6 * b;
        case 3:  return 13 * b;
        ...
        default: return b * b;
    }
}

Da der Wert des switch-Statements in f1 bekannt ist, kann die Funktion anschließend stark vereinfacht werden.

[1] https://de.wikipedia.org/wiki/Inline-Ersetzung

Aufgabe:

  • Implementierung von Funktionsspezialisierung
  • Erarbeiten von Kriterien, wann die Funktionsspezialisierung vorteilhaft ist

Voraussetzungen

  • Spaß am Compilerbau
  • Gute Programmierkenntnisse in C


Veröffentlichungen

Veröffentlichung
Procedure Cloning im Kontext SSA-basierter Zwischensprachen

Betreuer

Ehemalige Mitarbeiter
Dipl.-Inform. Sebastian Buchwald

Studenten

Ehemalige Studenten
Raphael von der Grün