JavaScript is required to for searching.
ナビゲーションリンクをスキップ
印刷ビューの終了
Oracle Solaris Studio 12.2: OpenMP API ユーザーガイド
search filter icon
search icon

ドキュメントの情報

はじめに

1.  OpenMP API について

2.  OpenMP プログラムのコンパイルと実行

2.1 使用するコンパイラオプション

2.2 OpenMP 環境変数

2.2.1 一般的な OpenMP 環境変数

2.2.2 Solaris Studio 固有の環境変数

2.3 プロセッサ結合

2.3.1 仮想プロセッサ ID

2.3.2 論理 ID

2.3.3 SUNW_MP_PROCBIND に指定された値の解釈

2.3.4 OS プロセッサセットとの相互作用

2.4 スタックとスタックサイズ

2.5 OpenMP プログラムの確認と分析

3.  実装によって定義される動作

4.  入れ子並列処理

5.  タスク化

6.  変数の自動スコープ宣言

7.  スコープチェック

8.  パフォーマンス上の検討事項

A.  指令での節の記述

B.  OpenMP への変換

索引

2.4 スタックとスタックサイズ

実行プログラムは、各スレーブスレッド用の個別スタックのほか、プログラムを実行する初期 (またはメイン) スレッド用のメインスタックを保持します。スタックは、サブプログラムまたは関数参照の呼び出し中、引数および自動変数を保持するために使用される一時的なメモリーアドレス空間です。

デフォルトのメインスタックのサイズは 8M バイトです。f95 にオプション -stackvar を指定して Fortran プログラムをコンパイルすると、自動変数であるかのようにスタック上にローカル変数と配列が割り当てられます。OpenMP プログラムでの -stackvar 指定は、明示的に並列化されたプログラムで必要になります。これは、オプティマイザのループでの呼び出しの並列化機能を向上させるためです (-stackvar フラグについては、『Fortran ユーザーズガイド』を参照)。ただし、スタックに十分なメモリーが割り当てられていない場合は、スタックのオーバーフローが発生する可能性があります。

メインスタックのサイズを表示または設定するには、C シェルの limit コマンド、または ksh、sh の ulimit コマンドを使用します。

OpenMP プログラムの各スレーブスレッドは、それぞれスレッドスタックを持ちます。このスタックは最初の (メイン) スレッドスタックに似ていますが、そのスレッドに固有のものです。スレッドの PRIVATE 配列および変数 (スレッドにローカル) は、スレッドスタックに割り当てられます。デフォルトのサイズは、32 ビット SPARC V8 および x86 プラットフォームで 4M バイト、64 ビット SPARC V9 および x86 プラットフォームで 8M バイトです。スレーブスレッドスタックのサイズは、OMP_STACKSIZE 環境変数で設定されます。

demo% setenv OMP_STACKSIZE 16384   <-Set thread stack size to 16 Mb (C shell)

demo$ OMP_STACKSIZE=16384          <-Same, using Bourne/Korn shell
demo$ export OMP_STACKSIZE

最適なスタックサイズを判定するには、試行とエラーを経る必要があるかもしれません。スタックサイズがスレッドに対して小さすぎて実行できない場合、エラーメッセージが出力されないまま、データ破壊やセグメントエラーが発生する可能性があります。スタックオーバーフローが発生するかどうか不確かな場合、-xcheck=stkovf コンパイラオプションを指定して Fortran や C、C++ プログラムをコンパイルすると、スタックオーバーフローのセグメント例外を発生させることができます。この場合、データ破壊が発生する前にプログラムの実行が停止します