-
Notifications
You must be signed in to change notification settings - Fork 5
OpeLa Compiler Speed
Kota UCHIDA edited this page Sep 4, 2020
·
10 revisions
フィボナッチ数列の計算にかかる時間を,OpeLa,C,Python で比較してみました。 使用した OpeLa コンパイラのバージョンは 94d09ecd4221162689d67fd8986b00cde16b829b
計測に用いたソースコードは次の通りです。これは OpeLa のものですが,C,Python も同様のプログラムになっています。 使用した OpeLa バージョンでは標準出力を使えませんので,exit code で結果を出力します。C,Python も公平のために exit code で出力を行います。
$ cat fib.opl
func main() {
fib(36) != 14930352;
}
func fib(n) {
if n<=1 {
n;
} else {
fib(n-1)+fib(n-2);
}
}
結果を示します。平均を取ってない,適当な計測であることをご了承ください。
言語 | 実行時間 |
---|---|
OpeLa | 0.243 秒 |
C | 0.117 秒 |
C -O3 | 0.084 秒 |
Python | 3.643 秒 |
"C -O3" は C プログラムを最適化レベル 3 でコンパイルしたことを意味します。流石に最適化すると全然違いますね。
OpeLa
$ time sh -c "./fib_opela && echo ok"
ok
real 0m0.243s
user 0m0.243s
sys 0m0.000s
C
$ time sh -c "./fib_c && echo ok"
ok
real 0m0.117s
user 0m0.117s
sys 0m0.000s
Python
$ time sh -c "python3 fib.py && echo ok"
ok
real 0m3.643s
user 0m3.635s
sys 0m0.008s
上記の結果は Python だけ構文解析などの時間が含まれてしまっています。 不公平なので,OpeLa と C に関してもコンパイル時間を含んだ時間を計測してみました。
言語 | 実行時間(コンパイル時間を含む) |
---|---|
OpeLa | 0.289 秒 |
C | 0.178 秒 |
C -O3 | 0.143 秒 |
Python | 3.643 秒 |
OpeLa
$ time sh -c "cat fib.opl | ./opelac > fib.s; nasm -f elf64 fib.s; cc -o fib_opela fib.o; ./fib_opela && echo ok"
ok
real 0m0.289s
user 0m0.285s
sys 0m0.007s
C
$ time sh -c "clang -o fib_c fib.c; ./fib_c && echo ok"
ok
real 0m0.178s
user 0m0.127s
sys 0m0.034s
C -O3
$ time sh -c "clang -O3 -o fib_c fib.c; ./fib_c && echo ok"
ok
real 0m0.143s
user 0m0.096s
sys 0m0.029s