Language-side Foreign Function Interfaces with NativeBoost

3,070 views
2,983 views

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
3,070
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

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

×