投稿

ラベル(pypy)が付いた投稿を表示しています

PyPy における Python のパフォーマンスチューニング

イメージ
これは PyPy Advent Calendar の記事です。PyPyのコアディベロッパーである " Maciej Fijalkowski " 氏のブログ " Analysing python's performance under PyPy " の抄訳+αです。 Python の一般的なパフォーマン解析のモデルは、" プロファイラ を実行して、ボトルネックを探し出し、それを最適化するか C で書き直す" ことです。しかし PyPy ではこのアプローチだけでは不十分です。なぜなら、 多くの大規模アプリケーションで、プロファイラはフラットです: PyPy のトランスレーションツールチェーン、Twisted、モダンな Web サーバ等が良い例です ボトルネックを発見したとしても、それが特定の関数内でのみ遅いのか、複数の関数が関係しているのか明確になるわけではありません。どうすれば遅くて、どうすれば速くなるかは CPython においても明確な答えはありません。JIT が適用されるとさらに複雑です。 JIT が特定のコードをどのようにコンパイルしたかを確認することが重要 になります。 パフォーマンスにおいては、特に GC 関連の問題は多くの関数に影響がありますが、プロファイルでは確認できません。 PyPy には、問題を解決するためのいくつかのツールが提供されています。プログラムのパフォーマン解析に関するいくつかの方法を示します。これはガイドラインであり、 銀の弾丸 ではありません。アプリケーションが複雑な場合は、多くの 鉛の弾丸 が必要でしょう。 >>>> テストを作成する これは品質に関するものではありません。多くの自動化されたテストを受けることで、その機能を失うことなく、よりパフォーマンスの高いコードにリファクタできるようにします。 >>>> ベンチマークを書く これが重要な出発点となります。ひとつのスクリプトで、できれば引数を指定して、変更の影響を測定できるようにする必要があります。 1 回だけしか実行されないスクリプトでない場合は、同じテストを繰り返し実...

PyPy! - PyPy Advend Calendar

イメージ
今年も Advent Calendar の季節が始まりました。この記事は Python を高速化するソリューション PyPy の Advent Calendar  の記事です。最初なので、簡単に PyPy の概要と PyPy-ja のご紹介をしたいと思います。 >>>> PyPy ってなんなの? @nati nati ueno PyPyは日本語で、おっぱいの意味なんだよ ってUSのpythonやってるエンジニアに教えたら「今日ほどいい日はない!って大喜びしてた」 Oct 06 via web Favorite Retweet Reply PyPy は Python 2.7.1 互換の高速な処理系です。現在、着々と py3k 対応の開発も進んでいます。Python 標準処理系である CPython と比較して以下のような特徴があります。 速度 : とにかく速いです。JIT パワーです。CPython と PyPy の速度は ここ に公開されています。現在は CPython の 5 倍ぐらい速いですね。特定の環境では Java より速いという 計測結果 もあります。ちなみに先日 Win32 環境で同じ計測をしましたが、Win32 環境では pypy 1.6 以降で Java よりも高速という 結果 がでましたよ。残念ながら 1.7 より 1.6 の方が高速という結果でしたが。。。 メモリ使用量 : 多い。ほんとにメモリ食います。JIT の作者 Antonio 氏に Python 生みの親の Guide (oh...) Guido 氏が "PyPy の JIT はなんで速いの?" と質問した時に、"オブジェクトが持っているデータをメモリ上の固定位置に配置してるのが効いているみたい" と答えたとのことです ( ats さんのブログより )。なるほど。 互換性 : 一部制限がありますが Python との互換性は高いです。1.7 になってさらに互換性が高まっています。動作する Python ライブラリは ここ にまとまっています。"このライブラリも動いたよ!" って方は是非この Wiki を編集してみてください。Django, Flask, Pyram...