Skip to content

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
Clone this wiki locally