インテル® ソフトウェア・ツールにおける浮動小数点結果の再現性

同カテゴリーの次の記事

Doctor Fortran による「終わりは近い」

parallel_v34

ほとんどの実数のバイナリー浮動小数点 (FP) 表現は不正確で、浮動小数点数を含むその演算結果には特有の不確実性があります。そのため、異なる条件下で計算を行うと、結果は予想される不確実さの範囲内で一貫していますが、異なる可能性もあります。通常は問題になりませんが、一部のコンテキストではより高い再現性が求められます (例: 品質保証、法的問題、機能安全要件など)。しかし、完全な再現性または高い再現性を達成するには、通常、パフォーマンスが犠牲になります。

再現性とは?

再現性の定義は人それぞれです。最も基本的なことは、同じプロセッサー上で、同じデータを使用して、同じ実行ファイルを繰り返し実行した場合、常に同一の結果が生成されることです。これは、繰り返し性または実行再現性と呼ばれます。結果が必ずしも決定的ではなく、再現性が自動的に提供されないことに驚いたり、ショックを受けるユーザーもいます。

再現性はまた、異なるプロセッサー・タイプをターゲットとし実行した場合、異なる最適化レベルでビルドした場合、あるいは異なる並列処理タイプやレベルで実行した場合に、同一の結果が生成されることを意味します。これは、条件付き数値再現性と呼ばれます。完全に再現性のある結果を得るために必要な条件はコンテキストに依存し、パフォーマンスが低下する可能性があります。

多くのソフトウェア・ツールは、デフォルトでは完全に再現性のある結果をもたらしません。

差異の原因

浮動小数点結果が異なる主な原因は、最適化です。最適化には、次のものが含まれます。

  • ビルド時または実行時に特定のプロセッサーと命令セットをターゲットにする
  • さまざまな形式の並列処理

現代のプロセッサーでは、パフォーマンスの利点が非常に大きいため、大規模なアプリケーションでも最適化を行わないことはほとんどありません。精度が異なる原因として、次のようなものがあります。

  • 数学関数や除算などの操作の近似値が異なる
  • 中間結果の計算と格納に使用される精度
  • 正規化されていない非常に小さな値がゼロとして扱われる
  • FMA (Fused Multiply Add) 命令などの特殊命令の使用

FMA のような特殊命令は、通常、乗算と加算を個別に行うよりも高い精度が得られますが、最終結果は変わる可能性があります。

FMA の生成は、インテル® アドバンスト・ベクトル・エクステンション 2 (インテル® AVX2) 以上の命令セットをターゲットとする場合に O1 以上で有効になる最適化です。言語標準ではカバーされていないため、コンパイラーは異なるコンテキストでは異なる最適化を適用する可能性があります (例: FMA をサポートする異なるプロセッサーに対して異なる最適化を適用することがあります)。

おそらく、差異の最も重要な原因は、特に並列アプリケーションの場合、操作の順序でしょう。異なる順序は数学的には等価かもしれませんが、有限精度演算では、丸め誤差により差異が生じたり、合計結果が異なることがあります。異なる結果が必ずしも精度が低いわけではありませんが、ユーザーは最適化されていない結果が正しいと見なすことがあります。

例えば、図 1 に示すような、コンパイラーがパフォーマンス向上のために行う変換があります。

関連記事

  • インテル® Xeon Phi™ プロセッサー向けのコードの現代化インテル® Xeon Phi™ プロセッサー向けのコードの現代化 この記事は、インテルの The Parallel Universe Magazine 26 号に収録されている、新しいインテル® Parallel Studio XE 2017 の機能を利用したインテル® Xeon Phi™ […]
  • 将来に対応したコードの最適化によるソフトウェアの現代化将来に対応したコードの最適化によるソフトウェアの現代化 この記事は、インテル® デベロッパー・ゾーンに公開されている「Modernizing Software with Future-Proof Code Optimizations」の日本語参考訳です。 この記事の PDF 版はこちらからご利用になれます。 新しいインテル® Parallel Studio XE […]
  • Parallel Universe マガジンParallel Universe マガジン Parallel Universe へようこそ。 米国インテル社が四半期に一度オンラインで公開しているオンラインマガジンです。インテルの技術者によるテクノロジーの解説や、最新ツールの紹介など、並列化に関する記事を毎号掲載しています。第1号からのバックナンバーを PDF 形式で用意しました、ぜひご覧ください。 12 […]
  • インテル Parallel Universe 26 号日本語版の公開インテル Parallel Universe 26 号日本語版の公開 インテル Parallel Universe マガジンの最新号が公開されました。この号では、インテル® Xeon Phi™ プロセッサー向けのコードの現代化について説明します。また、インテル® Parallel Studio XE 2017 […]
  • インテル® MKL 2017: 複雑な問題を解くためのクックブックインテル® MKL 2017: 複雑な問題を解くためのクックブック インテル® マス・カーネル・ライブラリー (インテル® MKL) には、行列を乗算する、連立方程式を解く、フーリエ変換を行うなど、さまざまな数値問題を解く際に役立つ多くのルーチンが含まれています。専用のインテル® MKL ルーチンが用意されていない問題については、インテル® MKL […]