このサイトについて

Pythonコードの高速化ソリューションと言えばPyPyだよね〜

Pythonコードの高速化ソリューションと言えばPyPyだよね〜

Pythonコードの高速化ソリューションはいろいろあるけど,実際に試してみたらPyPyが一番速かった,という話。

Speed up your Python: Unladen vs. Shedskin vs. PyPy vs. Cython vs. C

エントリのブログ主は,プロトタイピング段階でPythonで書いたコードを,ShedskinCythonUnladen SwallowPyPyを使ってどのくらい高速化するかベンチマークを取ってみた。ShedskinはPythonのコードをC++に,CythonはCにコンパイル。UnladenとPyPyはJITを使って実行を高速化する。

結果は以下のようになった。

Pure Python 59.174s
Shedskin 1m18.428s
Cython 39.824s
Unladden Swallow 44.050s
PyPy 10.316s

PyPyはRPythonという文法的にちょっとした制約があるPythonを使う必要がある(大抵のコードはそのまま動くらしいけど)。そういう制限があったとしても,ほぼPurePythonなコードをPyPyで動かすだけでここまで高速化できるというのは驚きだ。

今年の夏に行ったEuroPython 2010でPyPyのセッションで,ちょうどJITの作者Antonio Cuniさんが話してた。トークが終わった後「PyPyのJITはなんで速いの?」との質問に答えてAntonioさん曰く「オブジェクトが持っているデータをメモリ上の固定位置に配置してるのが効いているみたい」と言っていた。この質問をしたのは実はセッションを聞きに来てたGuidoで,彼自身もPyPyにとっても興味があるみたい。

動的型付け言語の高速化手法はいろいろあるけど,PyPyのアプローチは副作用も少ないし,straightforwardでかつ実際に成功を収めている数少ない例だと思う。あと数年もすると,Pythonのコードがほぼそのまま5倍とか場合によっては100倍の速度で動くような時代が来るかもね:-)。

2010-11-26 01:07