Oracle® Solaris Studio 12.4: Fortran ユーザーズガイド

印刷ビューの終了

更新: 2014 年 12 月
 
 

3.4.4 –autopar

ループの自動並列化を使用可能にします。

マルチプロセッサで並列処理の対象に適するループを探し、そのループを並列化します。内部反復データに依存するループを解析し、ループを再構築します。最適化レベルが -O3 以上に設定されていない場合は、自動的に -O3 に設定されます。

-autopar などの並列化オプションを使用している場合は、-stackvar オプションも指定します。-autopar を使用している場合は、-stackvar オプションを使用した方がパフォーマンスが改善される場合があります。これは、オプティマイザが並列化する機会をより多く検出できるようになるためです。メインスレッドおよびスレーブスレッドのスタックサイズを設定する方法については、-stackvar オプションの説明を参照してください。

プログラム中に libthread スレッドライブラリへの明示的な呼び出しがある場合は、-autopar は使用しないでください。-mt[={yes|no}]の注釈を参照してください。

-autopar オプションは、シングルプロセッサのシステムには適していません。シングルプロセッサのシステムでこのオプションを付けてコンパイルを行うと、通常は実行速度が低下します。

-xautopar コンパイラオプションによって自動的に並列化されるプログラムを実行するときは、使用するスレッド数を指定するときに、OMP_NUM_THREADS 環境変数を使用してください。OMP_NUM_THREADS が設定されていない場合、使用されるスレッドのデフォルトの数は、マシンで利用できるコアの数に等しくなりますが、上限は 32 です。1 つのスレッドだけで実行する場合は、OMP_NUM_THREADS を 1 に設定します。最高のパフォーマンスを得るため、使用するスレッドの数が、マシン上で使用できるハードウェアスレッド (仮想プロセッサ) の数を超えないようにしてください。Oracle Solaris システムでは、psrinfo(1M) コマンドを使用すると、この数を特定できます。Linux システムでは、ファイル /proc/cpuinfo を調べることでこの数を特定できます。詳細は、『OpenMP API ユーザーズガイド』を参照してください。

OMP_NUM_THREADS だけでなく、OpenMP プログラムに適用されるそのほかの環境変数は、-xautopar コンパイラオプションによって自動的に並列化されるプログラムで使用できます。環境変数については、『Oracle Solaris Studio OpenMP API ユーザーズガイド』を参照してください。

-autopar を使用してコンパイルとリンクを一度に行う場合、マルチスレッド処理ライブラリとスレッド対応の Fortran 実行時ライブラリが自動的にリンクされます。-autopar を使用してコンパイルとリンクを別々に行う場合は、適切なライブラリにリンクするために、-autopar を使用してリンクを行う必要があります。

ループ内のリダクション演算を認識するには、-reduction オプションを -autopar と併用します。

-loopinfo オプションを使用すると、並列化されたループと並列化されなかったループを表示します。

明示的にユーザーが制御して並列化を行う場合は、OpenMP ディレクティブおよび -xopenmp オプションを使用します。