Hatena::ブログ(Diary)

at_yasuの日記もといメモ書き RSSフィード Twitter

2011-11-23

PyPy と Python25 と Python27

|  PyPy と Python25 と Python27を含むブックマーク

なんか最近PyPyがアツいので、ランダム文字列を作製するスクリプトをぶん回して、どれだけ早くやるのかパフォーマンステストをしてみる。決して仕事をする気が無かったわけではない。多分…

ソースはGithubに置いています。

ランダム文字列の作成をひたすらする(1024 * 1024回のループ)という物ですが、幾つかの気になる点があり、2つに分けています。

1. "%c" % (33) と chr(33) の違い

2. 一々printを実行して出力する場合と、buff に出力内容を貯めこんで処理が終わったら出力する方法

そんな訳で、version1 は 1,2 の前半部分を、version 2は 1,2 の後半部分を実行しています。


実行はそれぞれ五回し、それらのデータをGoogle Spreadsheetに放り込んで、ぐちゃぐちゃ平均出したりグラフ化しました。


データ

今回出てきたデータは下記の通り





Version1

atysPy/mksecret.py at master ? a-yasui/atysPy ? GitHub を各Pythonで実行した結果のグラフと平均数値。


PyPy

ループ回数平均値
1024 * 10.0343562
1024 * 20.0409856
1024 * 40.0040534
1024 * 80.0057876
1024 * 160.010769
1024 * 320.0338962
1024 * 640.0820702
1024 * 1280.147694
1024 * 2560.2733152
1024 * 5120.6933134


Python2.5

ループ回数平均値
1024 * 10.0194546
1024 * 20.0148114
1024 * 40.0287358
1024 * 80.0565998
1024 * 160.1143142
1024 * 320.234556
1024 * 640.4624256
1024 * 1280.9285392
1024 * 2561.835507
1024 * 5123.7459532



Python2.7

ループ回数平均値
1024 * 10.0142612
1024 * 20.013326
1024 * 40.0276422
1024 * 80.0551782
1024 * 160.1085156
1024 * 320.2178492
1024 * 640.4290228
1024 * 1280.8672428
1024 * 2561.7547842
1024 * 5123.541687


Version2

atysPy/mksecret2.py at master ? a-yasui/atysPy ? GitHub を各Pythonで実行した結果のグラフと平均数値。


PyPy

ループ回数平均値
1024 * 10.015102
1024 * 20.0315896
1024 * 40.0351068
1024 * 80.0047582
1024 * 160.011714
1024 * 320.0208524
1024 * 640.05388
1024 * 1280.1199696
1024 * 2560.2579054
1024 * 5120.8168172


Python2.5

ループ回数平均値
1024 * 10.0067516
1024 * 20.013839
1024 * 40.02695
1024 * 80.052154
1024 * 160.1057246
1024 * 320.2077588
1024 * 640.4151498
1024 * 1280.8546948
1024 * 2561.7140588
1024 * 5123.4095896


Python2.7

ループ回数平均値
1024 * 10.0061324
1024 * 20.0120738
1024 * 40.0246658
1024 * 80.0494102
1024 * 160.0988294
1024 * 320.2044644
1024 * 640.4146738
1024 * 1280.8462292
1024 * 2561.7249406
1024 * 5123.3590644



まとめ

loop countPyPy Version1PyPy Version2Python2.5 Version1Python2.5 Version2Python2.7 Version1Python2.7 Version2
1024 * 10.03435620.0151020.01945460.00675160.01426120.0061324
1024 * 20.04098560.03158960.01481140.0138390.0133260.0120738
1024 * 40.00405340.03510680.02873580.026950.02764220.0246658
1024 * 80.00578760.00475820.05659980.0521540.05517820.0494102
1024 * 160.0107690.0117140.11431420.10572460.10851560.0988294
1024 * 320.03389620.02085240.2345560.20775880.21784920.2044644
1024 * 640.08207020.053880.46242560.41514980.42902280.4146738
1024 * 1280.1476940.11996960.92853920.85469480.86724280.8462292
1024 * 2560.27331520.25790541.8355071.71405881.75478421.7249406
1024 * 5120.69331340.81681723.74595323.40958963.5416873.3590644

値がごちゃごちゃあってややこしいと自分自身で感じててどうなのよコレと、1024*1 〜 1024*64 までだけグラフ化。


で、面白いのがPyPyは平均して1秒切ってるのに対して、cPythonは見事に跳ね上がっています。





気になったので、グラフ化。

面白い事に、Print を使ったり、"%c"%(33) という文法の方が、buff+='' より早いという結果になっています。多分、メモリー周りなのかしら。



一方で、cPython ではパフォーマンスに大して差がありません。安定してます。






そんなわけで、GoogleSpreadSheetは少しExcelより癖ありますが、使いものになりますよっと。


はてブ米より

id:rokujyouhitoma さんから

> Matplotというのがあってだなぁ。

matplotlibですね、気が向けば使ってみますw

というのも、画像作って保存してフォトライフに保存してそれをダイアリーに貼付けをするって意外と手間なので、spreadsheet を使ったのです。

でもこれはこれで流しこみとかテストに良いです。教えて下さいまして、ありがとうございます。

トラックバック - http://d.hatena.ne.jp/at_yasu/20111123/p1