Upload
esug
View
2.884
Download
3
Tags:
Embed Size (px)
DESCRIPTION
Language-side Foreign Function Interfaces with NativeBoost Camillo Bruni, Luc Fabresse, Stéphane Ducasse, Igor Stasenko
Citation preview
Camillo Bruni, Luc Fabresse, Stéphane Ducasse, Igor Stasenko
IWST 2013
Language-side Foreign Function Interfaces
with NativeBoost
IWST 2013 @ Annecy
Outline
1. Context
2. Existing Solutions
3. NativeBoost
4. Speed Comparison of NativeBoost with other FFIs
5. NativeBoost Internals
6. Conclusion & Future Work
2
IWST 2013 @ Annecy
Context
3
CairoOpenGL
LibC
Language
Virtual Machine (VM)
Chipmunk
...
IWST 2013 @ Annecy
Context
4
Language
Virtual Machine (VM)
How to interact with external libraries?
CairoOpenGL
LibC
Chipmunk
...
IWST 2013 @ Annecy
Existing Solutions
Language-side Library
VM Extension
VM Plugin
Foreign Function Interface
VM-level
Language-level
5
IWST 2013 @ Annecy
Existing Solutions
Language-side Library
VM Extension
VM Plugin
Foreign Function Interface
VM-level
Language-level
6
costly
IWST 2013 @ Annecy
Existing Solutions
Language-side Library
VM Extension
VM Plugin
Foreign Function Interface
VM-level
Language-level
7
costly
low-level
IWST 2013 @ Annecy
Existing Solutions
Language-side Library
VM Extension
VM Plugin
Foreign Function Interface
VM-level
Language-level
8
slowfast
costly
low-level
IWST 2013 @ Annecy9
NativeBoost
A language-side and fast
FFI implementation
IWST 2013 @ Annecy10
Language-side
• Extensible
• Easy to use
• no VM code needed
• no low-level code (C wrapper) needed
IWST 2013 @ Annecy11
Fast
Transparent generation of Assembly code
from the language-side
IWST 2013 @ Annecy
NativeBoost Example
12
char* getenv(const char*)
IWST 2013 @ Annecy
NativeBoost Example
13
char* getenv(const char*)
IWST 2013 @ Annecy
NativeBoost Example
14
Regular Smalltalk methodwith one argument
IWST 2013 @ Annecy
NativeBoost Example
15
A pragma indicating that #primitiveNativeCall of #NativeBoost pluginshould be executed when this method is executed
IWST 2013 @ Annecy
NativeBoost Example
16
IWST 2013 @ Annecy
NativeBoost Example
17
types annotation used to generate marshalling code
char* getenv(const char*)
IWST 2013 @ Annecy
NativeBoost Example
18
the value to be passed when calling out
IWST 2013 @ Annecy
NativeBoost Example
19
the external library address in which the function is looked up
IWST 2013 @ Annecy
Speed Comparisons
20
• NativeBoost
• Alien FFI
• C-FFI
• LuaJIT
• Callouts
• Marshalling
• Callbacks
IWST 2013 @ Annecy21
Callout Evaluation
uint clock(void)
Average time calling out
0%
50%
100%
150%
NativeBoost Alien C-FFI LuaJIT
faster
slower
IWST 2013 @ Annecy22
0%
100%
200%
300%
NativeBoost Alien C-FFI LuaJIT
Marshalling int
int abs(int)
IWST 2013 @ Annecy23
0%
100%
200%
300%
400%
NativeBoost Alien C-FFI LuaJIT
Marshalling char*/String
int printf(char*,int,int)
IWST 2013 @ Annecy24
NativeBoost Alien C-FFI LuaJIT
Marshalling char*/String
char* getenv( char* )
100%
300%
1000%
IWST 2013 @ Annecy25
NativeBoost Alien C-FFI LuaJIT
Marshalling char*/String
char* getenv( char* )
100%
300%
1000%
IWST 2013 @ Annecy26
NativeBoost Alien C-FFI LuaJIT
Marshalling structs
100%
400%
1000%
void cairo_matrix_multiply ( cairo_matrix_t *result, cairo_matrix_t *a, cairo_matrix_t *b)
IWST 2013 @ Annecy27
NativeBoost Alien C-FFI LuaJIT
Callbacks Evaluation
30%
100%
void qsort ( void *base, size_t nel, size_t width, int (*compare)(const void*, const void*))
not
su
ppor
ted
IWST 2013 @ Annecy
Insights into NativeBoost Internals
28
NBExample getenv: ‘PATH’
IWST 2013 @ Annecy
Insights into NativeBoost Internals
29
NBExample getenv: ‘PATH’
IWST 2013 @ Annecy
NBExample getenv: ‘PATH’
Insights into NativeBoost Internals
30
Virtual Machine (VM)
NativeBoost Plugin
IWST 2013 @ Annecy
NBExample getenv: ‘PATH’
Insights into NativeBoost Internals
31
Virtual Machine (VM)
NativeBoost Plugin
Fail if no native codeassociated with #getenv:
IWST 2013 @ Annecy
NBExample getenv: ‘PATH’
Insights into NativeBoost Internals
32
Virtual Machine (VM)
NativeBoost Plugin
1. generate native code for marshalling, ...2. associate it with #getenv:3. restart the method execution
IWST 2013 @ Annecy
Virtual Machine (VM)
NativeBoost Plugin
Insights into NativeBoost Internals
33
activate the native code associated with #getenv:
NBExample getenv: ‘PATH’
IWST 2013 @ Annecy
Conclusion
34
• NativeBoost-FFI is:
• Language-side: extensible, high-level code only
• Fast compared to other Smalltalk FFI
• Needs optimizations on Callbacks but that would require strong VM support
IWST 2013 @ Annecy
Future Work
• Improve NativeBoost Callback performance
• Reuse Alien’s VM Callback support?
• Better integration of NativeBoost with the JIT
• Do not leave JIT-mode when activating a NB method
35
Camillo Bruni, Luc Fabresse, Stéphane Ducasse, Igor Stasenko
IWST 2013
Language-side Foreign Function Interfaces
with NativeBoost