Interface et extension de Open Research Compiler
S´ ebastian Pop Universit´ e Louis Pasteur Strasbourg, Projet A3 INRIA, FRANCE
Interface et extensiondeOpen Research Compiler – p.1
Interface et extension de Open Research Compiler S ebastian Pop - - PowerPoint PPT Presentation
Interface et extension de Open Research Compiler S ebastian Pop Universit e Louis Pasteur Strasbourg, Projet A3 INRIA, FRANCE Interface et extensiondeOpen Research Compiler p.1 Prsentation gnrale L entreprise et
S´ ebastian Pop Universit´ e Louis Pasteur Strasbourg, Projet A3 INRIA, FRANCE
Interface et extensiondeOpen Research Compiler – p.1
Interface et extensiondeOpen Research Compiler – p.2
Interface et extensiondeOpen Research Compiler – p.3
Interface et extensiondeOpen Research Compiler – p.4
Interface et extensiondeOpen Research Compiler – p.5
lowering entre niveaux.
Interface et extensiondeOpen Research Compiler – p.6
file2.cxx file3.f file1.c
Interface et extensiondeOpen Research Compiler – p.7
file2.cxx C++ front−end file3.f F90 front−end C front−end file1.c
Interface et extensiondeOpen Research Compiler – p.7
file2.cxx C++ front−end file3.f F90 front−end WHIRL dumper C front−end file1.c file3.o file2.o file1.o
Interface et extensiondeOpen Research Compiler – p.7
file2.cxx C++ front−end file3.f F90 front−end WHIRL dumper C front−end file1.c file1.o file2.o file3.o lib1.a Linker lib2.so
Interface et extensiondeOpen Research Compiler – p.7
file2.cxx C++ front−end file3.f F90 front−end WHIRL dumper C front−end file1.c file1.o file2.o file3.o lib1.a Linker Inter Procedural Analysis (IPA) lib2.so
Interface et extensiondeOpen Research Compiler – p.7
file2.cxx C++ front−end file3.f F90 front−end WHIRL dumper C front−end file1.c file1.o file2.o file3.o lib1.a Linker Inter Procedural Optimizations (IPO) Inter Procedural Analysis (IPA) lib2.so
Interface et extensiondeOpen Research Compiler – p.7
file2.cxx C++ front−end file3.f F90 front−end WHIRL dumper C front−end file1.c file1.o file2.o file3.o lib1.a Linker Loop Nest Optimizer (LNO) Inter Procedural Optimizations (IPO) Inter Procedural Analysis (IPA) lib2.so
Interface et extensiondeOpen Research Compiler – p.7
file2.cxx C++ front−end file3.f F90 front−end WHIRL dumper C front−end file1.c file1.o file2.o file3.o lib1.a Linker Loop Nest Optimizer (LNO) Inter Procedural Optimizations (IPO) Inter Procedural Analysis (IPA) Main Optimizer (WOPT) lib2.so
Interface et extensiondeOpen Research Compiler – p.7
file2.cxx C++ front−end file3.f F90 front−end WHIRL dumper C front−end file1.c file1.o file2.o file3.o lib1.a Linker Code Generator (CG) Loop Nest Optimizer (LNO) Inter Procedural Optimizations (IPO) Inter Procedural Analysis (IPA) Main Optimizer (WOPT) lib2.so
Interface et extensiondeOpen Research Compiler – p.7
file2.cxx C++ front−end file3.f F90 front−end WHIRL dumper C front−end file1.c file1.o file2.o file3.o lib1.a Executable file Linker Code Generator (CG) Loop Nest Optimizer (LNO) Inter Procedural Optimizations (IPO) Inter Procedural Analysis (IPA) Main Optimizer (WOPT) lib2.so
Interface et extensiondeOpen Research Compiler – p.7
Interface et extensiondeOpen Research Compiler – p.8
Interface et extensiondeOpen Research Compiler – p.8
Interface et extensiondeOpen Research Compiler – p.9
Interface et extensiondeOpen Research Compiler – p.9
Interface et extensiondeOpen Research Compiler – p.9
Interface et extensiondeOpen Research Compiler – p.9
Interface et extensiondeOpen Research Compiler – p.10
Interface et extensiondeOpen Research Compiler – p.10
Interface et extensiondeOpen Research Compiler – p.10
Interface et extensiondeOpen Research Compiler – p.11
Interface et extensiondeOpen Research Compiler – p.11
Interface et extensiondeOpen Research Compiler – p.11
Interface et extensiondeOpen Research Compiler – p.12
Interface et extensiondeOpen Research Compiler – p.13
c = a + b d = a + b e = a + b
Interface et extensiondeOpen Research Compiler – p.13
executed twice a + b executed twice a + b c = a + b d = a + b e = a + b
Interface et extensiondeOpen Research Compiler – p.13
executed twice a + b executed twice a + b c = a + b d = a + b e = a + b a + b is fully available
Interface et extensiondeOpen Research Compiler – p.13
t1 = a + b d = t1 executed twice a + b executed twice a + b c = a + b d = a + b e = a + b t1 = a + b c = t1 e = t1 a + b is fully available elimination of common subexpression
Interface et extensiondeOpen Research Compiler – p.13
c = a + b e = a + b Expression a + b is partially available
Interface et extensiondeOpen Research Compiler – p.13
c = a + b e = a + b Expression a + b is partially available t1 = a + b e = t1 c = t1 t1 = a + b elimination of partial redundancy
Interface et extensiondeOpen Research Compiler – p.13
IF_COND <BB1, p1> <BB2, p2>
If−conversion
Interface et extensiondeOpen Research Compiler – p.14
IF_COND <BB1, p1> <BB2, p2> eval (BB1) (p1) eval (BB2) (p2) (p1, p2) = eval (IF_COND)
If−conversion
Interface et extensiondeOpen Research Compiler – p.14
Operations Sequential 1 + 2 2 + 2 3 + 6 4 + 2
✁ ✂✄ ☎✆ ✝✞ ✟✠ ✡☛ ☞✌ ✍✎ ✏✑ ✒✓ ✔✕ ✖✗ ✘ ✘✙ ✚ ✚✛ ✜ ✜✢ ✣ ✣✤ ✥ ✥✦ ✧ ✧★ ✩✪ ✫✬ ✭✮Execution Slots 1 + 2 2 + 2 3 + 6 4 + 2 ILP = Instruction Level Parallelism 6 instructions can be executed in parallel on Itanium
Interface et extensiondeOpen Research Compiler – p.14
THEN ELSE IF
Interface et extensiondeOpen Research Compiler – p.14
THEN ELSE IF
Each instruction is predicated. p2 p1 p0 p0 p0 p0 p0 p0 p0 p0 p0 p0 p0 p0 p2 p2 p2 p1 p1 p1 p1
Interface et extensiondeOpen Research Compiler – p.14
p0 p0 p0 p0 p0 p0 p0 Parallel execution
p0
✿ ✿ ✿ ✿ ✿ ✿ ✿ ✿ ✿ ✿ ✿ ✿ ❀ ❀ ❀ ❀ ❀p1 p1 p1 p1 p1 p0 p0 p0 p0 p2 p2 p2 p2
Interface et extensiondeOpen Research Compiler – p.14
B1 p0 p0 Atomic Predicates = {p0}
Interface et extensiondeOpen Research Compiler – p.15
B2 B3 B1 p0 p2 p1 p0 a a p1 p2 Atomic Predicates = {p1, p2}
Interface et extensiondeOpen Research Compiler – p.15
B5 B2 B3 B1 p0 p2 p1 p3 p0 a a p1 p2 p3 p4 b b p4 Atomic Predicates = {p3, p4, p2}
Interface et extensiondeOpen Research Compiler – p.15
B6 B5 B2 B3 B1 p0 p2 p1 p3 p6 p0 a a p1 p2 p3 p4 p5 p6 c c b b Atomic Predicates = {p3, p4, p5, p6} p5 p4
Interface et extensiondeOpen Research Compiler – p.15
B6 B4 B5 B2 B3 B1 p0 p2 p1 p3 p7 p6 p0 a a e p1 p2 p7 d p3 p4 p5 p6 c c b b d Atomic Predicates = {p3, p4, p5, p6}
Interface et extensiondeOpen Research Compiler – p.15
p0 a a e p1 p2 p7 d f f p3 p4 p5 p6 c c b b d p8 p9 B6 B4 B5 B2 B3 B1 p0 p2 p1 p3 p7 p6 B7 B8 p9 p8 Atomic Predicates = {p3, p4 inter p8, p5 inter p8, p4 inter p9, p5 inter p9, p6}
Interface et extensiondeOpen Research Compiler – p.15
B4 p3 p4 Atomic Predicates = {p3 inter p8, p8 p9
Interface et extensiondeOpen Research Compiler – p.16
B4 p3 p4 p8 p9 Atomic Predicates = {p3 inter p8, p3 inter p9,
Interface et extensiondeOpen Research Compiler – p.16
B4 p3 p4 p8 p9 Atomic Predicates = {p3 inter p8, p3 inter p9, p4 inter p8,
Interface et extensiondeOpen Research Compiler – p.16
B4 p3 p4 p8 p9 Atomic Predicates = {p3 inter p8, p3 inter p9, p4 inter p8, p4 inter p9}
Interface et extensiondeOpen Research Compiler – p.16
anticipability availability
Interface et extensiondeOpen Research Compiler – p.17
Interface et extensiondeOpen Research Compiler – p.18
Interface et extensiondeOpen Research Compiler – p.19
Interface et extensiondeOpen Research Compiler – p.20
Interface et extensiondeOpen Research Compiler – p.21
Interface et extensiondeOpen Research Compiler – p.21
“state of the art” compilers
Interface et extensiondeOpen Research Compiler – p.22
Interface et extensiondeOpen Research Compiler – p.22
Interface et extensiondeOpen Research Compiler – p.22