smalltalk implementation: optimization...
TRANSCRIPT
![Page 1: Smalltalk Implementation: Optimization Techniquesweb.cecs.pdx.edu/~harry/SmalltalkImpl-Oct2009/ST-impl-3.pdf · Smalltalk Implementation Harry Porter, October 2009 11 “Just in Time”](https://reader033.vdocument.in/reader033/viewer/2022051915/60066566b0c2b56be2502616/html5/thumbnails/1.jpg)
Smalltalk Implementation
Harry Porter, October 2009
Smalltalk Implementation:�Optimization Techniques
Prof. Harry Porter Portland State University
1
![Page 2: Smalltalk Implementation: Optimization Techniquesweb.cecs.pdx.edu/~harry/SmalltalkImpl-Oct2009/ST-impl-3.pdf · Smalltalk Implementation Harry Porter, October 2009 11 “Just in Time”](https://reader033.vdocument.in/reader033/viewer/2022051915/60066566b0c2b56be2502616/html5/thumbnails/2.jpg)
Smalltalk Implementation
Harry Porter, October 2009
Optimization Ideas • Just-In-Time (JIT) compiling�
When a method is first invoked, compile it into native code.
• Caching the Method Dictionary Method Look-up will be speeded up.
• Inline Method Sending Will turn many SENDs into native CALL instructions
• Use the hardware calling stack MethodContexts activation records allocated on a stack
• Code the VM directly in Smalltalk Automatic translation into “C”
2
![Page 3: Smalltalk Implementation: Optimization Techniquesweb.cecs.pdx.edu/~harry/SmalltalkImpl-Oct2009/ST-impl-3.pdf · Smalltalk Implementation Harry Porter, October 2009 11 “Just in Time”](https://reader033.vdocument.in/reader033/viewer/2022051915/60066566b0c2b56be2502616/html5/thumbnails/3.jpg)
Smalltalk Implementation
Harry Porter, October 2009
Misc Points Porting the Smalltalk Interpreter The virtual machine is implemented in Smalltalk! Using a subset of Smalltalk, called “Slang”
The image also includes a translator / compiler Slang “C”
Steps to porting: • Produce automatically generated interpreter in “C” • Hand-code the machine-dependent parts in “C” • Compile • Use any existing image
3
![Page 4: Smalltalk Implementation: Optimization Techniquesweb.cecs.pdx.edu/~harry/SmalltalkImpl-Oct2009/ST-impl-3.pdf · Smalltalk Implementation Harry Porter, October 2009 11 “Just in Time”](https://reader033.vdocument.in/reader033/viewer/2022051915/60066566b0c2b56be2502616/html5/thumbnails/4.jpg)
Smalltalk Implementation
Harry Porter, October 2009
Misc Points Porting Images Each VM executes the same bytecodes. Any image can be executed on by any VM.
EXAMPLE: An image produced on MAC OS X can be executed on Windows.
Porting Code Fragments
4
![Page 5: Smalltalk Implementation: Optimization Techniquesweb.cecs.pdx.edu/~harry/SmalltalkImpl-Oct2009/ST-impl-3.pdf · Smalltalk Implementation Harry Porter, October 2009 11 “Just in Time”](https://reader033.vdocument.in/reader033/viewer/2022051915/60066566b0c2b56be2502616/html5/thumbnails/5.jpg)
Smalltalk Implementation
Harry Porter, October 2009
Misc Points Porting Images Each VM executes the same bytecodes. Any image can be executed on by any VM.
EXAMPLE: An image produced on MAC OS X can be executed on Windows.
Porting Code Fragments Also, code fragments can be filed out … and filed in to another image Will it work? The Smalltalk language is uniform. What pre-existing classes does the code use?
5
![Page 6: Smalltalk Implementation: Optimization Techniquesweb.cecs.pdx.edu/~harry/SmalltalkImpl-Oct2009/ST-impl-3.pdf · Smalltalk Implementation Harry Porter, October 2009 11 “Just in Time”](https://reader033.vdocument.in/reader033/viewer/2022051915/60066566b0c2b56be2502616/html5/thumbnails/6.jpg)
Smalltalk Implementation
Harry Porter, October 2009
Misc Points Hash Values Some classes rely on “hash values”. Dictionary, Set, etc.
Every object must be capable of providing its hash value: i := x hashValue.
6
![Page 7: Smalltalk Implementation: Optimization Techniquesweb.cecs.pdx.edu/~harry/SmalltalkImpl-Oct2009/ST-impl-3.pdf · Smalltalk Implementation Harry Porter, October 2009 11 “Just in Time”](https://reader033.vdocument.in/reader033/viewer/2022051915/60066566b0c2b56be2502616/html5/thumbnails/7.jpg)
Smalltalk Implementation
Harry Porter, October 2009
Misc Points Hash Values Some classes rely on “hash values”. Dictionary, Set, etc.
Every object must be capable of providing its hash value: i := x hashValue.
Two objects can contain exactly the same values. They differ only in where they are in memory …and GC will move objects around
7
![Page 8: Smalltalk Implementation: Optimization Techniquesweb.cecs.pdx.edu/~harry/SmalltalkImpl-Oct2009/ST-impl-3.pdf · Smalltalk Implementation Harry Porter, October 2009 11 “Just in Time”](https://reader033.vdocument.in/reader033/viewer/2022051915/60066566b0c2b56be2502616/html5/thumbnails/8.jpg)
Smalltalk Implementation
Harry Porter, October 2009
Misc Points Hash Values Some classes rely on “hash values”. Dictionary, Set, etc.
Every object must be capable of providing its hash value: i := x hashValue.
Two objects can contain exactly the same values. They differ only in where they are in memory …and GC will move objects around
Need special VM support for hash values! • Each object contains a hash value. • 12 bits • Stored in it header • Initialized when the object is created
8
![Page 9: Smalltalk Implementation: Optimization Techniquesweb.cecs.pdx.edu/~harry/SmalltalkImpl-Oct2009/ST-impl-3.pdf · Smalltalk Implementation Harry Porter, October 2009 11 “Just in Time”](https://reader033.vdocument.in/reader033/viewer/2022051915/60066566b0c2b56be2502616/html5/thumbnails/9.jpg)
Smalltalk Implementation
Harry Porter, October 2009 9
Optimizations to the Interpreter
Virtual Machine Does not match underlying hardware well Examples: OOP/SmallInteger Tagging Registers versus Stacks in Context objects
Bytecodes vs. Machine Instructions The bytecodes are interpreted Fetch-decode-execute done at two levels. Difficult to optimize bytecodes Bytecodes are complex operations Corresponding to several machine level instructions
![Page 10: Smalltalk Implementation: Optimization Techniquesweb.cecs.pdx.edu/~harry/SmalltalkImpl-Oct2009/ST-impl-3.pdf · Smalltalk Implementation Harry Porter, October 2009 11 “Just in Time”](https://reader033.vdocument.in/reader033/viewer/2022051915/60066566b0c2b56be2502616/html5/thumbnails/10.jpg)
Smalltalk Implementation
Harry Porter, October 2009 10
“Just in Time” Compiling
Translate bytecodes into native machine language … and execute them directly
Do it “on the fly” … on individual methods Source bytecodes machine instructions
When the method is first invoked… • Call the JIT compiler • Translate bytecodes to native instructions • Save the native code for next time.
![Page 11: Smalltalk Implementation: Optimization Techniquesweb.cecs.pdx.edu/~harry/SmalltalkImpl-Oct2009/ST-impl-3.pdf · Smalltalk Implementation Harry Porter, October 2009 11 “Just in Time”](https://reader033.vdocument.in/reader033/viewer/2022051915/60066566b0c2b56be2502616/html5/thumbnails/11.jpg)
Smalltalk Implementation
Harry Porter, October 2009 11
“Just in Time” Compiling
Benefits: • Optional Compatible with existing system • Still have bytecodes (for the debugging tools) • Can perform many optimizations at the native code level • Can do it just to frequently invoked methods • Running out of memory? Throw away some of the compiled methods
![Page 12: Smalltalk Implementation: Optimization Techniquesweb.cecs.pdx.edu/~harry/SmalltalkImpl-Oct2009/ST-impl-3.pdf · Smalltalk Implementation Harry Porter, October 2009 11 “Just in Time”](https://reader033.vdocument.in/reader033/viewer/2022051915/60066566b0c2b56be2502616/html5/thumbnails/12.jpg)
Smalltalk Implementation
Harry Porter, October 2009 12
“Just in Time” Compiling Problem: Activation records are user-visible MethodContexts, BlockContexts Activation record contains a pointer to the current bytecode “instructionPointer” = “Program Counter (PC)” Used by the debugging tools!
Solution:
![Page 13: Smalltalk Implementation: Optimization Techniquesweb.cecs.pdx.edu/~harry/SmalltalkImpl-Oct2009/ST-impl-3.pdf · Smalltalk Implementation Harry Porter, October 2009 11 “Just in Time”](https://reader033.vdocument.in/reader033/viewer/2022051915/60066566b0c2b56be2502616/html5/thumbnails/13.jpg)
Smalltalk Implementation
Harry Porter, October 2009 13
“Just in Time” Compiling Problem: Activation records are user-visible MethodContexts, BlockContexts Activation record contains a pointer to the current bytecode “instructionPointer” = “Program Counter (PC)” Used by the debugging tools!
Solution: Whenever an activation record becomes user-visible… Map the native code PC back into a bytecode PC
![Page 14: Smalltalk Implementation: Optimization Techniquesweb.cecs.pdx.edu/~harry/SmalltalkImpl-Oct2009/ST-impl-3.pdf · Smalltalk Implementation Harry Porter, October 2009 11 “Just in Time”](https://reader033.vdocument.in/reader033/viewer/2022051915/60066566b0c2b56be2502616/html5/thumbnails/14.jpg)
Smalltalk Implementation
Harry Porter, October 2009 14
Allocating Contexts on the Hardware Stack The hardware supports stacks & procedure CALLs well. “stack frame” = “activation record”
![Page 15: Smalltalk Implementation: Optimization Techniquesweb.cecs.pdx.edu/~harry/SmalltalkImpl-Oct2009/ST-impl-3.pdf · Smalltalk Implementation Harry Porter, October 2009 11 “Just in Time”](https://reader033.vdocument.in/reader033/viewer/2022051915/60066566b0c2b56be2502616/html5/thumbnails/15.jpg)
Smalltalk Implementation
Harry Porter, October 2009 15
Allocating Contexts on the Hardware Stack The hardware supports stacks & procedure CALLs well. “stack frame” = “activation record”
Smalltalk VM… linked list of Context objects Want to use the hardware stack Want to store each Context as a “stack frame”
Contexts are usually allocated in LIFO (stack) order. Not usually accessed as an object
![Page 16: Smalltalk Implementation: Optimization Techniquesweb.cecs.pdx.edu/~harry/SmalltalkImpl-Oct2009/ST-impl-3.pdf · Smalltalk Implementation Harry Porter, October 2009 11 “Just in Time”](https://reader033.vdocument.in/reader033/viewer/2022051915/60066566b0c2b56be2502616/html5/thumbnails/16.jpg)
Smalltalk Implementation
Harry Porter, October 2009 16
Allocating Contexts on the Hardware Stack The hardware supports stacks & procedure CALLs well. “stack frame” = “activation record”
Smalltalk VM… linked list of Context objects Want to use the hardware stack Want to store each Context as a “stack frame”
Contexts are usually allocated in LIFO (stack) order. Not usually accessed as an object Exception: When debugging, the debugger Asks for a pointer to the current context Treats it as (non-stack) data
The Idea:
![Page 17: Smalltalk Implementation: Optimization Techniquesweb.cecs.pdx.edu/~harry/SmalltalkImpl-Oct2009/ST-impl-3.pdf · Smalltalk Implementation Harry Porter, October 2009 11 “Just in Time”](https://reader033.vdocument.in/reader033/viewer/2022051915/60066566b0c2b56be2502616/html5/thumbnails/17.jpg)
Smalltalk Implementation
Harry Porter, October 2009 17
Allocating Contexts on the Hardware Stack The hardware supports stacks & procedure CALLs well. “stack frame” = “activation record”
Smalltalk VM… linked list of Context objects Want to use the hardware stack Want to store each Context as a “stack frame”
Contexts are usually allocated in LIFO (stack) order. Not usually accessed as an object Exception: When debugging, the debugger Asks for a pointer to the current context Treats it as (non-stack) data
The Idea: Store stack frames on hardware stack, not as objects. When a pointer is generated to the current context… Convert the stack frame into a real object.
![Page 18: Smalltalk Implementation: Optimization Techniquesweb.cecs.pdx.edu/~harry/SmalltalkImpl-Oct2009/ST-impl-3.pdf · Smalltalk Implementation Harry Porter, October 2009 11 “Just in Time”](https://reader033.vdocument.in/reader033/viewer/2022051915/60066566b0c2b56be2502616/html5/thumbnails/18.jpg)
Smalltalk Implementation
Harry Porter, October 2009 18
Details Converting a stack frame into a real object…
Allocate a new Context object and fill in its fields Convert the program counter (PC) absolute address byte offset into a CompiledMethod object
Contexts point to other Contexts But other Contexts are still on hardware stack Convert all frames into Objects…? No!
The Technique:
stack-frame
hybrid
MethodContext
![Page 19: Smalltalk Implementation: Optimization Techniquesweb.cecs.pdx.edu/~harry/SmalltalkImpl-Oct2009/ST-impl-3.pdf · Smalltalk Implementation Harry Porter, October 2009 11 “Just in Time”](https://reader033.vdocument.in/reader033/viewer/2022051915/60066566b0c2b56be2502616/html5/thumbnails/19.jpg)
Smalltalk Implementation
Harry Porter, October 2009
Caching the Method Dictionary Method Lookup: Given: • the receiver’s class • the message selector Find: • the right CompiledMethod
The Idea:
![Page 20: Smalltalk Implementation: Optimization Techniquesweb.cecs.pdx.edu/~harry/SmalltalkImpl-Oct2009/ST-impl-3.pdf · Smalltalk Implementation Harry Porter, October 2009 11 “Just in Time”](https://reader033.vdocument.in/reader033/viewer/2022051915/60066566b0c2b56be2502616/html5/thumbnails/20.jpg)
Smalltalk Implementation
Harry Porter, October 2009 20
Caching the Method Dictionary Method Lookup: Given: • the receiver’s class • the message selector Find: • the right CompiledMethod
The Idea: Use a Hash Table Maintained by the VM (it is not an object) Not in the hash table? • Do a full method lookup • Add an entry to the hash table
Rectangle #draw:on:
CompiledMethod
key
![Page 21: Smalltalk Implementation: Optimization Techniquesweb.cecs.pdx.edu/~harry/SmalltalkImpl-Oct2009/ST-impl-3.pdf · Smalltalk Implementation Harry Porter, October 2009 11 “Just in Time”](https://reader033.vdocument.in/reader033/viewer/2022051915/60066566b0c2b56be2502616/html5/thumbnails/21.jpg)
Smalltalk Implementation
Harry Porter, October 2009 21
Inline Method Caching Assume methods are compiled into native code.
Code to send a message: < code to push receiver > < code to push args > CALL MessageSend (arg = selector)
A routine that searches for the proper method/routine
and then calls it. A machine-language CALL instruction
![Page 22: Smalltalk Implementation: Optimization Techniquesweb.cecs.pdx.edu/~harry/SmalltalkImpl-Oct2009/ST-impl-3.pdf · Smalltalk Implementation Harry Porter, October 2009 11 “Just in Time”](https://reader033.vdocument.in/reader033/viewer/2022051915/60066566b0c2b56be2502616/html5/thumbnails/22.jpg)
Smalltalk Implementation
Harry Porter, October 2009 22
Inline Method Caching Assume methods are compiled into native code.
The Idea: • Upon locating the correct routine… Replace the CALL to the “MessageSend” routine … with a CALL straight to the native code routine! • Next time we execute the above code, we CALL the right routine immediately. • Gradually all message sends are replaced with native code CALL instructions.
Code to send a message: < code to push receiver > < code to push args > CALL MessageSend (arg = selector)
![Page 23: Smalltalk Implementation: Optimization Techniquesweb.cecs.pdx.edu/~harry/SmalltalkImpl-Oct2009/ST-impl-3.pdf · Smalltalk Implementation Harry Porter, October 2009 11 “Just in Time”](https://reader033.vdocument.in/reader033/viewer/2022051915/60066566b0c2b56be2502616/html5/thumbnails/23.jpg)
Smalltalk Implementation
Harry Porter, October 2009 23
Inline Method Caching Problem: Dynamic Look-Up The receiver’s class determines which method to invoke. Different class? Different method!
Assumption:
Approach:
![Page 24: Smalltalk Implementation: Optimization Techniquesweb.cecs.pdx.edu/~harry/SmalltalkImpl-Oct2009/ST-impl-3.pdf · Smalltalk Implementation Harry Porter, October 2009 11 “Just in Time”](https://reader033.vdocument.in/reader033/viewer/2022051915/60066566b0c2b56be2502616/html5/thumbnails/24.jpg)
Smalltalk Implementation
Harry Porter, October 2009 24
Inline Method Caching Problem: Dynamic Look-Up The receiver’s class determines which method to invoke. Different class? Different method!
Assumption: Any particular SEND will invoke the same method … almost always!
Approach:
![Page 25: Smalltalk Implementation: Optimization Techniquesweb.cecs.pdx.edu/~harry/SmalltalkImpl-Oct2009/ST-impl-3.pdf · Smalltalk Implementation Harry Porter, October 2009 11 “Just in Time”](https://reader033.vdocument.in/reader033/viewer/2022051915/60066566b0c2b56be2502616/html5/thumbnails/25.jpg)
Smalltalk Implementation
Harry Porter, October 2009 25
Inline Method Caching Problem: Dynamic Look-Up The receiver’s class determines which method to invoke. Different class? Different method!
Assumption: Any particular SEND will invoke the same method … almost always!
Approach: At the beginning of each method: • Check the class of the receiver • If it is what this method expects … continue with this method. • If the receiver has the wrong class… • Perform a full method lookup. • Overwrite the CALL (to jump to the correct method next time) • Jump to the correct method.
![Page 26: Smalltalk Implementation: Optimization Techniquesweb.cecs.pdx.edu/~harry/SmalltalkImpl-Oct2009/ST-impl-3.pdf · Smalltalk Implementation Harry Porter, October 2009 11 “Just in Time”](https://reader033.vdocument.in/reader033/viewer/2022051915/60066566b0c2b56be2502616/html5/thumbnails/26.jpg)
Smalltalk Implementation
Harry Porter, October 2009 26
Effectiveness of Optimizations
space time
Straight interpreter 1.0 1.0
Compiler 2.3 .69
Compiler w/ inline caching 3.4 .62
Compiler w/ peephole 5.0 .56 optimizer
Compiler w/ inline caching 5.0 .51 w/ optimizer