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

印刷ビューの終了

更新: 2014 年 12 月
 
 

5.1 プロセッサバインディングの概要

プロセッサバインディング (スレッドアフィニティーとも呼ばれる) を使用すると、プログラムのすべての実行にわたってプログラム内のスレッドをマシンの同じ場所で実行し、ほかの場所に移動すべきではないことを、プログラムでオペレーティングシステムに指示できます。この場合の場所とは、ソケット、コア、またはハードウェアスレッドのグループを意味します。

プロセッサバインディングにより、並列領域やワークシェアリング領域の前回呼び出し以降、その領域内のスレッドがアクセスするデータがローカルキャッシュに入れられるというデータ再利用パターンを持つアプリケーションのパフォーマンスを向上させることができます。

コンピュータシステムは、ソケット、コア、およびハードウェアスレッドの階層として表示できます。各ソケットには 1 つ以上のコアが含まれており、各コアには 1 つ以上のハードウェアスレッドが含まれています。

Oracle Solaris プラットフォームでは、psrinfo(1M) コマンドを使用すると、利用可能なハードウェアスレッドを一覧表示できます。Linux プラットフォームでは、テキストファイル /proc/cpuinfo から、利用可能なハードウェアスレッドに関する情報を取得できます。

オペレーティングシステムがスレッドをプロセッサにバインドすると、そのスレッドは実際には特定のハードウェアスレッドまたはハードウェアスレッドのグループにバインドされます。

プロセッサへの OpenMP スレッドのバインディングを制御するには、OpenMP 4.0 の環境変数 OMP_PLACES および OMP_PROC_BIND を使用できます。または、Oracle 固有の環境変数 SUNW_MP_PROCBIND を使用することもできます。これらの 2 組の環境変数を混在させないようにしてください。これらの環境変数については、OMP_PLACES および OMP_PROC_BINDで説明されています。


注 -  この章で説明されている OpenMP 環境変数は、OpenMP スレッドのみ (つまり、OpenMP 実行時ライブラリに記録されているすべてのユーザースレッドと、そのライブラリによって作成されたヘルパースレッド) のバインディングを制御します。それらの環境変数はほかのユーザースレッドのバインディングを制御しません。このライブラリは、ユーザースレッドが OpenMP 構文を検出したか、OpenMP ランタイムルーチンを呼び出した場合にそのユーザースレッドを記録します。