Last active
November 13, 2016 12:23
-
-
Save oinak/aacef2a516d9abaf0615097a77f724e9 to your computer and use it in GitHub Desktop.
Basic performance comparison ruby/mruby (interpreted, mrb bytecode, c bytecode) with fibonacci(40)
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include <stdint.h> | |
const uint8_t fib_symbol[] = { | |
0x52,0x49,0x54,0x45,0x30,0x30,0x30,0x32,0xb2,0xe1,0x00,0x00,0x01,0x52,0x4d,0x41, | |
0x54,0x5a,0x30,0x30,0x30,0x30,0x49,0x52,0x45,0x50,0x00,0x00,0x01,0x34,0x30,0x30, | |
0x30,0x30,0x00,0x00,0x00,0xbb,0x00,0x03,0x00,0x07,0x00,0x01,0x00,0x00,0x00,0x1a, | |
0x01,0x80,0x00,0x48,0x02,0x00,0x00,0xc0,0x01,0x80,0x00,0x46,0x01,0x80,0x00,0x91, | |
0x01,0x80,0x80,0x20,0x00,0x80,0xc0,0x01,0x01,0x80,0x00,0x06,0x02,0x00,0x00,0x3d, | |
0x02,0x80,0x00,0x06,0x03,0x40,0x13,0x83,0x02,0x80,0x00,0xa0,0x02,0x01,0x40,0x3e, | |
0x01,0x80,0xc0,0xa0,0x01,0x80,0x00,0x91,0x01,0x80,0x80,0x20,0x02,0x00,0x40,0x01, | |
0x01,0x81,0x00,0xae,0x01,0x00,0xc0,0x01,0x01,0x80,0x00,0x06,0x02,0x00,0x01,0x3d, | |
0x02,0x80,0x80,0x01,0x02,0x01,0x40,0x3e,0x02,0x80,0x01,0xbd,0x02,0x01,0x40,0x3e, | |
0x01,0x80,0xc0,0xa0,0x00,0x00,0x00,0x4a,0x00,0x00,0x00,0x04,0x00,0x00,0x09,0x46, | |
0x69,0x62,0x28,0x34,0x30,0x29,0x3d,0x20,0x00,0x00,0x00,0x00,0x00,0x09,0x20,0x20, | |
0x54,0x69,0x6d,0x65,0x20,0x3d,0x20,0x00,0x00,0x01,0x73,0x00,0x00,0x00,0x05,0x00, | |
0x03,0x66,0x69,0x62,0x00,0x00,0x04,0x54,0x69,0x6d,0x65,0x00,0x00,0x03,0x6e,0x6f, | |
0x77,0x00,0x00,0x04,0x70,0x75,0x74,0x73,0x00,0x00,0x01,0x2d,0x00,0x00,0x00,0x00, | |
0x6d,0x00,0x03,0x00,0x07,0x00,0x00,0x00,0x00,0x00,0x11,0x02,0x00,0x00,0x26,0x01, | |
0x80,0x40,0x01,0x02,0x40,0x00,0x03,0x01,0x80,0x00,0xb4,0x01,0xc0,0x01,0x19,0x01, | |
0xc0,0x00,0x03,0x00,0x40,0x04,0x97,0x01,0x80,0x00,0x06,0x02,0x00,0x40,0x01,0x02, | |
0x00,0x80,0xaf,0x01,0x80,0x40,0xa0,0x02,0x00,0x00,0x06,0x02,0x80,0x40,0x01,0x02, | |
0x80,0x81,0x2f,0x02,0x00,0x40,0xa0,0x01,0x80,0xc0,0xac,0x01,0x80,0x00,0x29,0x00, | |
0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x02,0x3c,0x3d,0x00,0x00,0x03,0x66,0x69, | |
0x62,0x00,0x00,0x01,0x2d,0x00,0x00,0x01,0x2b,0x00,0x45,0x4e,0x44,0x00,0x00,0x00, | |
0x00,0x08, | |
}; |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
def fib(n) | |
if n <= 1 | |
1 | |
else | |
fib(n - 1) + fib(n - 2) | |
end | |
end | |
t0 = Time.now | |
puts "Fib(40)= #{ fib(40) }" | |
t = Time.now - t0 | |
puts " Time = #{ t }s" |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include "mruby.h" | |
#include "mruby/irep.h" | |
#include "fib.c" | |
int main(void) | |
{ | |
mrb_state *mrb = mrb_open(); | |
if (!mrb) { /* handle error */ } | |
mrb_load_irep(mrb, fib_symbol); | |
mrb_close(mrb); | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include<stdio.h> | |
#include<time.h> | |
int fib(int n){ | |
if (n <= 1){ | |
return 1; | |
} else { | |
return fib(n -1)+ fib(n - 2); | |
} | |
} | |
int main() | |
{ | |
clock_t t0 = clock(); | |
long f = fib(40); | |
clock_t t1 = clock(); | |
double te = ((double)(t1 - t0)) / CLOCKS_PER_SEC; | |
printf("Fib(40)=%d, time=%f\n", f, te); | |
return 0; | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include<stdio.h> | |
#include<time.h> | |
int fib(int n){ | |
int first = 0, second = 1, next, c; | |
for ( c = 0 ; c < n ; c++ ) | |
{ | |
if ( c <= 1 ) { | |
next = c; | |
} else { | |
next = first + second; | |
first = second; | |
second = next; | |
} | |
} | |
return next; | |
} | |
int main() | |
{ | |
clock_t t0 = clock(); | |
long f = fib(40); | |
clock_t t1 = clock(); | |
double te = ((double)(t1 - t0)) / CLOCKS_PER_SEC; | |
printf("Fib(40)=%d, time=%f\n", f, te); | |
return 0; | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
fer@hecate /tmp/mruby [ruby-2.3.1] | |
$ ruby fib.rb | |
Fib(40)= 165580141 | |
Time = 18.012413533s | |
fer@hecate /tmp/mruby [ruby-2.3.1] | |
$ rvm use mruby | |
Using /home/fer/.rvm/gems/mruby-1.0.0 | |
Warning! Executable 'gem' missing, something went wrong with this ruby installation! | |
fer@hecate /tmp/mruby [mruby-1.0.0] | |
$ mruby fib.rb | |
Fib(40)= 165580141 | |
Time = 33.551006s | |
fer@hecate /tmp/mruby [mruby-1.0.0] | |
$ mrbc fib.rb | |
fer@hecate /tmp/mruby [mruby-1.0.0] | |
$ mruby -b fib.mrb | |
Fib(40)= 165580141 | |
Time = 32.033073s | |
fer@hecate /tmp/mruby [mruby-1.0.0] | |
$ mrbc -Bfib_symbol fib.rb | |
fer@hecate /tmp/mruby [mruby-1.0.0] | |
$ ls | |
fib.c fib.mrb fib.rb test_program test_stub.c | |
fer@hecate /tmp/mruby [mruby-1.0.0] | |
$ vi fib_main.c | |
fer@hecate /tmp/mruby [mruby-1.0.0] | |
$ gcc -std=c99 -I/home/fer/.rvm/rubies/mruby-1.0.0/include fib_main.c -o fib.exe -lm /home/fer/.rvm/src/mruby-1.0.0/build/host/lib/libmruby.a | |
fer@hecate /tmp/mruby [mruby-1.0.0] | |
$ ls | |
fib.c fib.exe fib_main.c fib.mrb fib.rb | |
fer@hecate /tmp/mruby [mruby-1.0.0] | |
$ ./fib.exe | |
Fib(40)= 165580141 | |
Time = 30.911468s | |
fer@hecate /tmp/mruby [mruby-1.0.0] | |
$ vi fib_native.c | |
fer@hecate /tmp/mruby [mruby-1.0.0] | |
$ gcc -std=c99 fib_native.c -o fib_native.exe | |
fer@hecate /tmp/mruby [mruby-1.0.0] | |
$ ./fib_native.exe | |
Fib(40)=165580141, time=0.971636 | |
fer@hecate /tmp/mruby [mruby-1.0.0] | |
$ vi fib_native_for.c | |
fer@hecate /tmp/mruby [mruby-1.0.0] | |
$ gcc -std=c99 fib_native_for.c -o fib_native_for.exe | |
fer@hecate /tmp/mruby [mruby-1.0.0] | |
$ ./fib_native_for.exe | |
Fib(40)=63245986, time=0.000002 | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment