2

特定のg ++​​(具体的にはg ++-4.9)コンパイルオプションを特定のコード行または少なくとも対象となる関数にローカライズする簡単な方法を探しています。私は一般的に言えば興味がありますが、特に 、-fast-math-ffinite-math-onlyおよび-fno-signed-zerosオプションにも興味があります。

*.cpp ファイル レベルでのローカライズはmakeユーティリティで可能だと思いますが、#pragma や __attribute__ などを使用して、コード自体でそれを有効にする方法があることを願っています。これは、外部ファイルへの依存を最小限に抑えるためだけでなく (つまり、不正のリスクmakefile)、特定の FP 動作を関数内の特定の方程式にハイパーローカライズするためにも行いたいと考えています。

makefileまたは、インライン ディレクティブによる FP 動作のローカライズが不可能な場合、プロジェクト ビルドで目的のコンパイラ ディレクティブが有効になっていない場合 (たとえば、紛失または不適切に変更された場合) 、少なくともコンパイル時エラーをトリガーするにはどうすればよいでしょうか。

このようなインライン最適化は、この場合は g++ のコンパイラ固有のものである可能性があると推測しますが、それは私が喜んで妥協します。

4

3 に答える 3

6

関数属性gccを使用できます: optimize

void f () __attribute__ ((optimize("fast-math"), optimize("finite-math-only"), optimize("no-signed-zeros")));
于 2015-08-28T16:26:47.157 に答える
2

「ローカライズ」という言葉を正しく使用しているかどうかわかりません。ローカリゼーションは、さまざまな人間の言語 (フランス語、ロシア語、中国語など) のユーザーにソフトウェアを適応させることに関連しています。

おそらく、他の最適化フラグを使用していくつかの関数を最適化するようにコンパイラーに依頼したいと思うでしょう。

これは#pragma GCC optimizeetc... またはいくつかの関数属性を使用して可能です

于 2015-08-28T16:31:26.367 に答える
1

関数属性のオプションを使用して、これの一部を有効にできる場合がありfpmathますが、ドキュメントからはわかりませんでした。それを踏まえて、代わりに検出に焦点を当てます。

-fast-mathすでにオン-ffinite-math-onlyになっているので、心配する必要はありません。言うためのドキュメント-fast-math

このオプションにより、プリプロセッサ マクロFAST_MATHが定義されます。

つまり、経由で検出できます

#ifndef __FAST_MATH__
#error "The -fast-math compiler option is required"
#endif

の存在を検出するコンパイル時の方法をまだ見つけていません-fno-signed-zeros

于 2015-08-28T16:22:07.197 に答える