2015年11月7日

Benchmarker.py

ベンチマークツール「Benchmarker.py」を紹介します。

公式ページからの抜粋によると、"Benchmarker.py is an awesome benchmarking tool for Python."とのことですが、使っているとまさにそのように感じます。



実際の使用例として、公式ページで説明されているサンプルに若干手を加えたソースを走らせてみます。

from benchmarker import Benchmarker

with Benchmarker(1000 * 1000, width=20) as bench:
    s1, s2, s3, s4, s5 = (
        'Haruhi', 'Mikuru', 'Yuki', 'Itsuki', 'Kyon'
    )

    @bench('join')
    def _(bm):
        for _ in bm:
            s = ''.join((s1, s2, s3, s4, s5))

    @bench('+ operator')
    def _(bm):
        for _ in bm:
            s = s1 + s2 + s3 + s4 + s5

    @bench('% operator')
    def _(bm):
        fmt = '%s%s%s%s%s'
        for _ in bm:
            s = fmt % (s1, s2, s3, s4, s5)

    @bench('format')
    def _(bm):
        fmt = '{0}{1}{2}{3}{4}'
        for _ in bm:
            s = fmt.format(s1, s2, s3, s4, s5)

以下のような結果が表示されます(一部抜粋)。
''.join()が高速であるというよく知られた事実を確認することが出来ました。
## benchmarker:         release 4.0.1 (for python)
## python version:      3.4.0
## python compiler:     MSC v.1600 32 bit (Intel)
## python platform:     Windows-8-6.2.9200
...

## Ranking                real
join                    1.1875  (100.0) ********************
+ operator              1.6094  ( 73.8) ***************
% operator              2.0491  ( 58.0) ************
format                  3.5278  ( 33.7) *******
...


私が感じた Benchmarker.py の長所について列挙します。
  • 計測用のソースコードが書きやすい
  • 出力結果が見やすい
  • 計測方法の細かなチューニングが可能(ここでは使っていませんが)
  • 簡単に使用する分には、大半のオプションは未使用のままでもOK


本ブログではベンチマークの測定に、この Benchmarker.py を使っていきます。

0 件のコメント:

コメントを投稿