この記事は、インテル® ソフトウェア・サイトに掲載されている「OMP_PROC_BIND is now supported on compatible non-Intel processors」(http://software.intel.com/en-us/articles/omp-proc-bind-is-now-supported-on-compatible-non-intel-processors) の日本語参考訳です。
最新のインテル® C++ コンパイラーおよびインテル® Fortran コンパイラーでは、OpenMP* の環境変数 OMP_PROC_BIND の振る舞いが Linux と Windows においてインテル製品以外のプロセッサーとの互換性がサポートされました。この修正はインテル® Composer XE 2011 Update13 とインテル® Composer XE 2013 Update 1 以降に反映されています。以前のバージョンのコンパイラーでは、互換プロセッサー上でOpenMP* 3.1 API 仕様で定義される OMP_PROC_BIND の振る舞いがサポートされていませんでした。インテル互換プロセッサー上でOMP_PROC_BIND={true, false} に設定し、インテル® OpenMP* ランタイムとリンクしたプログラムを実行すると、アフィニティーがサポートされないという趣旨の警告が生成されます。
この問題が修正され、OMP_PROC_BIND=true に設定すると OpenMP* スレッドはプロセッサーにバインドされます。OMP_PROC_BIND=false に設定すると、OpenMP* スレッドはプロセッサー間で移行します。
Linux* システムにおいてのみ、GOMP_CPU_AFFINITY 環境変数を利用してOSの特定のプロセッサーIDをOpenMP* スレッドにバインドできます。GOMP_CPU_AFFINITY は、OMP_PROC_BIND=trueよりも優先されることに注意してください。インテル® コンパイラーでビルドされたプログラムの実行時に両方の環境変数が設定されていると、次のような警告が表示されるでしょう:
OMP: Warning #181: OMP_PROC_BIND: ignored because GOMP_CPU_AFFINITY has been defined