1 |
Entwicklung eines Modelica Compiler BackEnds für große ModelleFrenkel, Jens 16 January 2014 (has links)
Die symbolische Aufbereitung mathematischer Modelle ist eine wesentliche Voraussetzung, um die Dynamik komplexer physikalischer Systeme mit Hilfe numerischer Simulationen zu untersuchen. Deren Modellierung mit gleichungsbasierten objektorientierten Sprachen bietet gegenüber der signalflussbasierenden Modellierung den Vorteil, dass die sich aus der Mathematik und Physik ergebenden Gleichungen in ihrer ursprünglichen Form zur Modellbeschreibung verwendet werden können. Die akausale Beschreibung mit Gleichungen erhöht die Wiederverwendbarkeit der Modelle und reduziert den Aufwand bei der Modellierung.
Die automatisierte Überführung der Gleichungen in Zuweisungen lässt sich theoretisch auf Modelle beliebiger Größe und Komplexität anwenden. In der praktischen Anwendung ergeben sich jedoch, insbesondere bei der automatisierten Überführung großer Modelle, mathematische Systeme mit sehr vielen Gleichungen und zeitabhängigen Variablen. Die daraus resultierenden langen Ausführungszeiten schränken die Anwendbarkeit der symbolischen Aufbereitung erheblich ein.
Die vorliegende Arbeit beschreibt den Prozess der automatisierten Überführung eines Modells bis zur numerischen Simulation. Alle Teilschritte werden detailliert untersucht und bezüglich ihrer theoretischen Komplexität bewertet. Geeignete Algorithmen werden im OpenModelica Compiler umgesetzt und bezüglich ihrer Laufzeit anhand praxisrelevanter Modelle miteinander verglichen und für jeden Teilschritt die beste Implementierung ausgewählt. Dadurch konnte ein nahezu linearer Zusammenhang zwischen Modellgröße und benötigter Zeit zur Überführung erreicht werden.
Zusätzlich bietet die Arbeit eine umfassende Dokumentation mit zahlreichen Empfehlungen für die Implementierung eines BackEnds eines Modelica Compilers. Dies erleichtert den Einstieg für neue Entwickler sowie die Weiterentwicklung bestehender Algorithmen. Letzteres wird durch ein modulares Konzept einer BackEnd-Pipeline unterstützt. Außerdem werden Methoden diskutiert, wie ein neues Modul innerhalb dieser Pipeline effizient getestet werden kann.:1 Einleitung
1.1 Modellierung und Simulation
1.2 Gleichungsbasierte objektorientierte Modellierung und Simulation
1.3 Motivation
1.4 Ziele, Forschungsschwerpunkt und Arbeitsvorhaben
2 Modellierung und Simulation mit Modelica
2.1 Anwendersicht
2.2 Die Modelica Sprache
2.3 Das Modelica Modell
2.4 Transformation des Modells zum Simulator
2.5 Laufzeituntersuchungen eines Modelica Compiler BackEnds
3 Graphen
3.1 Graphen für Gleichungssysteme
3.2 Suchalgorithmen
3.3 Matching Algorithmen
3.4 Laufzeituntersuchungen an Matching Algorithmen mit Modelica
4 Kausalisierung
4.1 Kausalisieren von algebraischen Systemen und Systemen gewöhnlicher Differentialgleichungen erster Ordnung
4.1.1 Zuweisen
4.1.2 Sortieren
4.2 Kausalisieren von differential algebraischen Systemen
4.2.1 Pantelides Algorithmus
4.2.2 Auswahl der Zustände des Systems
4.2.3 Singuläre Systeme
5 Symbolische Optimierung
5.1 Definition und Anwendung symbolischer Optimierungen
5.2 Allgemeine symbolische Optimierung
5.2.1 Finden und Entfernen trivialer Gleichungen
5.2.2 Tearing und Relaxation
5.2.3 Inline Integration
5.2.4 Parallelisierung
5.3 Fachbereichsspezifische symbolische Optimierung
5.3.1 Relaxation O(n) für Mehrkörpersysteme
6 Umsetzung Modelica Compiler BackEnd
6.1 Konzepte für die Implementation
6.1.1 Datenstruktur
6.1.2 Teilschritte der Analyse und Optimierungsphase
6.1.3 BackEnd Pipeline
6.1.4 Kausalisierung
6.2 Testen der Implementation
7 Laufzeituntersuchung an skalierbaren Modellen
7.1 Software-Benchmark Umgebung für Modelica Compiler - ModeliMark
7.2 Modelle für Laufzeituntersuchungen
7.3 Ergebnisse
8 Zusammenfassung und Ausblick / The symbolic treatment of mathematical models is essential to study the dynamics of complex physical systems by means of numerical simulations. In contrast to signal flow based approaches, modeling with equation-based and object-oriented languages has the advantage that the original equations can be used directly. The acausal description of equations increases reusability and reduces the effort for the modeller.
The automated transformation of equations into assignments can in theory be applied to models of any size and complexity. In practice, however, problems arise when large models, i.e. mathematical systems with many equations and time-dependent variables, shall be transformed. Long execution times that occur limit the applicability of symbolic processing considerably.
The present work describes the process of automated transformation from a model to program code which can be simulated numerically. All steps are examined in detail and evaluated in terms of its theoretical complexity. Suitable algorithms are implemented in the OpenModelica Compiler. Their execution times are compared by looking at models which are relevant to engineering. The best implementations for each sub-step are selected and combined to a Modelica Compiler BackEnd. Thus a relationship between model size and the time needed for transformation has been achieved which is mostly linear.
In addition, a comprehensive discussion with numerous recommendations for the implementation of a Modelica Compiler BackEnd is given. This is supposed to help new developers as well as to facilitate the development of existing algorithms. The latter is supported by a modular concept of a BackEnd pipeline. Moreover, methods are discussed how new modules can be tested efficiently using this pipeline.:1 Einleitung
1.1 Modellierung und Simulation
1.2 Gleichungsbasierte objektorientierte Modellierung und Simulation
1.3 Motivation
1.4 Ziele, Forschungsschwerpunkt und Arbeitsvorhaben
2 Modellierung und Simulation mit Modelica
2.1 Anwendersicht
2.2 Die Modelica Sprache
2.3 Das Modelica Modell
2.4 Transformation des Modells zum Simulator
2.5 Laufzeituntersuchungen eines Modelica Compiler BackEnds
3 Graphen
3.1 Graphen für Gleichungssysteme
3.2 Suchalgorithmen
3.3 Matching Algorithmen
3.4 Laufzeituntersuchungen an Matching Algorithmen mit Modelica
4 Kausalisierung
4.1 Kausalisieren von algebraischen Systemen und Systemen gewöhnlicher Differentialgleichungen erster Ordnung
4.1.1 Zuweisen
4.1.2 Sortieren
4.2 Kausalisieren von differential algebraischen Systemen
4.2.1 Pantelides Algorithmus
4.2.2 Auswahl der Zustände des Systems
4.2.3 Singuläre Systeme
5 Symbolische Optimierung
5.1 Definition und Anwendung symbolischer Optimierungen
5.2 Allgemeine symbolische Optimierung
5.2.1 Finden und Entfernen trivialer Gleichungen
5.2.2 Tearing und Relaxation
5.2.3 Inline Integration
5.2.4 Parallelisierung
5.3 Fachbereichsspezifische symbolische Optimierung
5.3.1 Relaxation O(n) für Mehrkörpersysteme
6 Umsetzung Modelica Compiler BackEnd
6.1 Konzepte für die Implementation
6.1.1 Datenstruktur
6.1.2 Teilschritte der Analyse und Optimierungsphase
6.1.3 BackEnd Pipeline
6.1.4 Kausalisierung
6.2 Testen der Implementation
7 Laufzeituntersuchung an skalierbaren Modellen
7.1 Software-Benchmark Umgebung für Modelica Compiler - ModeliMark
7.2 Modelle für Laufzeituntersuchungen
7.3 Ergebnisse
8 Zusammenfassung und Ausblick
|
2 |
Comprehensive Backend Support for Local Memory Fault ToleranceRink, Norman Alexander, Castrillon, Jeronimo 19 December 2016 (has links) (PDF)
Technological advances drive hardware to ever smaller feature sizes, causing devices to become more vulnerable to transient faults. Applications can be protected against faults by adding error detection and recovery measures in software. This is popularly achieved by applying automatic program transformations. However, transformations applied to program representations at abstraction levels higher than machine instructions are fundamentally incapable of protecting against vulnerabilities that are introduced during compilation. In particular, a large proportion of a program’s memory accesses are introduced by the compiler backend. This report presents a backend that protects these accesses against faults in the memory system. It is demonstrated that the presented backend can detect all single bit flips in memory that would be missed by an error detection scheme that operates on the LLVM intermediate representation of programs. The presented compiler backend is obtained by modifying the LLVM backend for the x86 architecture. On a subset of SPEC CINT2006 the runtime overhead incurred by the backend modifications amounts to 1.50x for the 32-bit processor architecture i386, and 1.13x for the 64-bit architecture x86_64. To achieve comprehensive detection of memory faults, the modified backend implements an adjusted calling convention that leaves library function calls transparent and intact.
|
3 |
Comprehensive Backend Support for Local Memory Fault ToleranceRink, Norman Alexander, Castrillon, Jeronimo 19 December 2016 (has links)
Technological advances drive hardware to ever smaller feature sizes, causing devices to become more vulnerable to transient faults. Applications can be protected against faults by adding error detection and recovery measures in software. This is popularly achieved by applying automatic program transformations. However, transformations applied to program representations at abstraction levels higher than machine instructions are fundamentally incapable of protecting against vulnerabilities that are introduced during compilation. In particular, a large proportion of a program’s memory accesses are introduced by the compiler backend. This report presents a backend that protects these accesses against faults in the memory system. It is demonstrated that the presented backend can detect all single bit flips in memory that would be missed by an error detection scheme that operates on the LLVM intermediate representation of programs. The presented compiler backend is obtained by modifying the LLVM backend for the x86 architecture. On a subset of SPEC CINT2006 the runtime overhead incurred by the backend modifications amounts to 1.50x for the 32-bit processor architecture i386, and 1.13x for the 64-bit architecture x86_64. To achieve comprehensive detection of memory faults, the modified backend implements an adjusted calling convention that leaves library function calls transparent and intact.
|
Page generated in 0.069 seconds