Die "Low Level Virtual Machine" Compiler-Infrastruktur
LLVM (Low Level Virtual Machine) steht für eine neue Infrastruktur für Compiler, die sich anschickt, der GNU Compiler Collection (gcc) Konkurrenz zu machen. Es stellt eine umfangreiche Modulsammlung bereit, aus der sich Entwickler bedienen können, um performante Compiler für neue oder existierende Programmiersprachen zu erzeugen. Im Gespräch mit Tim Pritlove erläutert Tim Sander von seinen Erfahrungen mit dem System. Zur Sprache kommen die Architektur der LLVM-Infrastruktur, bislang existierende Frontends und Backends, Lizenz und Anwendungsfälle von LLVM.
Shownotes
- Intro
Jon Stewart
- CRE Intro
- Begrüßung
- Tim ist immer noch auf Reisen
LLVM (Low Level Virtual Machine)
Tim Sander
TU Darmstadt
- Hardware Software Co-Design
Compiler
Bus
Multiplexer
CPU
Registersatz
Pipeline
GCC
- Anwendungsfälle für Hardware Software Co-Design
Koprozessor
FPGA
Fehlertoleranz
Grundlagenforschung
Grafikkarte
Moore’s Law
Transistor
Parallelisierung
- LLVM Überblick
GCC
The LLVM Compiler Infrastructure
- LLVM ist modular aufgebaut
- Geschichte von LLVM
- Lifelong Optimization
JIT-Compilation (“JITing”)
Skriptsprachen
Interpreter
Bytecode
Maschinencode
Dynamische Typisierung
Javascript
- Komponenten von LLVM
llvmc (LLVM Compiler Driver)
- LLVM Frontend
GCC-Frontend
Brainfuck
Zwischencode
Static Single Assignments
- GCC hat mit Version 4 auf SSA umgestellt
- Alle LLVM-Optimierungsläufe laufen auf der internen Beschreibungssprache
Parser
Java
C
C++
Fortran
Objective-C
GPL
LLVM Lizenz
University of Illinois/NCSA Open Source License
BSD
- Andere Frontends
- clang
Wikipedia
Projekt-Homepage
Assembler
- LLVM Middleware
- Optimierungsläufe
Dead Code elimination
- LLVM Backend
- Beschreibung der Ziel-Maschine
Von-Neumann-Architektur
Harvard-Architektur
x86
ADM64
ARM
PowerPC
Vektorrechner
SIMD (Single Instruction, Multiple Data)
OpenGL
Shader
- Zusammenfassung
- Vergleich zum GCC
Java VM
- LLVM und GCC setzen auf Static Single Assignments auf
- Unterschiede liegen in der Implementierung
LLVM Dokumentation
Softwarearchitektur
GCC Gimple
GCC RTL
“Gnade der späten Geburt”
- LLVM Zwischensprache
- Die Operationen sind ähnlich zu Assembler
Register
- In SSA ist jeder Datenplatz ein-eindeutig
- Modulgröße im Backend
- Compilezeiten
- Fehlermeldungen von clang
- Apple und clang
Chris Lattner
- Mutmaßungen zur Strategie von Apple
- Fehlermeldungen
- Compilezeiten
JIT-Kompilierung
- Zwischensprache ist sehr kompakt und kann mitgespeichert werden
Parallelisierung
Multiple Cores
SIMD (Single Instruction, Multiple Data)
- Parallelisierung des Compile-Vorgangs
- Parallelisierung des produzierten Codes
Flynnsche Klassifikation
AltiVec
SSE
Dynamische Typisierung
Skriptsprache
Runtime
- Praktische Anwendung
- Wo kommt LLVM schon zum Einsatz?
Adobe Flash
LLVM Developer Meeting 2008
- Vortrag von Scott Petersen
Vortragsfolien
Video Hi
Video Lo
- Ressourcen
LLVM Developer Meetings
- Vortrag von Tim Sander
Vortragsfolien
Video Hi
Video Lo
Google Tech Talk: Chris Lattner: LLVM 2.0
LLVM Developer Meeting 2008
Doxygen
LLVM Doxygen Dokumentation
- LLVM Online Compiler
- Für wen ist LLVM interessant?
- Sample Frontend
- Tims Optimierungslauf
- Macht Spaß in der Forschung
Compilerbau
- “Und dann kam die Aussage: ‘Compilerbau ist doch tot, da entwickelt sich doch nichts mehr.’” (Tim Sander)
- “Und für jemanden, der Informatik studiert und noch ein schönes Diplomthema braucht wäre das dann vielleicht auch der richtige Sandkasten, in den man sich mal reinsetzt um mal ordentlich mit Sand zu werfen.” (Tim Pritlove)
- Abschluss
- CRE Outro