• Like
Language-side Foreign Function Interfaces with NativeBoost
Upcoming SlideShare
Loading in...5
×

Language-side Foreign Function Interfaces with NativeBoost

  • 2,847 views
Uploaded on

Language-side Foreign Function Interfaces with NativeBoost …

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

More in: Technology
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
    Be the first to like this
No Downloads

Views

Total Views
2,847
On Slideshare
0
From Embeds
0
Number of Embeds
0

Actions

Shares
Downloads
1
Comments
0
Likes
0

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. Camillo Bruni, Luc Fabresse, Stéphane Ducasse, Igor Stasenko IWST 2013 Language-side Foreign Function Interfaces with NativeBoost
  • 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. IWST  2013  @  Annecy Context 3 Cairo OpenGL LibC Language Virtual Machine (VM) Chipmunk ...
  • 4. IWST  2013  @  Annecy Context 4 Language Virtual Machine (VM) How to interact with external libraries? Cairo OpenGL LibC Chipmunk ...
  • 5. IWST  2013  @  Annecy Existing Solutions Language-side Library VM Extension VM Plugin Foreign Function Interface VM-level Language-level 5
  • 6. IWST  2013  @  Annecy Existing Solutions Language-side Library VM Extension VM Plugin Foreign Function Interface VM-level Language-level 6 costly
  • 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. 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. IWST  2013  @  Annecy9 NativeBoost A language-side and fast FFI implementation
  • 10. IWST  2013  @  Annecy10 Language-side • Extensible • Easy to use • noVM code needed • no low-level code (C wrapper) needed
  • 11. IWST  2013  @  Annecy11 Fast Transparent generation of Assembly code from the language-side
  • 12. IWST  2013  @  Annecy NativeBoost Example 12 char* getenv(const char*)
  • 13. IWST  2013  @  Annecy NativeBoost Example 13 char* getenv(const char*)
  • 14. IWST  2013  @  Annecy NativeBoost Example 14 Regular Smalltalk method with one argument
  • 15. IWST  2013  @  Annecy NativeBoost Example 15 A pragma indicating that #primitiveNativeCall of #NativeBoost plugin should be executed when this method is executed
  • 16. IWST  2013  @  Annecy NativeBoost Example 16
  • 17. IWST  2013  @  Annecy NativeBoost Example 17 types annotation used to generate marshalling code char* getenv(const char*)
  • 18. IWST  2013  @  Annecy NativeBoost Example 18 the value to be passed when calling out
  • 19. IWST  2013  @  Annecy NativeBoost Example 19 the external library address in which the function is looked up
  • 20. IWST  2013  @  Annecy Speed Comparisons 20 • NativeBoost • Alien FFI • C-FFI • LuaJIT • Callouts • Marshalling • Callbacks
  • 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. IWST  2013  @  Annecy22 0% 100% 200% 300% NativeBoost Alien C-FFI LuaJIT Marshalling int int abs(int)
  • 23. IWST  2013  @  Annecy23 0% 100% 200% 300% 400% NativeBoost Alien C-FFI LuaJIT Marshalling char*/String int printf(char*,int,int)
  • 24. IWST  2013  @  Annecy24 NativeBoost Alien C-FFI LuaJIT Marshalling char*/String char* getenv( char* ) 100% 300% 1000%
  • 25. IWST  2013  @  Annecy25 NativeBoost Alien C-FFI LuaJIT Marshalling char*/String char* getenv( char* ) 100% 300% 1000%
  • 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. 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. IWST  2013  @  Annecy Insights into NativeBoost Internals 28 NBExample getenv: ‘PATH’
  • 29. IWST  2013  @  Annecy Insights into NativeBoost Internals 29 NBExample getenv: ‘PATH’
  • 30. IWST  2013  @  Annecy NBExample getenv: ‘PATH’ Insights into NativeBoost Internals 30 Virtual Machine (VM) NativeBoost Plugin
  • 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. 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. IWST  2013  @  Annecy Virtual Machine (VM) NativeBoost Plugin Insights into NativeBoost Internals 33 activate the native code associated with #getenv: NBExample getenv: ‘PATH’
  • 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. 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. Camillo Bruni, Luc Fabresse, Stéphane Ducasse, Igor Stasenko IWST 2013 Language-side Foreign Function Interfaces with NativeBoost