Easy-ISLispでベンチマークテスト(2)


はじめに

Easy-ISLispのコンパイラなどを改良しました。OpenLISPに付属のガブリエルベンチマークにつき、再度計測してみました。

計測結果

eisl -s bench/runbench.lsp

Test 01: Fib     -> ok, time =   0.000552s.
Test 02: Tak     -> ok, time =   0.002464s.
Test 03: Stak    -> 12, time =   0.009386s.
Test 04: Ctak    -> ok, time =   0.005991s.
Test 05: Takl    -> ok, time =   0.004593s.
Test 06: Takr    -> ok, time =   0.002429s.
Test 07: Boyer   -> T, time =   0.060741s.
Test 08: Browse  -> ok, time =   0.261006s.
Test 09: Destru  -> ok, time =   0.005731s.
Test 10: Travini -> ok, time =   0.034767s.
Test 11: Travrun -> ok, time =   0.476844s.
Test 12: Deriv   -> ok, time =   0.045566s.
Test 13: Dderiv  -> ok, time =   0.046484s.
Test 14: Divit   -> ok, time =   0.009371000000000001s.
Test 15: Divrec  -> ok, time =   0.002886s.
Test 16: FFT     -> ok, time =   0.067063s.
Test 17: Puzzle  -> ok, time =   0.105334s.
Test 18: Triang  -> ok, time =   1.86932s.
Test 19: Fprint  -> ok, time =   0.000393s.
Test 20: Fread   -> ok, time =   0.000558s.
Test 21: Tprint  -> ok, time = 3e-0600s.
Test 22: Frpoly  -> ok, time =   0.048931s.

Total   3.060413s.

OpenLispだとおよそ1.6秒です。まだまだ改良の余地がありそうです。

改良点

小整数をインタプリタにおいても即値化しました。従来、インタプリタでは即値化されておらず、インタプリタとコンパイラの間でデータを交換するときに余分なコードを生成していました。これが必要なくなりGCの負担も減少しました。

世界レベルの壁は高い

OpenLispの有料商用バージョンはさらに高速だそうです。Openlispを目標にしてさらに改良を試みます。

追記

Windows上のSWLで試してみたところ、Linuxよりも高速でした。比較したOpenLispもMINGW版です。OSの差の部分もあるみたいです。

Githubにて公開しています。