カテゴリー

最新の記事

最近のコメント

最近のトラックバック

月別アーカイブ

ブログ検索

RSSフィード

ブロとも申請フォーム

この人とブロともになる

スポンサーサイト

スポンサー広告
--.--.--
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

ベンチャーブログのランキングに参加しています。
下のバナーをクリックして応援していただけると嬉しいです。
にほんブログ村 ベンチャーブログへ

GaucheとPHPの速度比較

Scheme/Gauche
2008.12.10
GahceとPHPの処理速度比較をやってみた。Gaucheのスタディを始めてからずっと気になっていたのが処理速度だったからだ。いくらコーディングしやすくても、処理時間がやたらかかるようでは実用的なアプリケーションなんて作れない。場合によってはC言語も併用しながら、チューニングを行うはめになってしまう。とはいえ、まあ半分は興味本位なんだけどね。

とりあえずやらせてみたのは、フィボナッチ数列の計算だ。階乗計算でもいいかなあと思ったのだが、PHPで階乗計算をやってみると、ある程度以上の桁数になった時点で答えが「INF」になってしまうのだ。しかも「INF」にならないようにすると、あまり処理時間が稼げないので比較が難しい。というわけで、答えの桁数があまり大きくなく、しかもやたらと処理に時間がかかるものをということで、定番のフィボナッチ数列を選んだわけである。

ご存じのとおり、フィボナッチ数列とは、以下のようなものである。

fib(1) = 1
fib(2) = 1
fib(3) = 2
...
fib(n) = fib(n-1) + fib(n-2)


処理時間を稼ぎたいので、処理方式は再帰型とする。これならnの二乗のペースで処理プロセスが大きくなっていくからだ。

Gaucheのコードは以下の通り。n=30の値を計算している。

(define (fib n)
  (cond ((= n 1) 1)
     ((= n 2) 1)
     (else (+ (fib (- n 1)) (fib (- n 2))))))

(time (fib 30))



PHPのコードは以下の通り。計算内容は上と同じだ。なお now_time()は現在時刻をマイクロ秒まで取得するためのもの。単位は秒である。

function now_time (){
  list ($msec, $sec) = explode(' ', microtime());
  return( (float)$msec + (float)$sec );
}

function fib( $n ){
  if( $n == 1 ){
    return( 1 );
  }else if( $n == 2){
    return( 1 );
  }else{
    return( fib( $n-1 ) + fib( $n-2 ) );
  }
}

$n = 30;
$start = now_time();
echo "Ans=" . fib( $n ) . "<br />";
$end = now_time();
echo "Time=" . ($end - $start);



使用したマシンは、昨年の秋に中古屋で買った日立のフローラ。プロセッサはPentium 4 の2.4GHz、今年の春にCentOSを導入して、そのまま使っているものだ。

計測結果は以下の通り。

Gauche
real:0.226 user:0.230 sys:0.000

PHP
Time=2.026


たったひとつのテストで結論を出すべきではないが、この結果を見る限り、Gaucheの方がPHPよりも約9倍速いことになる。ちなみに n=35 にすると、Gaucheでは 2.47秒、PHPでは22.86秒かかる。PHPからGaucheへの移行は、パフォーマンス面のメリットもあるのかもしれない。もちろんGCIによる呼び出しやDBアクセスのオーバーヘッドも考える必要があるので、内部処理だけで比較するのは問題があるのだが。

でも個人的には、いくぶんホッとしたのである。
スポンサーサイト

ベンチャーブログのランキングに参加しています。
下のバナーをクリックして応援していただけると嬉しいです。
にほんブログ村 ベンチャーブログへ

FC2Ad

相続 会社設立

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。