GCCを使用して浮動小数点算術の精度を高めることは可能ですか?

StackOverflow https://stackoverflow.com/questions/3774067

  •  04-10-2019
  •  | 
  •  

質問

広範囲にわたる浮動小数点計算を行うCの一部のプログラムは、PC Linuxボックスで正しい結果を得ますが、セルプロセッサのSPEでは誤った結果が得られますが、セルのPPUでは誤っていません。 GCCコンパイラを使用しています。丸め方などを増やすためのGCCコンピレーションオプションがあるのだろうか、そのため、より精度のある単一のフロート精度計算を取得します。 SPEのパフォーマンスが劇的に減少するので、私は2倍に変わることはできません

ありがとう

役に立ちましたか?

解決

IBMに基づいています SPUのIEEE754との違いのドキュメント, 、それは任意のものかもしれません:

  • 算術操作のゼロ結果は常に+0であり、決して-0ではありません。
  • 2-149から2-126から算術操作への非正規入力は、同じ記号でゼロとして扱われます。算術操作は、非正規の結果を生成することはありませんが、代わりに+0を生成します。
  • 算術操作は、IEEE INFまたはNANをサポートしていません。これらのビットパターンは有効な数値を表します。オーバーフローの結果は、適切な符号の最大値を生成します。
  • 算術操作は、フローティングポイントステータスおよびコントロールレジスタ(FPSCR)での丸めモードの設定に関係なく、丸からゼロ(CHOP、切り捨て)丸めモードのみを使用します。

もちろん、関連するページで 厳密なIEEE適合性のためにSPUコードをコンパイルすることもできます:

デフォルトでは、XL C/C ++はIEEE標準のすべてのルールではありませんが、ほとんどをフォローしています。最適化レベル-O3以下でデフォルトで有効にされる-QnoStrictオプションをコンパイルすると、一部のIEEEフローティングポイントルールは、パフォーマンスを改善しますが、プログラムの正しさに影響を与える可能性のある方法で違反されます。この問題を回避し、IEEE標準の厳格なコンプライアンスのためにコンパイルするには、以下を実行します。

  • -qfloat = nomafコンパイラオプションを使用します。
  • プログラムが実行時に丸めモードを変更する場合、-QFLoat = RRMオプションを使用します。
  • データまたはプログラムコードにシグナリングNAN値(NANS)が含まれている場合、-QFloat = NANSオプションを使用します。 (シグナリングNANは静かなNANとは異なります。プログラムまたはデータに明示的にコーディングするか、-QINITAUTOコンパイラオプションを使用して作成する必要があります。)
  • -O3、-O4、または-O5でコンパイルする場合、その後のオプション-QStrictを含めます。
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top