0
Camillo Bruni, Luc Fabresse, Stéphane Ducasse, Igor Stasenko
IWST 2013
Language-side
Foreign Function Interfaces
with Nati...
IWST	
  2013	
  @	
  Annecy
Outline
1. Context
2. Existing Solutions
3. NativeBoost
4. Speed Comparison of NativeBoost wit...
IWST	
  2013	
  @	
  Annecy
Context
3
Cairo
OpenGL
LibC
Language
Virtual Machine (VM)
Chipmunk
...
IWST	
  2013	
  @	
  Annecy
Context
4
Language
Virtual Machine (VM)
How to interact with external libraries?
Cairo
OpenGL
...
IWST	
  2013	
  @	
  Annecy
Existing Solutions
Language-side Library
VM Extension
VM Plugin
Foreign Function Interface
VM-...
IWST	
  2013	
  @	
  Annecy
Existing Solutions
Language-side Library
VM Extension
VM Plugin
Foreign Function Interface
VM-...
IWST	
  2013	
  @	
  Annecy
Existing Solutions
Language-side Library
VM Extension
VM Plugin
Foreign Function Interface
VM-...
IWST	
  2013	
  @	
  Annecy
Existing Solutions
Language-side Library
VM Extension
VM Plugin
Foreign Function Interface
VM-...
IWST	
  2013	
  @	
  Annecy9
NativeBoost
A language-side
and fast
FFI implementation
IWST	
  2013	
  @	
  Annecy10
Language-side
• Extensible
• Easy to use
• noVM code needed
• no low-level code (C wrapper)
...
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 method
with one argument
IWST	
  2013	
  @	
  Annecy
NativeBoost Example
15
A pragma indicating that
#primitiveNativeCall of #NativeBoost plugin
sh...
IWST	
  2013	
  @	
  Annecy
NativeBoost Example
16
IWST	
  2013	
  @	
  Annecy
