私が取り組んでいるプロジェクトでは、最適化しようとしている大きなファイルに4重ループforループがあります。コンパイラが-funroll-オールループ。しかし、このフラグをコンパイラに追加すると、他のループがファイルの残りの部分を展開し、全体的なプログラムの実行が遅くなります。ファイル全体ではなくファイル内の特定の関数にのみコンパイラフラグを適用する方法がありますか(おそらく#pragmaを介して)?GCC - 特定の関数でのみコンパイラフラグを有効にする
ありがとうございます。
私が取り組んでいるプロジェクトでは、最適化しようとしている大きなファイルに4重ループforループがあります。コンパイラが-funroll-オールループ。しかし、このフラグをコンパイラに追加すると、他のループがファイルの残りの部分を展開し、全体的なプログラムの実行が遅くなります。ファイル全体ではなくファイル内の特定の関数にのみコンパイラフラグを適用する方法がありますか(おそらく#pragmaを介して)?GCC - 特定の関数でのみコンパイラフラグを有効にする
ありがとうございます。
私は、その特定の機能を別の.cファイルに移動することをお勧めします。このファイルは、使用する余分なオプションとともにコンパイルできます。これは、既存.cファイルとそれらを
GCC function attributeoptimize
元.cファイルにstaticとして宣言されたすべての変数を共有することを可能にする新しいものの間で共有するために「foo_private.h」スタイルのヘッダを作成する必要があり1つの関数に対して最適化オプションを設定するために使用できます:
void foo(int bar) __attribute__((optimize ("unroll-all-loops")))
{
}
おそらく実際の問題は4つのネストループです – Joe