Programmminimierung


10

Die Schaltungsminimierung ist das Problem, um die Größe einer gegebenen Schaltung zu minimieren. Gibt es etwas Ähnliches für allgemeine Programme?

Insbesondere ist meine Frage -

Gibt es Algorithmen, um die Anzahl der Anweisungen für ein bestimmtes Programm zu minimieren? Ich weiß, dass es ein unentscheidbares Problem ist, aber ich suche keine Lösung, die etwas Optimales zurückgibt.

Während man bereits vorhandene Compiler-Transformationen anwenden kann, um dies zu erreichen, suche ich nach etwas, bei dem ich keine sehr engen Transformationen und Algorithmen definieren muss, um vorher nach ihnen zu suchen.

Bearbeiten: Die andere Frage, die ich habe, ist, ob man einen soliden und vollständigen Kalkül haben kann, der es uns ermöglicht, den gesamten Raum solcher semantisch äquivalenten Programme zu erkunden, oder ob dies nicht möglich ist.


2
Die Antwort auf Ihre andere Frage hängt von Ihrer Definition eines "Kalküls" ab. Die Tatsache, dass HALT nicht in coRE enthalten ist, macht die Antwort für die meisten derartigen Definitionen mit "Nein".

Die beiden Felder sind fn
insofern

Antworten:


10

Es gibt einen naiven Algorithmus für Programme mit Eingaben mit begrenzter Größe: Zählen Sie alle Programme in der Reihenfolge zunehmender Länge (oder Ausführungszeit, die eine begrenzte Funktion der Länge ist) auf. Wenn Sie nachweisen können, dass das Programm dem Original entspricht, stoppen Sie; Ansonsten suche weiter.

Dieser Algorithmus ist solide. Damit es vollständig ist, müssen Sie nachweisen können, dass alle abgelehnten Programme nicht dem Original entsprechen. Dies ist bei Endmaschinenmodellen möglich, sofern Sie eine Grenze für die Eingabegröße haben.

Beachten Sie, dass es möglicherweise keine optimale Lösung gibt, wenn die Programmausführungszeit von der Eingabe abhängt. Wenn Sie beispielsweise nach einer Worst-Case-Grenze suchen, werden Sie sehr schnell auf unentscheidbare Äquivalenzen stoßen, wenn Sie alle möglichen unbegrenzten Eingaben quantifizieren, und auf nicht auffindbare Probleme, wenn die Eingaben begrenzt sind.

Vor einem Jahrzehnt konnte „Denali: Ein zielgerichteter Superoptimierer“ von Rajeev Joshi, Greg Nelson und Keith Randall optimale Programme mit etwa 5 Maschinenanweisungen finden. Ich habe mir keine neueren Ergebnisse angesehen.


5
Einer unserer Studenten hier an der Universität von Sussex nutzte die Superoptimierung, um die Länge einiger Java-Kernroutinen (z. B. Addition) zu verkürzen. Dafür hat er enorme Mengen an Amazon EC2-Berechnungen verbrannt. Seine Dissertation ist hier . Offensichtlich kein praktikabler Ansatz für etwas anderes als wirklich kurze Programme.
Martin Berger
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.