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