Oracle® Solaris Studio 12.4: 数値計算ガイド

印刷ビューの終了

更新: 2015 年 1 月
 
 

5.4 コンパイルオプション

Oracle Solaris Studio 12.4 コンパイラは、コード生成に影響する多数のオプションを受け入れます。次のリストでは、一部のプログラムにのみ有効な特定のコード生成オプションに焦点を当てています。長年にわたって多くの作成者が記述した大規模なプログラムの場合、プログラムのロジックに悪影響を及ぼす、または及ぼさないコード変換がどれかということについてだれ一人として断言できないことはよくあります。このため、次のオプションは慎重に使用する必要があります。

–fast

一般に有用な、さまざまな変換に使用するマクロ。–fast はすべての構成要素を記憶するより簡単に記憶できます。–fast の定義はリリースごとに異なります。その変換のすべてがあらゆるプログラムに妥当なわけではありません。–fast を使用する場合、その効果の一部を元に戻す追加オプションを続けることができます。たとえば、–fast –fsimple=0 –fns=no –xvector=no を使用すると、次に説明する 3 つのオプションが無効になります。特定のコンパイラのコマンド行オプションによって実際にどのオプションが有効になるかを確認するには、–dryrun を付けてコンパイルすることをお勧めします。

–fsimple

一部のプログラムには該当しない浮動小数点モード、例外、および丸めに関する特定の単純化した仮定を許可します。コンパイラはこれらの仮定を使用して、リリース間で異なる、値の変動する各種変換を位置調整します。–fsimple=0 はデフォルトでもっとも安全です。–fsimple=1 はほとんどのプログラムで安全であり、–fsimple=2 はほとんどの場合に危険を伴います。わずかな入力でプログラムの実行をテストするだけでは、–fsimple=2 が適しているかどうか検証には十分ではありません。その結果は一部の入力データでは有益でも、ほかの入力データに対しては有益でない可能性があります。

–fns

コード生成には影響しませんが、非標準アンダーフローモードを有効にしてプログラムの実行を開始します。これは IEEE 標準に反しているため、無効な結果や無限ループなど、結果が非標準になることがあります。多くのプログラムは、アンダーフローがどのように処理されるかにかかわらず、同じように実行します。標準アンダーフローに対して実行時ハードウェアが低速な場合、これらのプログラムは、–fns を使用してより高速に実行することができます。最近の SPARC サーバーでは、非標準モードのパフォーマンス上のメリットはありません。

–ftrap=common

コード生成には影響しませんが、オーバーフロー、ゼロ除算、および無効な IEEE 例外についてトラップを有効にしてプログラムの実行を開始します。これは IEEE 標準に反しており、無停止 IEEE 例外処理に依存するプログラムの早期終了を引き起こす場合があります。–ftrap=none は、C、C++、および F77 ではデフォルトですが、F95 ではデフォルトではありません。

–fnonstd

–fns および –ftrap=common のマクロ。

–xvector

–xvector=lib でベクトル数学ライブラリ変換を、–xvector=simd で SIMD 変換を有効にするために使用されます。–xvector=lib を使用すると、共通の初等超越関数のうちベクトルの向きがわずかに異なる libmvec 実装が libm バージョンの代わりに使用されるため、数値結果が変わります。これらのベクトルバージョンではデフォルトの丸めが実施されていると仮定します。

–xreduction

–xautopar または –xopenmp で並列化が有効になっている場合に、より広い範囲のプログラムループを並列化できるようにします。リダクション演算は、ベクトルの和や 2 つのベクトルの内積などの演算です。和は厳密な演算ではどの順序でも行えますが、有限精度浮動小数点演算で生成される結果がわずかに異なります。実際、累計の順序の判断も不可能な場合があり、同じプログラムと同じデータ、同じハードウェアを使用した場合でも、実行するごとに結果がわずかに変化する可能性があります。

詳細は、各コンパイラのマニュアルページとユーザーズガイドを参照してください。