2011-12-19 4 views
4

私は、最適化されたC++ソースコードを作成し、コンパイルのためにそれを友人に渡すタスクを持っています。つまり、私は最終的なコンパイルを制御しない、私はちょうどC + +プログラムのソースコードを書くことを意味します。GCCから最適化されたソースコードを取得

私は、コンパイル時にGCCの-O1(および-O2などの)オプションを使用して最適化を行うことができます。しかし、コンパイルされたプログラムではなく、どうやってこの最適化されたソースコードを入手できますか?私は私の友人のコンパイラのパラメータを設定することができません、なぜ私は私の側で良いソースを作る必要があります。

+1

「最適化された」ソースコードを書くことができますが、キャッシュや微調整アルゴリズム(数学的背景が役立つかもしれません)について考えると、ターゲットシステムでプロファイリングを実行できない場合は最適なコードを書くのは難しいですあなたのボトルネックを見つけてください。 –

答えて

3

あなたは、様々な "段階" でGCCダンプへの内部(GIMPLE、...)表現を求めることができます。 GCCの中途半端は数百回のパスで構成されており、GCCにarguments-fdump-tree-allまたは-fdump-gimple-allなど)をダンプするよう依頼することができます。 1回のコンパイルで何百ものダンプファイルを取得できることに注意してください。

しかし、GCCの内部表現は非常に低いレベルなので、多くの資料を読まなければ理解できないはずです。

IはmentionningいダンプオプションはGCC内部の作業、またはCでコーディングさプラグイン又は拡張(GCCを拡張するために高レベルのドメイン固有言語)MELTで符号化を通してそれを拡張したものとほとんど有用です。彼らがあなたの友人にとって非常に役に立つとは思っていません。ただし、最適化パスには複雑な処理がたくさんあることを理解するのに便利です。

そして時期尚早の最適化は悪であることを忘れないでください:あなたは、最初のプログラムが正しく実行させる、その後、ベンチマークおよびそれをプロファイル、最後にあなたの努力の価値があるいくつかの部品を最適化する必要があります。あなたはおそらく、正確な&の効率的なプログラムをテストして実行することなく、それをあなたの友人に与える前に実行することはできません。

1

簡単に - 可能な限り最適なアルゴリズムを選択し、残りはオプティマイザで処理します。

ソースコードの最適化はバイナリの最適化とは異なります。 ソースコードを最適化するコンパイラはバイナリを最適化します。

アルゴリズムの選択以外は何らかのプロファイリングが必要です。確かに、コードの速度を上げることができる方法がありますが、コードによっては読みにくいものがあります。必要なときと測定した後でのみ最適化します。

+1

"**あなたは**アルゴリズム**を最適化しようとすべきです** **コンパイラ**は**バイナリ**を最適化しようとします" – CAFxX

5

GCCによって行われる最適化は低レベルです。つまり、C++コードを再度取得するのではなく、最適な場合にアセンブリコードを取得することを意味します。しかし、あなたはそれを何かに変換することはできません。

合計:オブジェクトレベルではなく、コードレベルでソースコードを最適化します。

関連する問題