chungwong
Elixir NIF performance compared to native C++
I have a library which is written in C++, and I wrote a NIF “bridge” for it.
When I bench marked the library in C++, it had ~400-600 ips.
Then I bench marked it in Elixir, the result surprised me and it reached minimum 4k ips.
I couldn’t believe my eyes so I spinning a drogon http server to battle with Phoenix.
And the results from the two stay pretty much the same ~400 rps vs ~3k-6k rps.
How come a native C++ call is MUCH slower than the one from Elixir NIF?
Most Liked
rjk
Are you able to share the code? It would be easier this way to say something sensible about it.
But from my own experience it’s quite difficult to measure between 2 platforms in a correct way.
(I’m using rustler myself and performance seems to be faster on the 100% rust side, I have never seen the elixir/NIF part being faster because of the (sometimes little) overhead crossing the NIF bridge)
yurko
Could be that your benchmarks are parallelized for BEAM but not when testing native C++?
hauleth
chungwong
I have made a simplified version of the code.
After considering parallel execution and some tweak to C++ compilation,
Parallel 1 in Benchee is around 2.3k IPS and Native C++ is about 2k or so, so they are similar now.
But I still feel Elixir NIF is faster.







