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

印刷ビューの終了

更新: 2014 年 12 月
 
 

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

スタックは、サブプログラムまたは関数の呼び出し中、引数および自動変数を保持するために使用される一時的なメモリーアドレス空間です。スレッドのスタックのサイズが小さすぎる場合は、スタックオーバーフローが発生して、通知なしでデータが壊れたり、セグメント例外が発生したりすることがあります。

実行プログラムは、プログラムを実行する最初の (メイン) スレッドのメインスタックを維持します。最初の (メイン) スレッドのスタックサイズを表示または設定するには、C シェルの limit コマンドか、Bourne シェルまたは Korn シェルの ulimit コマンドを使用します。

また、プログラムの各 OpenMP ヘルパースレッドには、独自のスレッドスタックがあります。このスタックは最初の (メイン) スレッドスタックに似ていますが、そのスレッドに固有のものです。スレッドの private 変数は、スレッドスタックに割り当てられます。ヘルパースレッドスタックのデフォルトのサイズは、32 ビットアプリケーションでは 4M バイト、64 ビットアプリケーションでは 8M バイトです。ヘルパースレッドスタックのサイズを設定するには、OMP_STACKSIZE 環境変数を使用します。

-stackvar オプションを指定して Fortran プログラムをコンパイルすると、自動変数であるかのようにスタック上にローカル変数と配列が割り当てられます。-xopenmp-xopenmp=parallel、または -xopenmp=noopt オプションを指定してコンパイルされたプログラムは、-stackvar を意味しています。スタックに十分なメモリーが割り当てられていない場合は、これによりスタックのオーバーフローが発生する可能性があります。スタックの大きさが十分であることを確認してください。

C シェルの例:

% limit stacksize 32768   <- Sets the main thread stack size to 32 Megabytes
% setenv OMP_STACKSIZE 16384   <- Sets the helper thread stack size to 16 Megabytes

Bourne シェルまたは Korn シェルの例:

$ ulimit -s 32768   <- Sets the main thread stack size to 32 Megabytes

$ OMP_STACKSIZE=16384   <- Sets the helper thread stack size to 16 Megabytes 
$ export OMP_STACKSIZE