それが動作するとき、サイコは素晴らしいです。ただし、Pythonの32ビットバージョンに移行することを除けば、64ビットバージョンがすぐに入手できるようには見えません。CPUバウンドの一般的なPythonコードを高速化できるpsycoの代替手段はありますか?
2 に答える
答えは、代わりにPyPyを使用することです。http://psyco.sourceforge.net/introduction.htmlから:
2006年の私の計画は、Psycoで実装された手法をPyPyに移植することです。
2月のPyPyブログ投稿から:
...ハイライトとpypyのステータス:
*ほとんどのPythonベンチマークはCPythonやPsycoよりもはるかに高速に実行されます
*実際のPyPyコンパイラツールチェーン自体(200 KLocs)は2倍の速度で実行されます
* x86 32および64ビットをサポートし、処理中ですARMをサポートする
...
Psycoの開発者が指摘しているPyPyは、ボトルネックコードの速度を上げるためだけに、Psycoの便利な代替品ではありません。その別のエコシステム。
PyPyを使用すると、多くの影響があり、より大きなプロジェクトに対して多くの互換性の質問が発生し、広く行き渡る決定になります。つまり、Pythonリーダー開発者のフードと品質保証レベルから遠く離れた完全に異なるPython実装に切り替えることを意味します。PyPyは、ほとんどの実際の単語プロジェクトでの速度の向上のためにかなり誇大宣伝されています。最初の実行には時間がかかります。メモリフットプリントは巨大で醜いです。提示されたベンチマークは「選択」されています。また、プロジェクトに必要なライブラリ、またはGUI/サーバー/IDE /デバッグの問題が常に存在するため、表示が完全に停止したり、開発とデバッグの時間が増加したりします。速度の向上を予測することは困難であり、焦点を合わせることによって調整することはほとんどできません。気分が良くなるものは何もありません。
今日のCPython内のボトルネックコードを高速化するための成熟した代替手段は、Cythonとnumbaです。(ここには他の「カゲロウ」がいます)
CPython用のJITコンパイラライブラリであるNumba(Psycoと同様)は、数値コードに焦点を当てています。jit
ボトルネック関数に関数デコレータを配置するだけで、印象的な速度の向上(10..200x、psyco / PyPyよりも優れています)を提供します。numpy
そして、それは特に迅速で、箱から出してすぐにアレイと組み合わせることができます!(サイコとは異なり); ただし、これまでのところ、Numbaは他の通常のPythonコードに対して何も実行せず、大幅に遅くします。これは主にオブジェクト属性、文字列の断片、一般的なリスト、dictなどで機能します(最悪の場合:0.04倍の速度、Psycoよりも悪い)。Psycoとは異なり、Numbaは巨大なインストールであり、インポートが遅くなります(numpyを描画します)。ただし、代わりに、選択した関数からコンパイル済みの静的モジュールを作成することもできます。これにより、デプロイにnumbaをインストールする必要がなくなります(Cythonと同様)。
Cythonは、PythonとCの種類の混合言語静的コンパイラ(Python言語のスーパーセット)であり、Cコンパイラパイプラインを使用してDLLモジュールを生成します。通常、いくつかのボトルネック関数を別のモジュールにリファクタリングすることで使用されます。しかし、変更されていない大きなPythonモジュールがCythonでコンパイルされている場合でも、これにより、通常、すでに約2倍の速度向上が得られます。ただし、これらのコンパイル済みDLLモジュールは、.pyc/.pyo-sよりも大幅に大きくなります。Cythonは、いわばPythonバイトコードを直接C関数呼び出しに展開します。そしてそれは定数などでもう少し最適化を行います(Wheezy.webたとえば、デフォルトの種類のCythonizeのpipインストールは、警告なしに恥知らずな方法ですべてのコードをオン化します。これにより、開発中のデバッグと検査が困難になります)
変更されていないコードの「無料」の速度向上に加えて、特に数値/配列コードと一部のOO作業で、さらに大幅な速度向上(C速度に近づく)を、いくつかのCython静的型宣言をに配置することでかなり簡単な方法で実現できます。ホットスポットPythonコード。C速度の文字列処理には、多少複雑なコーディングが必要です。
Cythonを使用すると、ボトルネックに焦点を当て、Cythonタイプを使用してコードをきめ細かくシームレスに調整することにより、C速度までの速度を継続的に向上させることができます。これは独自の強みであり、Psyco、Numba、PyPyよりもはるかに大きな可能性を秘めています。行き止まりのない成熟したオプションです。