0

ホームディレクトリにpython 2.6.6を構築しており、使用しているパッケージの速度とメモリ使用量を最適化しようとしています。このページを読んで、CFLAGS='-g -O2'それはそれをより速くすることになっていると言います。

いくつかの検索の後、コンパイラに渡すある種のフラグであることを読みましたが、これが Python の速度を最適化する理由を説明していません (実際には、他の値がルビーなどの他のものを最適化するようです)。

現在、非常に時間がかかるため、自分が行っていることでより多くのパフォーマンスを得るために、それをよりよく理解したいと思います. これらのフラグの意味を説明できる人はいますか?どのような意味で Python の速度を向上させることができますか? ありがとうございました

4

2 に答える 2

5

-O2 フラグは、C コンパイラに特定の最適化の選択を行うように指示します。GCC 最適化フラグのドキュメントを参照してください。

Python インタープリターは C で書かれています。コンパイラが生成するマシンコードを最適化することは、コードがいくつかの一般的な速度のボトルネックを回避するため、プログラムをより高速に実行できることを意味します。これは Python だけに当てはまるわけではありません。

欠点は、特定の積極的な最適化によってエラーが発生したり、速度が低下したりする可能性があることです。これは、これらの最適化に対して行われた仮定が正しくないことが判明したためです。何が機能するかはプログラムによって異なります。最適化が何をするかについての詳細な知識と、導入された問題をキャッチするための完全なテスト スイートがない場合は、その知識を持っている人が最適化設定を使用するように指示しない限り、これらのフラグを使用しないでください。

代わりに、独自の Python コードの最適化に集中する方がよいでしょう。そこには、はるかに大きな利益があります。コードのプロファイリングを行い、データ構造を再考し、必要に応じて C の部分を Python 拡張として書き直します。また、特定のタスクに時間がかかるのは、取り組んでいる問題領域の事実である場合もあります。

于 2013-08-05T12:03:26.933 に答える
2

-Oコンパイラの最適化を有効にする一般的なコンパイラ フラグです。これらの最適化は、特に最適化をまったく行わない場合と比較して、パフォーマンスを向上させるためにコンパイラによって実行されます。ただし、最適化によってコンパイル時間が長くなり、最適化によっては最終的なコードが大きくなる場合があります。

GCC ファミリのコンパイラで-Oは、実行する最適化のレベルを指定する文字または数字が後に続く場合があります。デフォルトでは、最適化は行われません (最速のコンパイルのため)。-O基本的な最適化です。-O2はより最適化されており、-O3積極的な (そして場合によっては安全でない) 最適化です。ほとんどのプロジェクトの通常のレベルは-O2、コード サイズを大幅に増加させたり、潜在的にバグを導入したりすることなく、優れたパフォーマンスの向上を提供するためです。-Osさらに、コードの速度を上げることを目的とする代わりに、コード サイズを最小限に抑えるために代わりに使用できます。

Python のほとんどのリリースされたビルドは、ある程度の最適化を行ってビルドされているため、独自のビルドを作成してもパフォーマンスが大幅に向上する可能性は低いことに注意してください。プログラムが遅い場合は、アルゴリズムを変更してプログラムを高速に実行できる可能性があります。

-gデバッグ情報を生成することを意味し、Python のデバッグを容易にします。Python 用に開発している場合を除き、これは必要ありませんが、残しても害はありません (最終的なバイナリを少し大きくすることを除いて)。

于 2013-08-05T12:02:23.347 に答える