XL Fortran for AIX V8.1.1

ユーザーズ・ガイド


POWER および POWER2 アーキテクチャーでの浮動小数点処理

以下の項では、 |POWER および POWER2 プロセッサーでの浮動小数点処理について述べます。

計算の精度

POWER および POWER2 の浮動小数点ハードウェアは、 IEEE の倍精度モードですべての計算を実行します。その場合には、単精度計算を直接実行するのではありませんが、次のような操作順序を使って単精度結果を生成することができます。

  1. 単精度操作のすべての単精度オペランドを倍精度に変換する。
  2. 同等の倍精度操作を実行する。
  3. 結果を単精度に丸める。

この順序では、単精度の IEEE 操作が実行されたかのような、ビットごとにまったく同じ結果が常に得られます。

PowerPC マシンの場合と同じように、パフォーマンス上の望ましくない影響が、単精度から倍精度への変換によって生じることはありませんが、倍精度から単精度への丸め操作では生じます。通常、丸め操作によるパフォーマンスへの悪影響は、 POWER または POWER2 マシンでのすべての単精度計算にも波及するため、コンパイラーは、丸め操作の回数の減少を試みます。それは、 -qfloat オプションの norndsngl サブオプションの制御下で行われます。

norndsgnl サブオプションが指定されると、コンパイラーは、単精度操作のすべての中間結果を倍精度のまま放置します。つまり、前述の順序における丸め操作が抑止されます。コンパイラーが式の最終結果で丸め操作を実行するのは、その結果を単精度メモリー位置に保管するときだけです。

以下に示す例は、norndsngl サブオプションと rndsngl サブオプションの使用法における違いを示しています。

REAL(4) a,b,c,d
...
a = b + c + d

norndsngl が使われると、コンパイラーは次のことを行います。

  1. 丸めないで、倍精度で b + c の中間計算を実行する。
  2. 倍精度結果を d に追加する。
  3. 最終倍精度結果を丸めてから、それを変数 a に保管する。

rndsngl が使われた場合、コンパイラーは同じステップを行いますが、ただし、最初のステップで丸めを実行する点が異なります。 norndsngl のほうが、中間結果の精度は上がり、パフォーマンスも向上しますが、他のシステムで計算された結果とビットごとに同一の結果を生じるには、 rndsngl を指定する必要があることに注意してください。

POWER、POWER2、またはよく使われるアーキテクチャーをターゲットとするのに -qarch を使用した場合、 norndsngl がデフォルトになります。 PowerPC アーキテクチャーをターゲットとした場合、 rndsngl がデフォルトになります。また、任意のターゲット・アーキテクチャー用に rndsngl サブオプションを明示的に設定することもできます。

POWER プロセッサーでの SQRT 操作における無効な演算例外

POWER アーキテクチャーには、負数の平方根を計算しようとしたときに生じる IEEE 無効演算例外を示すハードウェア状況フラグは組み込まれていません。その代わりに、オペレーティング・システムが、ソフトウェア機構を使って、そのような例外を処理しなければなりません。したがって、負数に SQRT を使用した場合、コンピューターにインストールされているオペレーティング・システムのレベルによっては、 POWER プラットフォーム上で確実な無効演算例外が生成されないことがあります。

POWER2 アーキテクチャーと多くの PowerPC アーキテクチャーにはそれぞれ、無効な SQRT 操作用のハードウェア状況フラグが備えられており、いずれも、確実に例外を生成します。


[ ページのトップ | 前ページ | 次ページ | 目次 | 索引 ]