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

印刷ビューの終了

更新: 2014 年 12 月
 
 

5.3 SUNW_MP_PROCBIND

SUNW_MP_PROCBIND は、プロセッサバインディングを指定するための Oracle 固有のレガシー環境変数です。このセクションでは、この変数に設定できる値について説明します。


注 -  SUNW_MP_PROCBIND の値に使用される非負整数は論理ハードウェアスレッド ID を示しており、実際のハードウェアスレッド ID とは異なる場合があります。ハードウェアスレッド ID は連続した値にできますが、隙間が生じる可能性があります。たとえば、16 コアの SPARC システムの場合、ハードウェアスレッド ID は 0、1、2、3、8、9、10、11、512、513、514、515、520、521、522、523 になることがあります。ただし、論理プロセッサ ID は 0 から始まる連続した整数です。システムで使用可能なハードウェアスレッドの数が n である場合、その論理プロセッサ ID は 0、1、...、n-1 となります。

    SUNW_MP_PROCBIND に指定できる値は次のとおりです。

  • 文字列 FALSETRUECOMPACT、または 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 スレッドがバインドされます。このような状況では、パフォーマンスが低下する可能性があります。