PHP と HHVM のベンチマーク実行時間の比較 (2014 年 10 月版)
PHP カンファレンスでは、HHVM の話や PHPNG の話を聞くことができました。しばらく前に、それぞれ一度ベンチマークを取っていたのですが、あらためて計測してみました。結果は以下のとおりです。それぞれの実行環境で、5 回ずつ実行した平均の実行時間をプロットしました。
ベンチマークプログラムは、以前と同じものを利用しました。下記のサイトで扱われているプログラムになります。ただし、現時点での最速のコードを取り直すことはせずに、前回の計測時 (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