2017-11-03 7 views
2

FTZ/DAZモードでは、IEEE 754標準の厳密な遵守が問題ではないコードでは、コードを実行する可能性のある他のスレッドの動作を変更することなくパフォーマンスを向上させることができますは重要。スレッドに対してFTZおよびDAZ浮動小数点モードを一時的に有効にすることはできますか?

私はハンドリングデノーマルのパフォーマンスへの影響に無効/これらのモードを有効にする方法について thisthisを読んできたが、残念ながら私は、マルチスレッド環境での混合コードを持っていると私は一度とするために、これらのモードを有効にすることはできません

すべて。

MXCSRレジスタのフラグはハードウェアの動作を決定し、すべてのスレッドはレジスタの独自のコンテキストを持っているので、これらのフラグを設定することは現在のスレッドの動作にのみ影響します。

正しいですか?

答えて

5

はい、MXCSRは(xsave/xrstorを使用して)XMM/YMM/ZMMとのx87スタックレジスタと共に、コンテキストスイッチによって退避/復帰スレッドごとのアーキテクチャ状態の一部です。異なるスレッドは独自のFPU状態を持ちます。


面白いアイデア、私はいつも考え出したいDAZを使用すると、非正規定数や(ファイルまたはデータ)何かを持っていた場合にのみ有用であったが、FTZなしで実行されている他のスレッドを持つことはデノーマル数の別のソースです。

-ffast-math、またはそれらのオプションのサブセットでファイルをコンパイルすることもできます。 -ffast-mathをgccで連結することには、main()の前にDAZ/FTZを設定するCRT関数が含まれることに注意してください。

高速計算で有効になる最適化は、非正規化がゼロにフラッシュされるかどうかとほとんど直交しています。 -fno-math-errnoでさえ、より多くの数学関数をインライン(より良い/すべて)にすることができます。 sqrtfとなり、errnoが気にせず、NaNの結果を得ることができれば、完全に安全です。

関連する問題