dynamic compilation and modification cs 671 april 15, 2008
TRANSCRIPT
![Page 1: Dynamic Compilation and Modification CS 671 April 15, 2008](https://reader035.vdocuments.mx/reader035/viewer/2022062422/56649ed25503460f94be1439/html5/thumbnails/1.jpg)
Dynamic Compilation and Modification
CS 671April 15, 2008
![Page 2: Dynamic Compilation and Modification CS 671 April 15, 2008](https://reader035.vdocuments.mx/reader035/viewer/2022062422/56649ed25503460f94be1439/html5/thumbnails/2.jpg)
2 CS 671 – Spring 2008
So Far… Static Compilation
CompilerHigh-Level
Programming Languages
Machine Code
Error Messages
High-Level Programming Languages
Machine Code
FrontEnd
BackEnd
Error Messages
CompilerDigging Deeper…
![Page 3: Dynamic Compilation and Modification CS 671 April 15, 2008](https://reader035.vdocuments.mx/reader035/viewer/2022062422/56649ed25503460f94be1439/html5/thumbnails/3.jpg)
3 CS 671 – Spring 2008
Alternatives to the Traditional Model
Static Compilation
All work is done “ahead-of-time”
Just-in-Time Compilation
Postpone some compilation tasks
Multiversioning and Dynamic Feedback
Include multiple options in binary
Dynamic Binary Optimization
Traditional compilation model
Executables can adapt
![Page 4: Dynamic Compilation and Modification CS 671 April 15, 2008](https://reader035.vdocuments.mx/reader035/viewer/2022062422/56649ed25503460f94be1439/html5/thumbnails/4.jpg)
4 CS 671 – Spring 2008
Move More of Compilation to Run Time
Execution environment may be quite different from the assumptions made at compile time
•Dynamically loaded libraries
•User inputs
•Hardware configurations
•Dependence on software vendors
•Apps on tap
•Incorporate profiling
![Page 5: Dynamic Compilation and Modification CS 671 April 15, 2008](https://reader035.vdocuments.mx/reader035/viewer/2022062422/56649ed25503460f94be1439/html5/thumbnails/5.jpg)
5 CS 671 – Spring 2008
Just-in-Time Compilation
High-Level Programming Languages
Machine Code
FrontEnd
BackEnd
Error Messages
Ship bytecodes (think IR) rather than binaries• Binaries execute on machines• Bytecodes execute on virtual machines
Compiler
![Page 6: Dynamic Compilation and Modification CS 671 April 15, 2008](https://reader035.vdocuments.mx/reader035/viewer/2022062422/56649ed25503460f94be1439/html5/thumbnails/6.jpg)
6 CS 671 – Spring 2008
Just-in-Time Compilation
javac the Java bytecode compiler
java the Java virtual machine
Bytecode: machine independent, portable
Step One: “Compile” Circle.java% javac Circle.java -> Circle.class
Step Two: “Execute”% java Circle.class
javacsource bytecode
javabytecode execute
![Page 7: Dynamic Compilation and Modification CS 671 April 15, 2008](https://reader035.vdocuments.mx/reader035/viewer/2022062422/56649ed25503460f94be1439/html5/thumbnails/7.jpg)
7 CS 671 – Spring 2008
Each frame contains local variables and an operand stack
Instruction set• Load/store between locals and operand stack• Arithmetic on operand stack• Object creation and method invocation• Array/field accesses• Control transfers and exceptions
The type of the operand stack at each program point is known at compile time
Bytecodes
![Page 8: Dynamic Compilation and Modification CS 671 April 15, 2008](https://reader035.vdocuments.mx/reader035/viewer/2022062422/56649ed25503460f94be1439/html5/thumbnails/8.jpg)
8 CS 671 – Spring 2008
Example:
iconst 2iload aiload biaddimulistore c
Computes: c := 2 * (a + b)
Bytecodes (cont.)
![Page 9: Dynamic Compilation and Modification CS 671 April 15, 2008](https://reader035.vdocuments.mx/reader035/viewer/2022062422/56649ed25503460f94be1439/html5/thumbnails/9.jpg)
9 CS 671 – Spring 2008
Example:
iconst 2iload aiload biaddimulistore c
Computes: c := 2 * (a + b)
a
b
c
42
7
0
Bytecodes (cont.)
![Page 10: Dynamic Compilation and Modification CS 671 April 15, 2008](https://reader035.vdocuments.mx/reader035/viewer/2022062422/56649ed25503460f94be1439/html5/thumbnails/10.jpg)
10 CS 671 – Spring 2008
Example:
iconst 2iload aiload biaddimulistore c
Computes: c := 2 * (a + b)
a
b
c
42
7
0
2
Bytecodes (cont.)
![Page 11: Dynamic Compilation and Modification CS 671 April 15, 2008](https://reader035.vdocuments.mx/reader035/viewer/2022062422/56649ed25503460f94be1439/html5/thumbnails/11.jpg)
11 CS 671 – Spring 2008
Example:
iconst 2iload aiload biaddimulistore c
Computes: c := 2 * (a + b)
a
b
c
42
7
0 42
2
Bytecodes (cont.)
![Page 12: Dynamic Compilation and Modification CS 671 April 15, 2008](https://reader035.vdocuments.mx/reader035/viewer/2022062422/56649ed25503460f94be1439/html5/thumbnails/12.jpg)
12 CS 671 – Spring 2008
Example:
iconst 2iload aiload biaddimulistore c
Computes: c := 2 * (a + b)
a
b
c
42
7
0
7
42
2
Bytecodes (cont.)
![Page 13: Dynamic Compilation and Modification CS 671 April 15, 2008](https://reader035.vdocuments.mx/reader035/viewer/2022062422/56649ed25503460f94be1439/html5/thumbnails/13.jpg)
13 CS 671 – Spring 2008
Example:
iconst 2iload aiload biaddimulistore c
Computes: c := 2 * (a + b)
a
b
c
42
7
0 49
2
Bytecodes (cont.)
![Page 14: Dynamic Compilation and Modification CS 671 April 15, 2008](https://reader035.vdocuments.mx/reader035/viewer/2022062422/56649ed25503460f94be1439/html5/thumbnails/14.jpg)
14 CS 671 – Spring 2008
Example:
iconst 2iload aiload biaddimulistore c
Computes: c := 2 * (a + b)
a
b
c
42
7
0
98
Bytecodes (cont.)
![Page 15: Dynamic Compilation and Modification CS 671 April 15, 2008](https://reader035.vdocuments.mx/reader035/viewer/2022062422/56649ed25503460f94be1439/html5/thumbnails/15.jpg)
15 CS 671 – Spring 2008
Example:
iconst 2iload aiload biaddimulistore c
Computes: c := 2 * (a + b)
a
b
c
42
7
98
Bytecodes (cont.)
![Page 16: Dynamic Compilation and Modification CS 671 April 15, 2008](https://reader035.vdocuments.mx/reader035/viewer/2022062422/56649ed25503460f94be1439/html5/thumbnails/16.jpg)
16 CS 671 – Spring 2008
Executing Bytecode
java Circle.class - What happens?
Interpreting
• map each bytecode to a machine code sequence,
• for each bytecode, execute the sequence
Translation to machine code
• map all the bytecodes to machine code (or a higher level intermediate representation)
• massage them (e.g., remove redundancies)
• execute the machine code
![Page 17: Dynamic Compilation and Modification CS 671 April 15, 2008](https://reader035.vdocuments.mx/reader035/viewer/2022062422/56649ed25503460f94be1439/html5/thumbnails/17.jpg)
17 CS 671 – Spring 2008
Hotspot Compilation
A hybrid approach
• Initially interpret
• Find the “hot” (frequently executed) methods
• Translate only hot methods to machine code
![Page 18: Dynamic Compilation and Modification CS 671 April 15, 2008](https://reader035.vdocuments.mx/reader035/viewer/2022062422/56649ed25503460f94be1439/html5/thumbnails/18.jpg)
18 CS 671 – Spring 2008
The Virtual Machine
An extreme version of an old idea
Previously:
Now:
MyApp
x86
P III P IV
MyApp
alpha
21164 21264
MyApp
pa-risc
PA-8000 PA-7000
MyApp
JVM
P III P IV 21164 21264 PA-8000 PA-7000VM VM VM VM VM VM
![Page 19: Dynamic Compilation and Modification CS 671 April 15, 2008](https://reader035.vdocuments.mx/reader035/viewer/2022062422/56649ed25503460f94be1439/html5/thumbnails/19.jpg)
19 CS 671 – Spring 2008
Compile-Time Multiversioning
• Multiple versions of code sections are generated at compile-time
• Most appropriate variant is selected at runtime based upon characteristics of the input data and/or machine environment
• Multiple variants can cause code explosion
– Thus typically only a few versions are created
![Page 20: Dynamic Compilation and Modification CS 671 April 15, 2008](https://reader035.vdocuments.mx/reader035/viewer/2022062422/56649ed25503460f94be1439/html5/thumbnails/20.jpg)
20 CS 671 – Spring 2008
Another Alternative
Modify a traditional application as it executes
Why?• Don’t have source code!
????binary modified binary
![Page 21: Dynamic Compilation and Modification CS 671 April 15, 2008](https://reader035.vdocuments.mx/reader035/viewer/2022062422/56649ed25503460f94be1439/html5/thumbnails/21.jpg)
21 CS 671 – Spring 2008
A Dynamic Optimization System?
Transforms* an application at run time
* {translate, optimize, extend}
Application
Transform
CodeCache
Execute
Profile
![Page 22: Dynamic Compilation and Modification CS 671 April 15, 2008](https://reader035.vdocuments.mx/reader035/viewer/2022062422/56649ed25503460f94be1439/html5/thumbnails/22.jpg)
22 CS 671 – Spring 2008
Classification
Dynamic binary optimizers (x86 x86opt)• Complement the static compiler
– User inputs, phases, DLLs, hardware features– Examples: DynamoRIO, Mojo, Strata
Dynamic translators (x86 PPC)• Convert applications to run on a new architecture
– Examples: Rosetta, Transmeta CMS, DAISY
Binary instrumentation (x86 x86instr)• Inspect and/or add features to existing
applications– Examples: Pin, Valgrind
JITs + adaptive systems (Java bytecode x86)
![Page 23: Dynamic Compilation and Modification CS 671 April 15, 2008](https://reader035.vdocuments.mx/reader035/viewer/2022062422/56649ed25503460f94be1439/html5/thumbnails/23.jpg)
23 CS 671 – Spring 2008
Dynamic Instrumentation Demo
Pin• Four architectures – IA32, EM64T, IPF, XScale• Four OSes – Linux, FreeBSD, MacOS, Windows
![Page 24: Dynamic Compilation and Modification CS 671 April 15, 2008](https://reader035.vdocuments.mx/reader035/viewer/2022062422/56649ed25503460f94be1439/html5/thumbnails/24.jpg)
24 CS 671 – Spring 2008
What is Instrumentation?
A technique that inserts extra code into a program to collect runtime information
Instrumentation approaches:
• Source instrumentation:
– Instrument source programs
• Binary instrumentation:– Instrument executables directly
![Page 25: Dynamic Compilation and Modification CS 671 April 15, 2008](https://reader035.vdocuments.mx/reader035/viewer/2022062422/56649ed25503460f94be1439/html5/thumbnails/25.jpg)
25 CS 671 – Spring 2008
No need to recompile or relink Discover code at runtime Handle dynamically-generated code Attach to running processes
Why use Dynamic Instrumentation?
![Page 26: Dynamic Compilation and Modification CS 671 April 15, 2008](https://reader035.vdocuments.mx/reader035/viewer/2022062422/56649ed25503460f94be1439/html5/thumbnails/26.jpg)
26 CS 671 – Spring 2008
How is Instrumentation used in PL/Compiler Research?
Program analysis– Code coverage– Call-graph generation– Memory-leak detection– Instruction profiling
Thread analysis– Thread profiling– Race detection
![Page 27: Dynamic Compilation and Modification CS 671 April 15, 2008](https://reader035.vdocuments.mx/reader035/viewer/2022062422/56649ed25503460f94be1439/html5/thumbnails/27.jpg)
27 CS 671 – Spring 2008
•Trace Generation
•Branch Predictor and Cache Modeling
•Fault Tolerance Studies
•Emulating Speculation
•Emulating New Instructions
How is Instrumentation used in Computer Architecture Research?
![Page 28: Dynamic Compilation and Modification CS 671 April 15, 2008](https://reader035.vdocuments.mx/reader035/viewer/2022062422/56649ed25503460f94be1439/html5/thumbnails/28.jpg)
28 CS 671 – Spring 2008
Pin Features
Dynamic Instrumentation:• Do not need source code, recompilation, post-linking
Programmable Instrumentation:• Provides rich APIs to write in C/C++ your own instrumentation
tools (called Pintools)
Multiplatform:• Supports x86, x86-64, Itanium, Xscale• Supports Linux, Windows, MacOS
Robust:• Instruments real-life applications: Database, web browsers, …• Instruments multithreaded applications• Supports signals
Efficient:• Applies compiler optimizations on instrumentation code
![Page 29: Dynamic Compilation and Modification CS 671 April 15, 2008](https://reader035.vdocuments.mx/reader035/viewer/2022062422/56649ed25503460f94be1439/html5/thumbnails/29.jpg)
29 CS 671 – Spring 2008
Using Pin
Launch and instrument an application $ pin –t pintool –- application
Instrumentation engine (provided in the kit)
Instrumentation tool
(write your own, or use one provided in the kit)
Attach to and instrument an application $ pin –t pintool –pid 1234
![Page 30: Dynamic Compilation and Modification CS 671 April 15, 2008](https://reader035.vdocuments.mx/reader035/viewer/2022062422/56649ed25503460f94be1439/html5/thumbnails/30.jpg)
30 CS 671 – Spring 2008
Pin Instrumentation APIs
Basic APIs are architecture independent:• Provide common functionalities like determining:
– Control-flow changes– Memory accesses
Architecture-specific APIs• e.g., Info about segmentation registers on IA32
Call-based APIs:• Instrumentation routines• Analysis routines
![Page 31: Dynamic Compilation and Modification CS 671 April 15, 2008](https://reader035.vdocuments.mx/reader035/viewer/2022062422/56649ed25503460f94be1439/html5/thumbnails/31.jpg)
31 CS 671 – Spring 2008
Instrumentation vs. Analysis
Instrumentation routines define where instrumentation is inserted• e.g., before instruction Occurs first time an instruction is executed
Analysis routines define what to do when instrumentation is activated• e.g., increment counter Occurs every time an instruction is executed
![Page 32: Dynamic Compilation and Modification CS 671 April 15, 2008](https://reader035.vdocuments.mx/reader035/viewer/2022062422/56649ed25503460f94be1439/html5/thumbnails/32.jpg)
32 CS 671 – Spring 2008
Pintool 1: Instruction Count
sub $0xff, %edx
cmp %esi, %edx
jle <L1>
mov $0x1, %edi
add $0x10, %eax
counter++;
counter++;
counter++;
counter++;
counter++;
![Page 33: Dynamic Compilation and Modification CS 671 April 15, 2008](https://reader035.vdocuments.mx/reader035/viewer/2022062422/56649ed25503460f94be1439/html5/thumbnails/33.jpg)
33 CS 671 – Spring 2008
Pintool 1: Instruction Count Output
$ /bin/ls Makefile imageload.out itrace proccount imageload inscount0 atrace itrace.out
$ pin -t inscount0.so -- /bin/ls Makefile imageload.out itrace proccount imageload inscount0 atrace itrace.out
Count 422838
![Page 34: Dynamic Compilation and Modification CS 671 April 15, 2008](https://reader035.vdocuments.mx/reader035/viewer/2022062422/56649ed25503460f94be1439/html5/thumbnails/34.jpg)
34 CS 671 – Spring 2008
ManualExamples/inscount0.cpp
instrumentation routine
analysis routine
#include <iostream>#include "pin.h"
UINT64 icount = 0;
void docount() { icount++; } void Instruction(INS ins, void *v) { INS_InsertCall(ins, IPOINT_BEFORE, (AFUNPTR)docount, IARG_END);}
void Fini(INT32 code, void *v) { std::cerr << "Count " << icount << endl; }
int main(int argc, char * argv[]){ PIN_Init(argc, argv); INS_AddInstrumentFunction(Instruction, 0); PIN_AddFiniFunction(Fini, 0); PIN_StartProgram(); return 0;}
![Page 35: Dynamic Compilation and Modification CS 671 April 15, 2008](https://reader035.vdocuments.mx/reader035/viewer/2022062422/56649ed25503460f94be1439/html5/thumbnails/35.jpg)
35 CS 671 – Spring 2008
Pintool 2: Instruction Trace
sub $0xff, %edx
cmp %esi, %edx
jle <L1>
mov $0x1, %edi
add $0x10, %eax
Print(ip);
Print(ip);
Print(ip);
Print(ip);
Print(ip);
Need to pass ip argument to the analysis routine (printip())
![Page 36: Dynamic Compilation and Modification CS 671 April 15, 2008](https://reader035.vdocuments.mx/reader035/viewer/2022062422/56649ed25503460f94be1439/html5/thumbnails/36.jpg)
36 CS 671 – Spring 2008
Pintool 2: Instruction Trace Output
$ pin -t itrace.so -- /bin/ls Makefile imageload.out itrace proccount imageload inscount0 atrace itrace.out
$ head -4 itrace.out 0x40001e90 0x40001e91 0x40001ee4 0x40001ee5
![Page 37: Dynamic Compilation and Modification CS 671 April 15, 2008](https://reader035.vdocuments.mx/reader035/viewer/2022062422/56649ed25503460f94be1439/html5/thumbnails/37.jpg)
37 CS 671 – Spring 2008
ManualExamples/itrace.cpp
argument to analysis routine
analysis routineinstrumentation routine
#include <stdio.h>#include "pin.H"FILE * trace;void printip(void *ip) { fprintf(trace, "%p\n", ip); }
void Instruction(INS ins, void *v) { INS_InsertCall(ins, IPOINT_BEFORE, (AFUNPTR)printip, IARG_INST_PTR, IARG_END);}void Fini(INT32 code, void *v) { fclose(trace); }int main(int argc, char * argv[]) { trace = fopen("itrace.out", "w"); PIN_Init(argc, argv); INS_AddInstrumentFunction(Instruction, 0);
PIN_AddFiniFunction(Fini, 0); PIN_StartProgram(); return 0;}
![Page 38: Dynamic Compilation and Modification CS 671 April 15, 2008](https://reader035.vdocuments.mx/reader035/viewer/2022062422/56649ed25503460f94be1439/html5/thumbnails/38.jpg)
38 CS 671 – Spring 2008
Examples of Arguments to Analysis Routine
IARG_INST_PTR• Instruction pointer (program counter) value
IARG_UINT32 <value>• An integer value
IARG_REG_VALUE <register name>• Value of the register specified
IARG_BRANCH_TARGET_ADDR• Target address of the branch instrumented
IARG_MEMORY_READ_EA• Effective address of a memory read
And many more … (refer to the Pin manual for details)
![Page 39: Dynamic Compilation and Modification CS 671 April 15, 2008](https://reader035.vdocuments.mx/reader035/viewer/2022062422/56649ed25503460f94be1439/html5/thumbnails/39.jpg)
39 CS 671 – Spring 2008
Instrumentation Points
Instrument points relative to an instruction:
• Before (IPOINT_BEFORE)• After:
– Fall-through edge (IPOINT_AFTER)– Taken edge (IPOINT_TAKEN_BRANCH)
cmp %esi, %edx
jle <L1>
mov $0x1, %edi
<L1>: mov $0x8,%edi
count()
count()
count()
![Page 40: Dynamic Compilation and Modification CS 671 April 15, 2008](https://reader035.vdocuments.mx/reader035/viewer/2022062422/56649ed25503460f94be1439/html5/thumbnails/40.jpg)
40 CS 671 – Spring 2008
• Instruction• Basic block
– A sequence of instructions terminated at a control-flow changing instruction
– Single entry, single exit• Trace
– A sequence of basic blocks terminated at an unconditional control-flow changing instruction
– Single entry, multiple exits
Instrumentation Granularity
sub $0xff, %edxcmp %esi, %edxjle <L1>
mov $0x1, %ediadd $0x10, %eaxjmp <L2>1 Trace, 2 BBs, 6
insts
Instrumentation can be done at three different granularities:
![Page 41: Dynamic Compilation and Modification CS 671 April 15, 2008](https://reader035.vdocuments.mx/reader035/viewer/2022062422/56649ed25503460f94be1439/html5/thumbnails/41.jpg)
41 CS 671 – Spring 2008
Pintool 3: Faster Instruction Count
sub $0xff, %edx
cmp %esi, %edx
jle <L1>
mov $0x1, %edi
add $0x10, %eax
counter += 3
counter += 2basic blocks (bbl)
![Page 42: Dynamic Compilation and Modification CS 671 April 15, 2008](https://reader035.vdocuments.mx/reader035/viewer/2022062422/56649ed25503460f94be1439/html5/thumbnails/42.jpg)
42 CS 671 – Spring 2008
Modifying Program Behavior
Pin allows you not only to observe but also change program behavior
Ways to change program behavior:
• Add/delete instructions
• Change register values
• Change memory values
• Change control flow
![Page 43: Dynamic Compilation and Modification CS 671 April 15, 2008](https://reader035.vdocuments.mx/reader035/viewer/2022062422/56649ed25503460f94be1439/html5/thumbnails/43.jpg)
Pin Internals
![Page 44: Dynamic Compilation and Modification CS 671 April 15, 2008](https://reader035.vdocuments.mx/reader035/viewer/2022062422/56649ed25503460f94be1439/html5/thumbnails/44.jpg)
44 CS 671 – Spring 2008
Pin’s Software Architecture
JIT Compiler
Emulation Unit
Virtual Machine (VM)
Code
Cache
Instrumentation APIs
Ap
pli
cati
on
Operating SystemHardware
PinPintool
Address space
![Page 45: Dynamic Compilation and Modification CS 671 April 15, 2008](https://reader035.vdocuments.mx/reader035/viewer/2022062422/56649ed25503460f94be1439/html5/thumbnails/45.jpg)
45 CS 671 – Spring 2008
Dynamic Instrumentation
Original codeCode cache
Pin fetches trace starting block 1 and start instrumentation
7’
2’
1’
Pin
2 3
1
7
45
6
Exits point back to Pin
![Page 46: Dynamic Compilation and Modification CS 671 April 15, 2008](https://reader035.vdocuments.mx/reader035/viewer/2022062422/56649ed25503460f94be1439/html5/thumbnails/46.jpg)
46 CS 671 – Spring 2008
Dynamic Instrumentation
Original codeCode cache
Pin transfers control intocode cache (block 1)
2 3
1
7
45
67’
2’
1’
Pin
![Page 47: Dynamic Compilation and Modification CS 671 April 15, 2008](https://reader035.vdocuments.mx/reader035/viewer/2022062422/56649ed25503460f94be1439/html5/thumbnails/47.jpg)
47 CS 671 – Spring 2008
Dynamic Instrumentation
Original codeCode cache
7’
2’
1’
PinPin fetches and instrument a new trace
6’
5’
3’trace linking
2 3
1
7
45
6
![Page 48: Dynamic Compilation and Modification CS 671 April 15, 2008](https://reader035.vdocuments.mx/reader035/viewer/2022062422/56649ed25503460f94be1439/html5/thumbnails/48.jpg)
48 CS 671 – Spring 2008
Implementation Challenges
• Linking– Straightforward for direct branches– Tricky for indirects, invalidations
• Re-allocating registers
• Maintaining transparency
• Self-modifying code
• Supporting MT applications…
![Page 49: Dynamic Compilation and Modification CS 671 April 15, 2008](https://reader035.vdocuments.mx/reader035/viewer/2022062422/56649ed25503460f94be1439/html5/thumbnails/49.jpg)
49 CS 671 – Spring 2008
Thread-safe accesses Pin, Pintool, and App– Pin: One thread in the VM at a time– Pintool: Locks, ThreadID, event notification– App: Thread-local spill area
Providing pthreads functions to instrumentation tools
Pin’s Multithreading Support
Pintool
Application
System’s libpthread signal handlersignal handler
set up signal
handlers
Pin’s mini-libpthread
Redirect all other pthreads function calls to application’s libpthread
![Page 50: Dynamic Compilation and Modification CS 671 April 15, 2008](https://reader035.vdocuments.mx/reader035/viewer/2022062422/56649ed25503460f94be1439/html5/thumbnails/50.jpg)
50 CS 671 – Spring 2008
Pin Overhead
SPEC Integer 2006
100%
120%
140%
160%
180%
200%
perlb
ench
sjen
g
xala
ncbm
k
gobm
k
gcc
h264
ref
omne
tpp
bzip
2
libqu
antu
m mcf
asta
r
hmm
er
Rel
ativ
e to
Nat
ive
![Page 51: Dynamic Compilation and Modification CS 671 April 15, 2008](https://reader035.vdocuments.mx/reader035/viewer/2022062422/56649ed25503460f94be1439/html5/thumbnails/51.jpg)
51 CS 671 – Spring 2008
Adding User Instrumentation
100%
200%
300%
400%
500%
600%
700%
800%
perlb
ench
sjen
g
xala
ncbm
k
gobm
k
gcc
h264
ref
omne
tpp
bzip
2
libqu
antu
m mcf
asta
r
hmm
er
Rel
ativ
e to
Nat
ive Pin
Pin+icount
![Page 52: Dynamic Compilation and Modification CS 671 April 15, 2008](https://reader035.vdocuments.mx/reader035/viewer/2022062422/56649ed25503460f94be1439/html5/thumbnails/52.jpg)
52 CS 671 – Spring 2008
Dynamic Optimization Summary
Complement the static compiler• Shouldn’t compete with static compilers• Observe execution pattern• Optimize frequently executed code
– Optimization overhead could degrade performance
Exploits opportunities• Arise only at runtime
– DLLs– Runtime constants– Hardware features, user patterns, etc.
• Too expensive to fully exploit statically– Path-sensitive optimizations