5

XCode を使用して OS X Mountain Lion で C++ を開発し、ローカル マシンで実行しています。デノーマル数に関連するパフォーマンスの問題があり、ゼロにフラッシュされるように FTZ フラグを設定したいと考えています。(デノーマルが実際に問題であることを確認しました。私の場合、それらをゼロにフラッシュしても精度の問題は発生しません。)ただし、XCodeで実際にこれを達成する方法についての情報は見つかりません。ビルド設定で変更できるオプションですか? または、どこかに入力する必要があるコードですか?どんな助けでも大歓迎です。

4

1 に答える 1

6

「/usr/include/fenv.h」のコメントを正しく理解していれば、

#include <fenv.h>
fesetenv(FE_DFL_DISABLE_SSE_DENORMS_ENV);

あなたがしたいことをするべきです。

    FE_DFL_DISABLE_SSE_DENORMS_ENV

    デフォルトの浮動小数点状態が変更された fenv_t オブジェクトへのポインター
    SSE ステータス/コントロール レジスタの DAZ ビットと FZ ビットを設定します。使用時
    この環境では、SSE ベースの計算 (これは
    通常、すべて単精度および倍精度のスカラー浮動小数点にする必要があります
    計算、およびすべての SSE/SSE2/SSE3 計算) はゼロとして扱われます。
    デノーマルである計算結果もゼロに切り捨てられます。

このオプションを設定すると、0.1f を 0 に変更するとパフォーマンスが 10 分の 1 低下する理由のプログラムの実行時間が短縮されました。(@Mysticial のコメントで提供されたリンク) 27 秒から 0.3 秒 (MacBook Pro、2.5 GHz Intel Core 2 Duo)。

于 2013-05-25T09:24:46.840 に答える