Abgabe Effiziente Programme WS10/11

Abgabe Effiziente Programme WS10/11

Sie können ein beliebiges Beispiel wählen.

Wer nichts anderes vorhat, kann die unten vorgegebene Aufgabe für dieses Semester wählen.

Natürlich können Sie, wenn Sie wollen, auch die Implementierung eines anderen Problems optimieren; allerdings hat das einige Nachteile: Sie müssen einen Teil der Zeit Ihrer Präsentation für die Erklärung des Problems und des Algorithmus aufwenden, und die Ergebnisse sind nicht direkt vergleichbar. Der Vorteil (vor allem, wenn Sie einen späteren Termin wählen) ist, dass Sie nicht das wiederholen, was andere gemacht haben, oder ein langsameres Programm präsentieren.

Bereiten Sie eine 15-18-minütige Präsentation vor (am besten machen Sie einen Probelauf, damit sich die Präsentation auch sicher in der Zeit ausgeht). Da Sie dabei nicht soviel Zeit haben wie ich in der Vorlesung, präsentieren Sie die meisten Schritte nur im Überblick (also eventuell nur, wieviel er gebracht hat), und nur ein paar besonders interessante Schritte mit mehr Details. Besonders interessant sind u.a. die Schritte, die unerwartet viel oder wenig bringen.

Vorgegebene Aufgabe: shortest-path

Hintergrund

Nicht unbedingt nötig für die Lösung des Beispiels, aber vielleicht hilfreich für das Verständnis:

Das Beispiel dreht sich um die Code-Erzeugung mittels dynamic programming. Das ist eine vereinfachte Form der Befehlsauswahl mit Hilfe von Baum-Grammatiken, die in der LVA Übersetzerbau gelehrt wird. Die Vereinfachung ist die, dass die Bäume zu strings degeneriert sind (also nicht mehr als ein Kind pro Knoten). Das Problem vereinfacht sich dadurch zu einem normalen shortest-path-Problem. Als Eingabe gibt es Sequenzen von Zwischencodebefehlen. Für die Codeerzeugung weiters wichtig sind die Zustände, die verschiedene Registerbelegungen repräsentieren. Für einen Zwischencodebefehl kann es verschiedene Maschinencodesequenzen mit unterschiedlichen Kosten geben, je nachdem in welchem Zustand die Sequenz anfängt und aufhört. Weiters gibt es noch die Möglichkeit, Code für einen Zustandswechsel zu erzeugen, ohne direkt beteiligtem Zwischencodebefehl (epsilon in der Grafik, noop in der Ausgabe). Die Ausgabe unseres Beispielprogramms ist aber nicht der Maschinencode, sondern nur eine Sequenz von Zwischencodebefehlen mit Zuständen (die man allerdings 1:1 zu Maschinencode expandieren kann). Die folgende Grafik illustriert das Problem:

Der obere Teil zeigt einen endlichen Automaten mit drei Zuständen, wobei die Zwischencode-Befehle Übergänge zwischen den Zuständen bewirken können, und jeder Übergang Kosten hat (z.B. hat der Epsilon-übergang von S0 nach S1 die Kosten 2). Der untere Teil zeigt das shortest-Path-Problem für die Code-Erzeugung für die Sequenz "iload iload", ausgehend von S2 und endend in S2. Vor dem ersten iload, zwischen den iloads, und nach dem zweiten iload kann der Zustand mit einem Epsilon-Übergang geändert werden. In unserem Beispiel ist eine optimale Lösung (rot), zunächst in den Zustand S0 überzugehen, und dann keine Zustandsänderung über Epsilon-Kanten mehr vorzunehmen (dünne Linien). Die roten Zahlen im unteren Beispiel sind die kumulierten Kosten eines optimalen Weges bis zum Zielpunkt (wird beim dynamic programming berechnet). Zusammenhang mit Baumgrammatiken: Die Zustände entsprechen Non-Terminale, die Befehle entsprechen Operatoren, die Epsilon-Kanten entsprechen Kettenregeln.

Genaue Aufgabe

Optimieren Sie das Shortest-Path-Programm so, dass es auf allen legalen Eingaben korrekt funktioniert und auf der Benchmark-Eingabe input-bench-littleendian und strukturell ähnlichen Eingaben effizienter läuft als das original. Messen Sie den Effekt ihrer Optimierungsschritte auf die Laufzeit (Anzahl der Zyklen) mit der Benchmark-Eingabe. Die interessantesten Schritte und Ergebnisse präsentieren Sie dann (siehe oben).

Legale Eingaben: Binärdateien mit 32-bit-Werten. Sequenzen (basic blocks) werden mit -1 abgeschlossen und können maximal 128 Befehle lang sein. Befehle werden von Zahlen zwischen 0 und 347 repräsentiert.

Die Ausgabe muss natürlich auch korrekt sein, d.h., das Ergebnis muss bezüglich der Kosten optimal sein. Die genaue Sequenz muss nicht übereinstimmen, die ausgegebenen Sequenzen müssen nur (ebenfalls) optimal sein.

Sie können Ihr Programm (und Doku dazu, z.B. Ihre Präsentation) im Web veröffentlichen (wird nicht beurteilt), und zwar indem Sie auf /nfs/unsafe/httpd/ftp/pub/anton/lvas/effizienz-abgaben/2010w ein Verzeichnis anlegen und Ihre Dateien in diesem Verzeichnis ablegen.

Aufgaben vom [WS02/03 | WS03/04 | WS04/05 | WS05/06 | WS06/07 | WS07/08 | WS08/09 | WS09/10 ]

Termin/Anmeldung zur Präsentation

Die Termine sind:
17.12., 14.1., 21.1., 28.1.
Für den 17.12. haben sich Gruppen angemeldet, der Termin findet also statt. Die Terminvergabe erfolgt, über unser Web-Anmeldesystem. Und zwar müssen Sie dabei folgendermaßen vorgehen: Im WS 2010/2011 ist im Normalfall eine Gruppengröße von 3-4 Personen vorgesehen. Wenn Sie eine andere Gruppengröße bilden wollen, schreiben Sie an studass@complang.tuwien.ac.at. Beachten Sie allerdings, dass die Anzahl der Termine begrenzt ist, sodass wir nur eine begrenzte Zahl kleinerer Gruppen akzeptieren können.
Anton Ertl
[ICO]NameLast modifiedSizeDescription

[DIR]Parent Directory  -  
[CMP]shortest-path.tar.gz02-Dec-2010 22:23 203K 

Apache/2.2.22 (Debian) DAV/2 mod_fcgid/2.3.6 PHP/5.4.36-0+deb7u3 mod_python/3.3.1 Python/2.7.3 mod_ssl/2.2.22 OpenSSL/1.0.1e mod_perl/2.0.7 Perl/v5.14.2 Server at www.complang.tuwien.ac.at Port 80