SUNW_MP_PROCBIND は、プロセッサバインディングを指定するための Oracle 固有のレガシー環境変数です。このセクションでは、この変数に設定できる値について説明します。
SUNW_MP_PROCBIND に指定できる値は次のとおりです。
文字列 FALSE、TRUE、COMPACT、または SCATTER (大文字と小文字のどちらも可)。次に例を示します。
% setenv SUNW_MP_PROCBIND "TRUE"
FALSE – OpenMP スレッドはどのプロセッサにもバインドされません。これはデフォルト設定です。
TRUE – OpenMP スレッドは、ラウンドロビン方式でハードウェアスレッドにバインドされます。バインディングに使用される開始ハードウェアスレッドは、最高のパフォーマンスが得られるように実行時ライブラリによって決められます。
COMPACT – OpenMP スレッドは、システム上のできるだけ近くにあるハードウェアスレッドにバインドされます。COMPACT では、スレッドがデータキャッシュを共有できるため、データのローカル性が向上します。
SCATTER – OpenMP スレッドは、遠く離れたハードウェアスレッドにバインドされます。この設定を使用すると、スレッドごとのメモリー帯域幅を向上させることができます。
非負整数 – OpenMP スレッドがバインドされるべきハードウェアスレッドの開始論理 ID を示します。OpenMP スレッドはラウンドロビン方式でハードウェアスレッドにバインドされます。指定された論理 ID を持つハードウェアスレッドから始まり、論理 ID n-1 を持つハードウェアスレッドへのバインド後、ラップアラウンドして論理 ID 0 を持つハードウェアスレッドに戻ります。
次に例を示します。
% setenv SUNW_MP_PROCBIND "2"
2 つ以上の非負整数のリスト – OpenMP スレッドは、指定された論理 ID を持つハードウェアスレッドにラウンドロビン方式でバインドされます。指定された以外の論理 ID を持つハードウェアスレッドは使用されません。
次の例では、4 つのスレッドが使用される場合に、2 つのスレッドをハードウェアスレッド 2 に、1 つのスレッドをハードウェアスレッド 4 に、1 つのスレッドをハードウェアスレッド 6 にそれぞれバインドしています。
% setenv SUNW_MP_PROCBIND "2 2 4 6"
ハイフン (「-」) で区切られた 2 つの非負整数 – OpenMP スレッドは、最初の論理 ID から 2 番目の論理 ID までの範囲のハードウェアスレッドにラウンドロビン式でバインドされます。最初の整数を 2 番目の整数に等しいか、それよりも小さくする必要があります。この範囲外の論理 ID を持つハードウェアスレッドは使用されません。
次に例を示します。
% setenv SUNW_MP_PROCBIND "0-6"
SUNW_MP_PROCBIND に指定された値が無効である場合、または無効な論理 ID が指定された場合は、エラーメッセージが表示され、プログラムの実行が終了します。
OpenMP スレッドの数が使用可能なハードウェアスレッドの数よりも多い場合は、一部のハードウェアスレッドに複数の OpenMP スレッドがバインドされます。このような状況では、パフォーマンスが低下する可能性があります。