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 * 1 | 0.0343562 |
1024 * 2 | 0.0409856 |
1024 * 4 | 0.0040534 |
1024 * 8 | 0.0057876 |
1024 * 16 | 0.010769 |
1024 * 32 | 0.0338962 |
1024 * 64 | 0.0820702 |
1024 * 128 | 0.147694 |
1024 * 256 | 0.2733152 |
1024 * 512 | 0.6933134 |
Python2.5
ループ回数 | 平均値 |
---|---|
1024 * 1 | 0.0194546 |
1024 * 2 | 0.0148114 |
1024 * 4 | 0.0287358 |
1024 * 8 | 0.0565998 |
1024 * 16 | 0.1143142 |
1024 * 32 | 0.234556 |
1024 * 64 | 0.4624256 |
1024 * 128 | 0.9285392 |
1024 * 256 | 1.835507 |
1024 * 512 | 3.7459532 |
Python2.7
ループ回数 | 平均値 |
---|---|
1024 * 1 | 0.0142612 |
1024 * 2 | 0.013326 |
1024 * 4 | 0.0276422 |
1024 * 8 | 0.0551782 |
1024 * 16 | 0.1085156 |
1024 * 32 | 0.2178492 |
1024 * 64 | 0.4290228 |
1024 * 128 | 0.8672428 |
1024 * 256 | 1.7547842 |
1024 * 512 | 3.541687 |
Version2
atysPy/mksecret2.py at master · a-yasui/atysPy · GitHub を各Pythonで実行した結果のグラフと平均数値。
PyPy
ループ回数 | 平均値 |
---|---|
1024 * 1 | 0.015102 |
1024 * 2 | 0.0315896 |
1024 * 4 | 0.0351068 |
1024 * 8 | 0.0047582 |
1024 * 16 | 0.011714 |
1024 * 32 | 0.0208524 |
1024 * 64 | 0.05388 |
1024 * 128 | 0.1199696 |
1024 * 256 | 0.2579054 |
1024 * 512 | 0.8168172 |
Python2.5
ループ回数 | 平均値 |
---|---|
1024 * 1 | 0.0067516 |
1024 * 2 | 0.013839 |
1024 * 4 | 0.02695 |
1024 * 8 | 0.052154 |
1024 * 16 | 0.1057246 |
1024 * 32 | 0.2077588 |
1024 * 64 | 0.4151498 |
1024 * 128 | 0.8546948 |
1024 * 256 | 1.7140588 |
1024 * 512 | 3.4095896 |
Python2.7
ループ回数 | 平均値 |
---|---|
1024 * 1 | 0.0061324 |
1024 * 2 | 0.0120738 |
1024 * 4 | 0.0246658 |
1024 * 8 | 0.0494102 |
1024 * 16 | 0.0988294 |
1024 * 32 | 0.2044644 |
1024 * 64 | 0.4146738 |
1024 * 128 | 0.8462292 |
1024 * 256 | 1.7249406 |
1024 * 512 | 3.3590644 |
まとめ
loop count | PyPy Version1 | PyPy Version2 | Python2.5 Version1 | Python2.5 Version2 | Python2.7 Version1 | Python2.7 Version2 |
---|---|---|---|---|---|---|
1024 * 1 | 0.0343562 | 0.015102 | 0.0194546 | 0.0067516 | 0.0142612 | 0.0061324 |
1024 * 2 | 0.0409856 | 0.0315896 | 0.0148114 | 0.013839 | 0.013326 | 0.0120738 |
1024 * 4 | 0.0040534 | 0.0351068 | 0.0287358 | 0.02695 | 0.0276422 | 0.0246658 |
1024 * 8 | 0.0057876 | 0.0047582 | 0.0565998 | 0.052154 | 0.0551782 | 0.0494102 |
1024 * 16 | 0.010769 | 0.011714 | 0.1143142 | 0.1057246 | 0.1085156 | 0.0988294 |
1024 * 32 | 0.0338962 | 0.0208524 | 0.234556 | 0.2077588 | 0.2178492 | 0.2044644 |
1024 * 64 | 0.0820702 | 0.05388 | 0.4624256 | 0.4151498 | 0.4290228 | 0.4146738 |
1024 * 128 | 0.147694 | 0.1199696 | 0.9285392 | 0.8546948 | 0.8672428 | 0.8462292 |
1024 * 256 | 0.2733152 | 0.2579054 | 1.835507 | 1.7140588 | 1.7547842 | 1.7249406 |
1024 * 512 | 0.6933134 | 0.8168172 | 3.7459532 | 3.4095896 | 3.541687 | 3.3590644 |
値がごちゃごちゃあってややこしいと自分自身で感じててどうなのよコレと、1024*1 〜 1024*64 までだけグラフ化。
で、面白いのがPyPyは平均して1秒切ってるのに対して、cPythonは見事に跳ね上がっています。
気になったので、グラフ化。
面白い事に、Print を使ったり、"%c"%(33) という文法の方が、buff+='' より早いという結果になっています。多分、メモリー周りなのかしら。
一方で、cPython ではパフォーマンスに大して差がありません。安定してます。
そんなわけで、GoogleSpreadSheetは少しExcelより癖ありますが、使いものになりますよっと。
はてブ米より
id:rokujyouhitoma さんから
> Matplotというのがあってだなぁ。
matplotlibですね、気が向けば使ってみますw
というのも、画像作って保存してフォトライフに保存してそれをダイアリーに貼付けをするって意外と手間なので、spreadsheet を使ったのです。
でもこれはこれで流しこみとかテストに良いです。教えて下さいまして、ありがとうございます。