インテル® コンパイラーの浮動小数点演算における結果の一貫性

インテル® DPC++/C++ コンパイラーインテル® Fortran コンパイラー

この記事は、インテル® ソフトウェア・ネットワークに掲載されている「Consistency of Floating-Point Results using the Intel® Compiler」(http://software.intel.com/en-us/articles/consistency-of-floating-point-results-using-the-intel-compiler/) の日本語参考訳です。


なぜアプリケーションの答えが常に同じにならないのか?
Dr. Martyn J. Corden
David Kreitzer

Software Solutions Group
Intel Corporation

ダウンロード [PDF]

はじめに
ほとんどの実数のバイナリー浮動小数点 [FP] 表現は不正確で、浮動小数点数を含むその演算結果には特有の不確実性があります。浮動小数点アプリケーションのプログラマーは通常、次の目的を持ってプログラミングを行います。

  • 精度
    • 正確な演算の結果に「近い」結果を生成する。
      • 通常は相対誤差で測定し、場合により「最下位桁単位」 (ulp) で測定する。
  • 再現性
    • 一貫性のある結果を生成する。
      • 実行ごとに同じ結果
      • 異なるビルドオプションで同じ結果
      • 異なるコンパイラーで同じ結果
      • 異なるプロセッサーやオペレーティング・システムで同じ結果
  • パフォーマンス
    • できるだけ速く動作するアプリケーションを生成する

これらの目的は、多くの場合互いに矛盾します。ただし、プログラミングの経験を積み、適切なコンパイラー・オプションを使用することで、トレードオフを制御することができます。

例えば、計算特有の精度を超える再現性があると役立つことがあります。ソフトウェアの品質保証テストでは、演算結果の数学的な不確実性がかなり高いと思われる場合でも、変更の前後で、ソフトウェアがビット単位で「近似」である必要があります。正しいコンパイラー・オプションを使用すると、(最適ではありませんが) 十分なパフォーマンスを保ちつつ、一貫した、非常に近い結果を生成することができます。

結論
コンパイラー・オプションで、精度、再現性、パフォーマンスのトレードオフを制御することができます。パフォーマンスに与える影響を抑えながら浮動小数点の一貫性と再現性を改善するには、/fp:precise /fp:source (Windows*) または –fp-model precise –fp-model source (Linux* および OS X*) を使用します。同じアーキテクチャーの異なる種類のプロセッサーにおける再現性が重要な場合は、/Qimf-arch-consistency:true (Windows*) または -fimf-arch-consistency=true (Linux* および OS X*) も使用します。

FMA 命令をサポートするプロセッサーとしないプロセッサーの間で再現性のある結果を生成するには、/Qfma- (Windows*) または -no-fma (Linux* および OS X*) も一緒に指定します。インテル® コンパイラー 17 では、/fp:consistent (Windows*) または -fp-model consistent (Linux* および OS X*) を指定するだけで、上記のオプションがすべて設定され、最良の再現性が得られます。

インテル® コンパイラー 17 に関する更新を含む記事の全文 (PDF) は、こちらよりダウンロードいただけます。

インテル® MIC アーキテクチャーに関する情報は、こちらを参照してください。

コンパイラーの最適化に関する詳細は、最適化に関する注意事項を参照してください。

タイトルとURLをコピーしました