language side foreign function interfaces with nativeboost
play

Language-side Foreign Function Interfaces with NativeBoost IWST - PowerPoint PPT Presentation

Language-side Foreign Function Interfaces with NativeBoost IWST 2013 Camillo Bruni, Luc Fabresse, Stphane Ducasse, Igor Stasenko Outline 1. Context 2. Existing Solutions 3. NativeBoost 4. Speed Comparison of NativeBoost with other FFIs


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

  2. Outline 1. Context 2. Existing Solutions 3. NativeBoost 4. Speed Comparison of NativeBoost with other FFIs 5. NativeBoost Internals 6. Conclusion & Future Work IWST ¡2013 ¡@ ¡Annecy 2

  3. Context Cairo Language Chipmunk OpenGL Virtual Machine (VM) LibC ... IWST ¡2013 ¡@ ¡Annecy 3

  4. Context Cairo Language Chipmunk OpenGL Virtual Machine (VM) LibC ... How to interact with external libraries? IWST ¡2013 ¡@ ¡Annecy 4

  5. Existing Solutions Language-side Library VM Extension VM Plugin Foreign Function Interface VM-level Language-level IWST ¡2013 ¡@ ¡Annecy 5

  6. Existing Solutions costly Language-side Library VM Extension VM Plugin Foreign Function Interface VM-level Language-level IWST ¡2013 ¡@ ¡Annecy 6

  7. Existing Solutions costly Language-side Library VM Extension low-level VM Plugin Foreign Function Interface VM-level Language-level IWST ¡2013 ¡@ ¡Annecy 7

  8. Existing Solutions costly Language-side Library VM Extension low-level VM Plugin Foreign Function Interface fast VM-level slow Language-level IWST ¡2013 ¡@ ¡Annecy 8

  9. NativeBoost A language-side and fast FFI implementation IWST ¡2013 ¡@ ¡Annecy 9

  10. Language-side • Extensible • Easy to use • no VM code needed • no low-level code (C wrapper) needed IWST ¡2013 ¡@ ¡Annecy 10

  11. Fast Transparent generation of Assembly code from the language-side IWST ¡2013 ¡@ ¡Annecy 11

  12. NativeBoost Example char* getenv(const char*) IWST ¡2013 ¡@ ¡Annecy 12

  13. NativeBoost Example char* getenv(const char*) IWST ¡2013 ¡@ ¡Annecy 13

  14. NativeBoost Example Regular Smalltalk method with one argument IWST ¡2013 ¡@ ¡Annecy 14

  15. NativeBoost Example A pragma indicating that #primitiveNativeCall of #NativeBoost plugin should be executed when this method is executed IWST ¡2013 ¡@ ¡Annecy 15

  16. NativeBoost Example IWST ¡2013 ¡@ ¡Annecy 16

  17. NativeBoost Example char* getenv(const char*) types annotation used to generate marshalling code IWST ¡2013 ¡@ ¡Annecy 17

  18. NativeBoost Example the value to be passed when calling out IWST ¡2013 ¡@ ¡Annecy 18

  19. NativeBoost Example the external library address in which the function is looked up IWST ¡2013 ¡@ ¡Annecy 19

  20. Speed Comparisons • NativeBoost • Callouts • Alien FFI • Marshalling • C-FFI • Callbacks • LuaJIT IWST ¡2013 ¡@ ¡Annecy 20

  21. Callout Evaluation Average time calling out uint clock(void) 150% slower 100% faster 50% 0% NativeBoost Alien C-FFI LuaJIT IWST ¡2013 ¡@ ¡Annecy 21

  22. Marshalling int int abs(int) 300% 200% 100% 0% NativeBoost Alien C-FFI LuaJIT IWST ¡2013 ¡@ ¡Annecy 22

  23. Marshalling char*/String int printf(char*,int,int) 400% 300% 200% 100% 0% NativeBoost Alien C-FFI LuaJIT IWST ¡2013 ¡@ ¡Annecy 23

  24. Marshalling char*/String char* getenv( char* ) 1000% 300% 100% NativeBoost Alien C-FFI LuaJIT IWST ¡2013 ¡@ ¡Annecy 24

  25. Marshalling char*/String char* getenv( char* ) 1000% 300% 100% NativeBoost Alien C-FFI LuaJIT IWST ¡2013 ¡@ ¡Annecy 25

  26. Marshalling structs void cairo_matrix_multiply ( cairo_matrix_t *result, cairo_matrix_t *a, cairo_matrix_t *b) 1000% 400% 100% NativeBoost Alien C-FFI LuaJIT IWST ¡2013 ¡@ ¡Annecy 26

  27. Callbacks Evaluation void qsort ( void *base, size_t nel, size_t width, int (*compare)(const void*, const void*)) 100% d e t r o p p u 30% s t o n NativeBoost Alien C-FFI LuaJIT IWST ¡2013 ¡@ ¡Annecy 27

  28. Insights into NativeBoost Internals NBExample getenv: ‘PATH’ IWST ¡2013 ¡@ ¡Annecy 28

  29. Insights into NativeBoost Internals NBExample getenv: ‘PATH’ IWST ¡2013 ¡@ ¡Annecy 29

  30. Insights into NativeBoost Internals NBExample getenv: ‘PATH’ NativeBoost Plugin Virtual Machine (VM) IWST ¡2013 ¡@ ¡Annecy 30

  31. Insights into NativeBoost Internals NBExample getenv: ‘PATH’ NativeBoost Plugin Virtual Machine (VM) Fail if no native code associated with #getenv: IWST ¡2013 ¡@ ¡Annecy 31

  32. Insights into NativeBoost Internals NBExample getenv: ‘PATH’ NativeBoost Plugin Virtual Machine (VM) 1. generate native code for marshalling, ... 2. associate it with #getenv: 3. restart the method execution IWST ¡2013 ¡@ ¡Annecy 32

  33. Insights into NativeBoost Internals NBExample getenv: ‘PATH’ NativeBoost Plugin Virtual Machine (VM) activate the native code associated with #getenv: IWST ¡2013 ¡@ ¡Annecy 33

  34. Conclusion • 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 34

  35. 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 IWST ¡2013 ¡@ ¡Annecy 35

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

Recommend


More recommend