浮動小数点アプリケーションのプログラミング目標

一般に、浮動小数点アプリケーションのプログラミングの目標は、次のカテゴリーに分けられます。

アプリケーションの目標に基づいて、これらの要素のトレードオフを調整する必要があります。例えば、3D グラフィック・エンジンを開発していれば、パフォーマンスが最も重要な考慮事項であり、再現性と精度は、2 番目になるかもしれません。

インテル(R) コンパイラーは、-fp-model (Linux* および Mac OS* X) または /fp (Windows*) オプションのような適切なコンパイラー・オプションを提供します。このようなオプションを使用し、特定の目標に合わせてアプリケーションをチューニングできます。コンパイラーは、指定されたコンパイラー・オプションによって、異なる処理をコードに適用します。次にコード例を示します。

float t0, t1, t2;

...

t0=t1+t2+4.0f+0.1f;

 

精度を優先して、-fp-model extended (Linux および Mac OS X) または /fp:extended (Windows) オプションを指定すると、コンパイラーは次のアセンブリー・コードを生成します。

fld       DWORD PTR _t1

fadd      DWORD PTR _t2

fadd      DWORD PTR _Cnst4.0

fadd      DWORD PTR _Cnst0.1

fstp      DWORD PTR _t0

 

再現性と移植性を優先して、-fp-model source (Linux および Mac OS X) または /fp:source (Windows) オプションを指定すると、コンパイラーは次のアセンブリー・コードを生成します。

movss     xmm0, DWORD PTR _t1

addss     xmm0, DWORD PTR _t2

addss     xmm0, DWORD PTR _Cnst4.0

addss     xmm0, DWORD PTR _Cnst0.1

movss     DWORD PTR _t0, xmm0

 

パフォーマンスを優先して、-fp-model fast (Linux および Mac OS X) または /fp:fast (Windows) オプションを指定すると、コンパイラーは次のアセンブリー・コードを生成します。

movss     xmm0, DWORD PTR _Cnst4.1

addss     xmm0, DWORD PTR _t1

addss     xmm0, DWORD PTR _t2

movss     DWORD PTR _t0, xmm0

多くの場合、アプリケーションは遥かに複雑になるでしょう。プログラミング目標を熟考し、適切なコンパイラー・オプションを選択して、各要素間のトレードオフを調整してください。