Sun Studio 12 Update 1: OpenMP API ユーザーズガイド

4.2.2 SUNW_MP_MAX_POOL_THREADS

OpenMP 実行時ライブラリにはスレッドがプールされていて、並列領域内でのスレーブスレッドとして使用されます。SUNW_MP_MAX_POOL_THREADS 環境変数を設定することで、プールに保存しておけるスレッドの最大数を制限できます。この変数のデフォルト値は 1023 です。

プールにあるのは、実行時ライブラリが作成した非ユーザースレッドだけです。最初のスレッドやユーザーのプログラムが明示的に作成したスレッドは含まれません。この環境変数をゼロに設定すると、スレッドのプールは空になり、すべての並列領域は 1 つのスレッドによって実行されます。

次の例は、プールに十分な数のスレッドがない場合には、並列領域が取得できるスレッドの数が少なくなることを示す例です。コードは、上記の例と同じです。アクティブ化されるすべての並列領域に必要な同時スレッドの数は、8 個です。プールには、少なくとも 7 個のスレッドが含まれている必要があります。ここで SUNW_MP_MAX_POOL_THREADS 変数を 5 に設定すると、もっとも内側の入れ子にある 4 つの並列領域のうち、2 つは必要な数のスレーブスレッドを取得できない場合があります。実行結果はさまざまですが、1 つの例を見てみましょう。


% setenv OMP_NESTED TRUE
% setenv SUNW_MP_MAX_POOL_THREADS 5
% a.out
Level 1: number of threads in the team - 2
Level 2: number of threads in the team - 2
Level 2: number of threads in the team - 2
Level 3: number of threads in the team - 2
Level 3: number of threads in the team - 2
Level 3: number of threads in the team - 1
Level 3: number of threads in the team - 1