広範な浮動小数点計算を行うCの一部のプログラムは、PC Linuxボックスでは正しい結果を取得しますが、セルプロセッサのSPEでは間違った結果を取得しますが、セルのPPUでは取得しません。私はgccコンパイラを使用しています。丸め方法などを増やすためのgccコンパイルオプションがあるので、単精度浮動小数点精度の計算をより正確に行うことができるのではないかと思います。SPEのパフォーマンスが大幅に低下するため、2倍に変更することはできません
ありがとう
広範な浮動小数点計算を行うCの一部のプログラムは、PC Linuxボックスでは正しい結果を取得しますが、セルプロセッサのSPEでは間違った結果を取得しますが、セルのPPUでは取得しません。私はgccコンパイラを使用しています。丸め方法などを増やすためのgccコンパイルオプションがあるので、単精度浮動小数点精度の計算をより正確に行うことができるのではないかと思います。SPEのパフォーマンスが大幅に低下するため、2倍に変更することはできません
ありがとう
SPUでのIEEE754との違いに関するIBMの資料に基づくと、次のようなものが考えられます。
- 算術演算の結果がゼロになるのは常に+0であり、-0になることはありません。
- 算術演算への2-149から2-126への非正規入力は、同じ符号のゼロとして扱われます。算術演算は異常な結果を生成することはありませんが、代わりに+0を生成します。
- 算術演算はIEEEInfまたはNaNをサポートしていません。これらのビットパターンは有効な数値を表します。オーバーフローの結果は、適切な符号の最大の大きさの値を生成します。
- 算術演算は、倍精度算術演算にのみ影響する浮動小数点ステータスおよび制御レジスタ(FPSCR)の丸めモードの設定に関係なく、ゼロへの丸め(チョップ、切り捨て)丸めモードのみを使用します。
もちろん、関連ページで、厳密な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を含めます。