Oracle Solaris Studio 12.2: OpenMP API ユーザーガイド

2.3.3 SUNW_MP_PROCBIND に指定された値の解釈

SUNW_MP_PROCBIND に指定された値が TRUE の場合、スレッドは、ラウンドロビン方式で仮想プロセッサに結合されます。結合を行う際の最初のプロセッサは、最適なパフォーマンスを実現するために、実行時ライブラリによって決定されます。

SUNW_MP_PROCBIND に指定された値が FALSE の場合、スレッドはどのプロセッサにも結合されません。これはデフォルト設定です。

SUNW_MP_PROCBIND に指定された値が非負整数の場合、その整数はスレッドの結合先の仮想プロセッサの開始論理 ID を表します。スレッドは、指定された論理 ID を持つプロセッサから順にラウンドロビン方式で仮想プロセッサに結合されます。論理 ID が n-1 のプロセッサに結合した後は、論理 ID が 0 のプロセッサに続きます。

SUNW_MP_PROCBIND に指定された値が非負の整数の 2 項目以上のリストの場合、スレッドはラウンドロビン方式で指定された論理 ID を持つ仮想プロセッサに結合されます。指定された以外の論理 ID を持つプロセッサは使用されません。

SUNW_MP_PROCBIND に指定された値が、マイナス記号 (-) で区切られた 2 つの非負整数の場合、スレッドは最初の論理 ID から 2 番目の論理 ID の範囲の仮想プロセッサに、ラウンドロビン式で結合されます。この範囲に含まれない論理 ID を持つプロセッサは使用されません。

SUNW_MP_PROCBIND に指定された値が前述のどの形式にも当てはまらないか、不正な論理 ID が指定された場合は、エラーメッセージが出力され、プログラムの実行が終了します。

OpenMP 実行時ライブラリ libmtsk で作成されるスレッドの数は、環境変数、ユーザーのプログラム内の API 呼び出し、および num_threads 節によって異なります。SUNW_MP_PROCBIND は、スレッドの結合先となる仮想プロセッサの論理 ID を指定します。スレッドは、その一連のプロセッサにラウンドロビン式で結合されます。プログラム内で使用しているスレッドの数が、SUNW_MP_PROCBIND で指定された論理 ID の数よりも少ない場合、一部の仮想プロセッサはそのプログラム内で使用されません。SUNW_MP_PROCBIND で指定された論理 ID の数よりもスレッドの数が多い場合、一部の仮想プロセッサには複数のスレッドが結合されます。