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

Language-side Foreign Function Interfaces with NativeBoost

on

  • 2,692 views

Language-side Foreign Function Interfaces with NativeBoost

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

Statistics

Views

Total Views
2,692
Views on SlideShare
2,692
Embed Views
0

Actions

Likes
0
Downloads
1
Comments
0

0 Embeds 0

No embeds

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

Language-side Foreign Function Interfaces with NativeBoost Language-side Foreign Function Interfaces with NativeBoost Presentation Transcript

  • 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 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 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 slow fast costly low-level
  • 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) 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 method with one argument
  • IWST  2013  @  Annecy NativeBoost Example 15 A pragma indicating that #primitiveNativeCall of #NativeBoost plugin should 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*)) notsupported
  • 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 code associated 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 strongVM support
  • 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
  • Camillo Bruni, Luc Fabresse, Stéphane Ducasse, Igor Stasenko IWST 2013 Language-side Foreign Function Interfaces with NativeBoost