y_uti のブログ

統計、機械学習、自然言語処理などに興味を持つエンジニアの技術ブログです

PHP と HHVM のベンチマーク実行時間の比較 (2014 年 10 月版)

PHP カンファレンスでは、HHVM の話や PHPNG の話を聞くことができました。しばらく前に、それぞれ一度ベンチマークを取っていたのですが、あらためて計測してみました。結果は以下のとおりです。それぞれの実行環境で、5 回ずつ実行した平均の実行時間をプロットしました。

f:id:y_uti:20141012214314p:plain

ベンチマークプログラムは、以前と同じものを利用しました。下記のサイトで扱われているプログラムになります。ただし、現時点での最速のコードを取り直すことはせずに、前回の計測時 (4 月頃です) に用いたプログラムを今回もそのまま利用しています。

実行環境は以下のとおりです。

php 5.4: PHP 5.4.16 です。CentOS 7 の yum でインストールされるものを利用しています

phpng: PHPNG です。GitHub の master を取得してビルドしたものです。php.ini はソースコードに含まれる php.ini-production を使っています

php on hhvm: HHVM 3.3 です。実行するプログラムは、HHVM 用に手を入れることをせずに PHP 版のソースコードをそのまま利用しています

hh on hhvm: HHVM 3.3 です。PHP 版のソースコードのうち、グローバルに書かれている部分を関数化して実行したものです

pidigits は、GMP を利用するプログラムです。以前は、HHVM が GMP に未対応で実行できなかったのですが、HHVM 3.3 で GMP に対応したということで、実行できるようになりました。ただし、ベンチマーク結果からもわかるように、PHP に比べて 3 倍近い実行時間となっています。

PHPNG と HHVM の比較では、多くのベンチマークプログラムで HHVM の方が高速に実行できていますが、一部に逆転しているものもあるようです。

reverse-complement では PHPNG が PHP 5.4 よりも遅くなっていますが、これは、PHPNG での 5 回の実行時間に大きなばらつきがあったためです。5 回の実行時間の内訳は次のようになっています。1 回目の 3.32 秒、4 回目の 8.23 秒の結果が平均にも大きな影響を与えています。他のベンチマークではこれほど大きなばらつきはありませんでした。

  • 3.32
  • 1.66
  • 1.62
  • 8.23
  • 1.50