NativeBoost Example
17
types annotation used
to generate marshalling code
char* getenv(const c...
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
• Cal...
IWST	
  2013	
  @	
  Annecy21
Callout Evaluation
uint clock(void)
Average time
calling out
0%
50%
100%
150%
NativeBoost Al...
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(ch...
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_multipl...
IWST	
  2013	
  @	
  Annecy27
NativeBoost Alien C-FFI LuaJIT
Callbacks Evaluation
30%
100%
void qsort (
void *base,
size_t...
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)
NativeBoo...
IWST	
  2013	
  @	
  Annecy
NBExample getenv: ‘PATH’
Insights into NativeBoost Internals
31
Virtual Machine (VM)
NativeBoo...
IWST	
  2013	
  @	
  Annecy
NBExample getenv: ‘PATH’
Insights into NativeBoost Internals
32
Virtual Machine (VM)
NativeBoo...
IWST	
  2013	
  @	
  Annecy
Virtual Machine (VM)
NativeBoost Plugin
Insights into NativeBoost Internals
33
activate the na...
IWST	
  2013	
  @	
  Annecy
Conclusion
34
• NativeBoost-FFI is:
• Language-side: extensible, high-level code only
• Fast c...
IWST	
  2013	
  @	
  Annecy
Future Work
• Improve NativeBoost Callback performance
• Reuse Alien’sVM Callback support?
• B...
Camillo Bruni, Luc Fabresse, Stéphane Ducasse, Igor Stasenko
IWST 2013
Language-side
Foreign Function Interfaces
with Nati...
Upcoming SlideShare
Loading in...5
×

Language-side Foreign Function Interfaces with NativeBoost

2,891

Published on

Language-side Foreign Function Interfaces with NativeBoost
Camillo Bruni, Luc Fabresse, Stéphane Ducasse, Igor Stasenko

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
2,891
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
2
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Transcript of "Language-side Foreign Function Interfaces with NativeBoost"

  1. 1. Camillo Bruni, Luc Fabresse, Stéphane Ducasse, Igor Stasenko IWST 2013 Language-side Foreign Function Interfaces with NativeBoost
  2. 2. 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
  3. 3. IWST  2013  @  Annecy Context 3 Cairo OpenGL LibC Language Virtual Machine (VM) Chipmunk ...
  4. 4. IWST  2013  @  Annecy Context 4 Language Virtual Machine (VM) How to interact with external libraries? Cairo OpenGL LibC Chipmunk ...
  5. 5. IWST  2013  @  Annecy Existing Solutions Language-side Library VM Extension VM Plugin Foreign Function Interface VM-level Language-level 5
  6. 6. IWST  2013  @  Annecy Existing Solutions Language-side Library VM Extension VM Plugin Foreign Function Interface VM-level Language-level 6 costly
  7. 7. IWST  2013  @  Annecy Existing Solutions Language-side Library VM Extension VM Plugin Foreign Function Interface VM-level Language-level 7 costly low-level
  8. 8. IWST  2013  @  Annecy Existing Solutions Language-side Library VM Extension VM Plugin Foreign Function Interface VM-level Language-level 8 slow fast costly low-level
  9. 9. IWST  2013  @  Annecy9 NativeBoost A language-side and fast FFI implementation
  10. 10. IWST  2013  @  Annecy10 Language-side • Extensible • Easy to use • noVM code needed • no low-level code (C wrapper) needed
  11. 11. IWST  2013  @  Annecy11 Fast Transparent generation of Assembly code from the language-side
  12. 12. IWST  2013  @  Annecy NativeBoost Example 12 char* getenv(const char*)
  13. 13. IWST  2013  @  Annecy NativeBoost Example 13 char* getenv(const char*)
  14. 14. IWST  2013  @  Annecy NativeBoost Example 14 Regular Smalltalk method with one argument
  15. 15. IWST  2013  @  Annecy NativeBoost Example 15 A pragma indicating that #primitiveNativeCall of #NativeBoost plugin should be executed when this method is executed
  16. 16. IWST  2013  @  Annecy NativeBoost Example 16
  17. 17. IWST  2013  @  Annecy NativeBoost Example 17 types annotation used to generate marshalling code char* getenv(const char*)
  18. 18. IWST  2013  @  Annecy NativeBoost Example 18 the value to be passed when calling out
  19. 19. IWST  2013  @  Annecy NativeBoost Example 19 the external library address in which the function is looked up
  20. 20. IWST  2013  @  Annecy Speed Comparisons 20 • NativeBoost • Alien FFI • C-FFI • LuaJIT • Callouts • Marshalling • Callbacks
  21. 21. IWST  2013  @  Annecy21 Callout Evaluation uint clock(void) Average time calling out 0% 50% 100% 150% NativeBoost Alien C-FFI LuaJIT faster slower
  22. 22. IWST  2013  @  Annecy22 0% 100% 200% 300% NativeBoost Alien C-FFI LuaJIT Marshalling int int abs(int)
  23. 23. IWST  2013  @  Annecy23 0% 100% 200% 300% 400% NativeBoost Alien C-FFI LuaJIT Marshalling char*/String int printf(char*,int,int)
  24. 24. IWST  2013  @  Annecy24 NativeBoost Alien C-FFI LuaJIT Marshalling char*/String char* getenv( char* ) 100% 300% 1000%
  25. 25. IWST  2013  @  Annecy25 NativeBoost Alien C-FFI LuaJIT Marshalling char*/String char* getenv( char* ) 100% 300% 1000%
  26. 26. 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)
  27. 27. 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*)) notsupported
  28. 28. IWST  2013  @  Annecy Insights into NativeBoost Internals 28 NBExample getenv: ‘PATH’
  29. 29. IWST  2013  @  Annecy Insights into NativeBoost Internals 29 NBExample getenv: ‘PATH’
  30. 30. IWST  2013  @  Annecy NBExample getenv: ‘PATH’ Insights into NativeBoost Internals 30 Virtual Machine (VM) NativeBoost Plugin
  31. 31. IWST  2013  @  Annecy NBExample getenv: ‘PATH’ Insights into NativeBoost Internals 31 Virtual Machine (VM) NativeBoost Plugin Fail if no native code associated with #getenv:
  32. 32. 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
  33. 33. IWST  2013  @  Annecy Virtual Machine (VM) NativeBoost Plugin Insights into NativeBoost Internals 33 activate the native code associated with #getenv: NBExample getenv: ‘PATH’
  34. 34. 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 strongVM support
  35. 35. IWST  2013  @  Annecy Future Work • Improve NativeBoost Callback performance • Reuse Alien’sVM Callback support? • Better integration of NativeBoost with the JIT • Do not leave JIT-mode when activating a NB method 35
  36. 36. Camillo Bruni, Luc Fabresse, Stéphane Ducasse, Igor Stasenko IWST 2013 Language-side Foreign Function Interfaces with NativeBoost
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×