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

同カテゴリーの次の記事

インテル® コンパイラーのバージョンとインテル® Parallel Studio XE (Composer、Professional、Cluster の各エディション) のバージョンの対応表

この記事は、インテル® ソフトウェア・ネットワークに掲載されている「Consistency of Floating-Point Results using the Intel® Compiler」の日本語参考訳です。


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

Software Solutions Group
Intel Corporation

はじめに
ほとんどの実数のバイナリー浮動小数点 [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 アーキテクチャーに関する情報は、こちらを参照してください。

インテル® ソフトウェア製品のパフォーマンス/最適化に関する詳細は、最適化に関する注意事項 (英語) を参照してください。

関連記事