Publikation

Hybrid approaches to adjoint code generation with dco/c++

  • Hybride Verfahren zur Generierung adjungierter Programme mithilfe von dco/c++

Lotz, Johannes; Naumann, Uwe (Thesis advisor); Gauger, Nicolas Ralph (Thesis advisor)

Aachen (2016)
Doktorarbeit

Dissertation, RWTH Aachen University, 2016

Kurzfassung

Die vorliegende Dissertationsschrift beschäftigt sich mit der Berechnung von Tangenten- und Adjungierten-Projektionen von Ableitungstensoren beliebiger Ordnung numerischer Simulationsprogramme, welche in der Programmiersprache C++ verfasst sind. Aufgrund der ständig steigenden Rechenleistung, spielen numerische Simulationen in vielen unterschiedlichen Bereichen eine fundamentale Rolle. Daher haben sich über die letzten Jahrzehnte Simulationsprogramme zur Grundlage von Optimierungsproblemen entwickelt, wie z.B. bei der Design-Optimierung in der numerischen Strömungsmechanik. Falls zu diesem Zweck ableitungsbasierte Verfahren verwendet werden, benötigt man Sensitivitäten des Simulationsprogrammes. Da dabei in den meisten Fällen Gradienten eines skalaren Zielfunktionals berechnet werden müssen, sollte dies mithilfe adjungierter Verfahren geschehen. Adjungierte Programme können entweder manuell geschrieben, oder durch "algorithmische" (auch "automatische") "Differentiation" (AD) generiert werden. AD ist eine semantische Programmtransformation, welche auf Basis der Kettenregel in der Differentialrechnung aus dem originalen Programm eines generiert, welches zusätzlich zu den Funktionswerten auch entsprechende Sensitivitäten berechnet. Demgegenüber steht das manuelle Schreiben adjungierter Programme. Letzteres ist auf der einen Seite meist ein aufwändiger und fehleranfälliger Prozess, wobei der Programmierer andereseits, sollte er fundierte mathematische Kenntnisse besitzen, möglicherweise ein hoch optimiertes, sehr effizientes Programm entwickelt. Dies ist insbesondere durch die Ausnutzung mathematischer Eigenschaften, wie dem Satz von impliziten Funktionen, möglich. Neben diesem Punkt verliert der Programmierer jedoch dabei die Möglichkeit eines inkrementellen Softwareentwicklungsprozesses. Um solch einen effektiven Entwicklungsprozess zu erhalten und zusätzlich ein effizientes adjungiertes Programm zu entwickeln wird in dieser Arbeit ein hybrider Ansatz vorgeschlagen. Dabei wird die Verwendung eines AD tools mit manuell geschriebenem adjungiertem Code verbunden. Damit erreicht man einen top-down Softwareentwicklungsprozess, welcher inkrementell von einer korrekten reinen AD Lösung, Schritt für Schritt zu einer sehr effizienten Implementierung verfeinert werden kann.Die Arbeit besteht aus drei eng verknüpften Themen-Bereichen. Den Anfang macht die Beschreibung und Einführung von dco/c++, eine Software welche im Zuge dieser Arbeit entwickelt wurde. dco/c++ ist eine Überladungsbibliothek welche AD für die Programmiersprache C++ implementiert und oben angesprochene Hybridisierung sehr flexibel und effizient unterstützt. Dabei wird der Flexibilitätsbegriff hier so verstanden, dass die Bibiliothek in einer modernen C++ Umgebung eingesetzt werden kann (d.h. generische Konzepte, exception-safety, thread-safety oder Portabilität unter verschiedenen Betriebssystemen) und dass eine gute Benutzbarkeit gewährleistet ist (verständliche Interfaces, Unterstützung von Ableitungen beliebiger Ordnung). Für dco/c++ wird die Effizienz durch Laufzeitmessungen mithilfe eine neu entwickelten AD test suite sichergestellt. Diese schafft eine gute Datenlage und macht einen fundierten Vergleich mit anderen AD tools möglich. Ergebnisse dazu sind in dieser Arbeit zusammengefasst.Als zweiten Bereich beschäftigt sich die Arbeit mit der symbolischen Herleitung von Adjungierten beliebiger Ordnung für einige weit verbreitete numerische Algorithmen. Darunter fallen z.B. lineare und nichtlinear Löser. Die Relevanz der dabei gewonnenen Formulierungen wird durch eine Verknüpfung mit dco/c++ und einer großen Effizienzsteigerung deutlich. Dies wird anhand einer umfassenden Beispielanwendung demonstriert. Zusätzlich wurde dco/c++ erfolgreich in vielen Projekten eingesetzt; die Anwendbarkeit der Software wird daher durch eine Beschreibung von Referenzprojekten dargelegt.Der dritte Bereich beschäftigt sich mit einem anderen Aspekt und gleichzeitig großem Problem bei adjungierten Programmen: dem Speicherverbrauch. Neben anderen Herangehensweisen, ist der Ansatz des "Checkpointing" verbreitet, um den Speicherverbrauch auf Kosten zusätzlicher Laufzeit zu verringern. In dieser Arbeit wurde zum ersten mal für das sogenannte "Call Tree Reversal Problem" die Formulierung als ganzzahliges Optimierungsproblem hergeleitet. Entsprechende Ergebnisse im Vergleich zu herkömmlichen Ansätzen finden sich ebenfalls in dieser Arbeit.

Einrichtungen

  • Lehr- und Forschungsgebiet Software und Werkzeuge für Computational Engineering [123120]
  • Fachgruppe Informatik [120000]