7

(特定のマシンで) 最適なコンパイラ オプションを自動的に見つけて、実行可能ファイルを最速にする方法はありますか?

当然、私は を使用しますg++ -O3が、コードの実行を高速化する追加のフラグがあります。たとえば-ffast-math、ハードウェアに依存するものもあります。

configure.acコマンドによってフラグが Makefile に自動的に追加されるように、ファイル (GNU autotools) に入れることができるコードを誰かが知っています./configureか?

最適なフラグを自動的に決定することに加えて、ほとんどの最適化された実行可能ファイルのデフォルトとして使用するのに適した、いくつかの便利なコンパイラ フラグに興味があります。

更新:ほとんどの人は、さまざまなフラグを試して、経験的に最適なものを選択することを提案しています。その方法については、フォローアップの質問があります: 私が実行しているマシンで可能なすべてのコンパイラ フラグを一覧表示するユーティリティはありますか (たとえば、SSE 命令が使用可能かどうかのテストなど)?

4

8 に答える 8

4

構成時にこれを行うことはできないと思いますが、特定の実行可能ファイルとマシンを指定して gcc オプションフラグを最適化しようとするプログラムが少なくとも 1 つあります。たとえば、 http://www.coyotegulch.com/products/acotea/を参照してください。

ターゲット マシンに関するある程度の知識があれば、これを使用して、コードに適した一連のオプションを見つけることができる場合があります。

于 2010-03-14T18:52:57.700 に答える
4

ええと - はい。これは可能です。プロファイルに基づく最適化を調べてください。

于 2010-03-14T18:53:29.030 に答える
2

-mcpu=native/ -mtune=nativegccオプションも参照してください。

于 2010-03-14T19:55:47.810 に答える
2

グーグルで調べた後、このスクリプトを見つけました:gcccpuopt

私のマシンの1つ(32ビット)では、次のように出力されます。

-march=pentium4 -mfpmath=sse

別のマシン (64 ビット) では、次のように出力されます。

$ ./gcccpuopt 
Warning: The optimum *32 bit* architecture is reported
-m32 -march=core2 -mfpmath=sse

したがって、完全ではありませんが、役立つ場合があります。

于 2010-03-14T19:27:14.170 に答える
2

一部のコンパイラは、特定のコンパイル ホストに対して最も積極的な最適化を自動的に選択する「-fast」オプションを提供します。http://en.wikipedia.org/wiki/Intel_C%2B%2B_Compiler

残念ながら、g++ は同様のフラグを提供していません。

次の質問へのフォローアップとして、g ++の場合、-mtuneオプションを一緒に使用する-O3と、かなり高速なデフォルトが得られます。課題は、コンパイル ホストのプロセッサ タイプを見つけることです。誰かが必要なテストを書いたことを確認するために、autoconf マクロ アーカイブを見たいと思うかもしれません。それ以外の場合、Linux を想定する/proc/cpuinfo と、プロセッサの種類を取得するために解析する必要があります

于 2010-03-14T18:48:27.270 に答える
1

(特定のマシンで) 最適なコンパイラ オプションを自動的に見つけて、実行可能ファイルを最速にする方法はありますか?

いいえ。

さまざまなコンパイラ オプションを使用してプログラムをコンパイルし、すべてのバージョンをベンチマークして、「最も速い」バージョンを選択することもできますが、それはほとんど信頼できず、おそらくプログラムには役に立ちません。

于 2010-03-14T18:40:37.780 に答える
0

これは私にとってはうまくいく解決策ですが、セットアップには少し時間がかかります。Hans Petter Langtangen による「計算科学のための Python スクリプト」(私の意見では優れた本) では、短い Python スクリプトを使用して数値実験を行い、C/Fortran/... に最適なコンパイラ オプションを決定する例が示されています。プログラム。これについては、第 1.1.11 章「ネストされた異種データ構造」で説明されています。

この本の例のソース コードは、http://folk.uio.no/hpl/scripting/index.htmlで自由に入手できます(ライセンスがよくわからないので、ここではコードを複製しません)。ファイル src/app/wavesim2D/F77/compile.py の TCSE3-3rd-examples.tar.gz のコードで、同様の数値テストのコードを見つけることができます。これは、スクリプトを作成するためのベースとして使用できます。特定のシステム/言語 (あなたの場合は C++) に適しています。

于 2010-03-15T01:11:11.140 に答える
-2

アプリの最適化は主にあなたの仕事であり、コンパイラの仕事ではありません。

これが私が話していることの例です。

それが完了したら、アプリがコンピューティング バウンドで、コードに (ライブラリ コードではなく) ホットスポットがある場合は、速度に対するコンパイラの最適化によって多少の違いが生じるため、さまざまなフラグの組み合わせを試すことができます。

于 2010-03-15T14:17:17.593 に答える