Naive benchmark comparison of Lua and native C code

← Home

...and why you shouldn't forget about FFI when developing games with LÖVE2D

$ cat fib.c
#include <stdio.h>

int fib(int n)
{
    if(n < 2)
        return n;

    return fib(n - 1) + fib(n - 2);
}

int main(int argc, char *argv[])
{
    printf("%d\n", fib(35));
    return 0;
}
$ cat fib.lua
function fib(n)
    if n < 2 then
        return n
    end

    return fib(n - 1) + fib(n - 2)
end

print(fib(35))
$ gcc ./fib.c -o fib -march=native -O3
$ hyperfine -w 5 -r 10 'lua5.4 ./fib.lua' 'luajit -O3 ./fib.lua' './fib'
Benchmark 1: lua5.4 ./fib.lua
  Time (mean ± σ):      1.169 s ±  0.033 s    [User: 1.166 s, System: 0.002 s]
  Range (min … max):    1.128 s …  1.236 s    10 runs
 
Benchmark 2: luajit -O3 ./fib.lua
  Time (mean ± σ):     185.6 ms ±   5.8 ms    [User: 182.5 ms, System: 2.6 ms]
  Range (min … max):   177.2 ms … 193.9 ms    10 runs
 
Benchmark 3: ./fib
  Time (mean ± σ):      26.3 ms ±   0.4 ms    [User: 24.6 ms, System: 1.6 ms]
  Range (min … max):    25.7 ms …  27.1 ms    10 runs
 
Summary
  ./fib ran
    7.06 ± 0.24 times faster than luajit -O3 ./fib.lua
   44.44 ± 1.42 times faster than lua5.4 ./fib.lua
            

You can compare different implementations of more complex algorithms in different programming languages here


Last update: