2014年10月9日木曜日

Booのベンチマーク(2)

以前のBooのベンチマークテストをしてみてテストによってはbooiがpypyに負けているものもあるという結果が出たが、 最新版のbooiはだいぶ高速化されているようなので、再度ベンチマークテストをしてみた。
条件、環境は以下のとおり。
  • マシンスペック
    • Intel(R) Core(TM)2 Duo CPU P8800 @ 2.66GHz
    • memory 4GB
  • OS
    • ubuntu 14.04
  • Booのインタプリタ、コンパイラは下記の2バージョンを使用
    • Boo Compiler version 0.9.5.1 (3.2.8 (Debian 3.2.8+dfsg-4ubuntu1))
    • Boo Compiler version 0.9.7.0 (3.2.8 (Debian 3.2.8+dfsg-4ubuntu1))
  • pythonのバージョンは2.7.6
  • pypyのバージョンは下記の通り
    • [PyPy 2.2.1 with GCC 4.8.2]
  • テストにははhttps://code.google.com/p/unladen-swallow/wiki/Benchmarks のbm_call_methodとbm_floatを 使用。
    • 測定に使用したBooスクリプトは https://github.com/katonori/tiny_boo_benchmarks にコミット。
  • 時間測定はpythonではtime.time(), booではSystem.Diagnostics.StopwatchのElapsedMillisecondsで行った。
  • 測定箇所を100回実行した算術平均を結果とした。
結果は下記の通り。

bm_call_method

実行環境 結果(秒)
python 0.42981
pypy 0.01856
booi-0.9.5.1 0.00801
booc-0.9.5.1 0.00901
booi-0.9.7.0 0.00801
booc-0.9.7.0 0.00801

bm_float

実行環境 結果(秒)
python 0.07578
pypy 0.01522
booi-0.9.5.1 0.04145
booc-0.9.5.1 0.00784
booi-0.9.7.0 0.00817
booc-0.9.7.0 0.00784
booのバージョン0.9.7.0はすべての結果でpypyよりもいい結果が出ています。 あと、booiが0.9.5.1から0.9.7.0でだいぶ高速化されているようです。

2014年9月21日日曜日

Booのdllサーチパス追加

Booでimportするdllのサーチパスの追加は環境変数MONO_PATHで行うことができる。
下記man monoからの引用
MONO_PATH
       Provides a search path to the runtime where to look for library
       files.   This is a tool convenient for debugging applications, but
       should not be used by deployed applications as it breaks the assembly
       loader in subtle ways.
       Directories are separated by the platform path separator (colons on unix). Example:
       /home/username/lib:/usr/local/mono/lib
       Alternative solutions to MONO_PATH include: installing libraries into
       the Global Assembly Cache (see gacutil(1)) or having the dependent
       libraries side-by-side with the main executable.
       For a complete description of recommended practices for application
       deployment, see
       http://www.mono-project.com/Guidelines:Application_Deployment
LinuxなどではLD_LIBRARY_PATH同様':'区切りで列挙すればいい様子。

Booのベンチマーク

Boo(http://boo.codehaus.org/)という言語があるらしい。 python likeな文法でCLR上で動作するとのこと。気になるのはpythonと比較した場合のパフォーマンスだけど、静的型付けなどpythonよりも速く動きそうな特徴を持っているので期待できそう。
などのサイトを見ると、CPythonよりも高速、フィボナッチ数を求めるベンチマークではpypyよりも速いという結果が出ている。 もうちょっと他のベンチマークの結果も知りたかったのでpythonのベンチマーク(Unladen Swallow Benchmarks)の一部をBoo言語に移植してpythonの結果と比較してみた。結果は下記の通り。

測定環境

% uname -a
Linux nkmbp1 3.13.0-35-generic #62-Ubuntu SMP Fri Aug 15 01:58:42 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux
% python --version
Python 2.7.6
% mono --version
Mono JIT compiler version 3.2.8 (Debian 3.2.8+dfsg-4ubuntu1)
Copyright (C) 2002-2014 Novell, Inc, Xamarin Inc and Contributors. www.mono-project.com
        TLS:           __thread
        SIGSEGV:       altstack
        Notifications: epoll
        Architecture:  amd64
        Disabled:      none
        Misc:          softdebug
        LLVM:          supported, not enabled.
        GC:            sgen
% pypy --version
Python 2.7.3 (2.2.1+dfsg-1, Nov 28 2013, 05:13:10)
[PyPy 2.2.1 with GCC 4.8.2]
実行時間の測定はtimeコマンドで実施。 boocの結果はコンパイル時間を含まず、実行時間のみ。

bm_float.py

関数test_float(count)を50回実行
python 7.582 sec
pypy 1.600 sec
booi 4.784 sec
booc 0.909 sec

bm_call_method.py

関数test_float(count)を100回実行
python 38.316 sec
pypy 1.266 sec
booi 1.022 sec
booc 0.538 sec
うーん。。。めちゃくちゃ小さなベンチマークなので、あくまで参考程度の結果ですが、この結果だけ見るとpypyでいいかなってなっちゃいますね。C#に慣れてる人、速度に問題があったらコンパイルする手間をいとわない人はBooを使う価値があるかもしれませんね。