1

Lua/PHP5/自作言語の速度測定

フィボナッチ数列で速度検証を行ってみた。
測定にはtimeコマンドを使用しています。

検証環境

  • MacBook Air 1600/11.6 MC969J/A
  • CPU: Core i5(Sandy Bridge) 1.6GHz
  • メモリ容量: 4GB
  • ストレージ: SSD

各言語のコード

Lua

function fibo(n) if 1 == n or 2 == n then return end fibo(n-1); fibo(n-2); end MAX_SIZE = 40 data = {} for idx = 1, MAX_SIZE do data[idx] = fibo(idx); end

PHP5

<?php function fibo($n) { if (1 == $n || 2 == $n) return; fibo($n - 1); fibo($n - 2); } for ($i = 1; $i <= 40; ++$i) { fibo($i); }

Ril(自作言語)

for文を実装していないので、whileで対応してます。

[macro name:"fibo" params:"n"] [if 1 == $n || 2 == $n][return][endif] [fibo $n-1] [fibo $n-2] [endmacro] [let $i = 1] [while $i <= 40] [fibo $i] [let $i++] [endwhile]

測定結果

./src/lua ./test/fibonacci.lua 68.67s user 0.02s system 99% cpu 1:08.69 total ./php fibonatti.php 175.76s user 0.29s system 99% cpu 2:56.15 total ./ril fibonacci.ril 270.05s user 0.22s system 99% cpu 4:30.34 total

検証回数は数回程度ですが、各言語の差はほぼ同じだったので問題ないでしょう。
Luaは噂通り速く、ダントツのトップです。
PHP5はLuaと比べて3倍程度遅い結果になっています。
自作言語の方はLuaと比べて4倍以上遅い結果となってしまいました。

自作言語は計算処理の部分を汎用的に扱えるように関数ポインタを用いて演算の分岐を行っています。
関数の呼び出しは比較的コストが高いので、計算処理のように何度も呼び出す箇所で使っていると結構な負担になります。
なので、switchを使用し関数の呼び出しを行わないようにすれば今よりいくらか速くなると思います。
他にも汎用性を重視した実装を行っているため、速度を犠牲にしている箇所があったりしますが、
それらの箇所は汎用性を重視するべき箇所で、これ以上の高速化は見込めません。
なので、この変更を行うことでどの程度の速度改善が図れるのかが今後の高速化のキーになりそうです。

ヴァンパイアいおりん

201201090655

喜んで献血させていただきます。

アイマスの響

 

201201080327

響が最近好きになってきた感じです。

まだプロデュースした事ないからそのうちやろう(フラグ)。

謹賀新年

201201030752

 

新年明けましておめでとうございます。

今回で二度目の年賀絵です。

今年新年前までは描くつもりがありませんでしたが、今年初めのお絵かきという事で年賀絵にすることに。

今回はアイドルマスターの美希にしました。

去年は一昨年放送されていたアニメから俺妹の黒猫にしたので、

今年も昨年のアニメから選びました。

構図は悪いですが顔をうまく描けたので及第点です。

来年もサボらず描いて、慣習としてやっていけたらいいなぁ。

1

フィード

キーワード検索

最近の記事

最近のコメント

最近のトラックバック

カテゴリ

アーカイブ

ランキング