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

印刷ビューの終了

更新: 2014 年 12 月
 
 

3.2.2 OMP_THREAD_LIMIT

OMP_THREAD_LIMIT 環境変数の設定は、プログラム全体で使用される OpenMP スレッドの最大数を制御します。この数値には、最初の (メイン) スレッド、および OpenMP 実行時ライブラリによって作成された OpenMP ヘルパースレッドが含まれます。デフォルトでは、プログラム全体で使用される OpenMP スレッドの最大数は 1024 です (1 つの最初の (メイン) スレッドおよび 1023 個の OpenMP ヘルパースレッド)。

スレッドプールは、OpenMP 実行時ライブラリによって作成された OpenMP ヘルパースレッドのみで構成されます。プールには、最初の (メイン) スレッドやユーザーのプログラムが明示的に作成したスレッドは含まれません。

OMP_THREAD_LIMIT に 1 を設定すると、ヘルパースレッドプールが空になり、すべての並列領域が 1 つのスレッド (最初の (メイン) スレッド) によって実行されます。

次の例の出力では、プール内のヘルパースレッド数が不十分な場合、並列領域で取得されるヘルパースレッド数も少なくなる可能性があることを示しています。このコードは、環境変数 OMP_THREAD_LIMIT に 6 が設定されていることを除いて、Example 3–1 のコードと同じです。アクティブ化されるすべての並列領域に必要な同時スレッドの数は、8 個です。つまり、プールには少なくとも 7 個のヘルパースレッドが含まれている必要があります。OMP_THREAD_LIMIT に 6 を設定すると、プールには最大 5 個のヘルパースレッドが含まれることになります。このため、もっとも内側にある 4 つの並列領域のうち 2 つが、必要な数のヘルパースレッドを取得できないことがあります。次の例は、可能性のある結果の 1 つを示しています。

% setenv OMP_NESTED TRUE
% OMP_THREAD_LIMIT 6
% a.out | sort
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