インテル® C++ コンパイラー 18.0 デベロッパー・ガイドおよびリファレンス

サポートされる環境変数

コンパイラーがライブラリー、インクルード・ファイル、設定ファイル、特定の設定など、ファイルを検索する際のパス (検索先) を指定して、システム環境をカスタマイズできます。

コンパイラーのコンパイル時の環境変数

次の表は、コンパイラーに影響するコンパイル時の環境変数の一覧です。

コンパイル時の環境変数

説明

CILK_NWORKERS (Windows*、Linux*)

インテル® Cilk™ Plus プログラムで使用するワーカースレッドの数を指定します。

インテル® Cilk™ Plus は古い機能 (非推奨) です。

「ワーカー数の設定」を参照してください。

CL (Windows*)

_CL_ (Windows*)

CL 変数で頻繁に使用するファイルとオプションを定義します。注: CL 環境変数に等号 (=) を含む文字列を設定することはできません。代わりに、シャープ記号 (#) を使用できます。次の例では、割り当てる文字列で等号 (=) の代わりにシャープ記号 (#) を使用しています: SET CL=/Dtest#100

COV_DIR (Windows*)

PROF_DIR と同じです。

COV_DPI (Windows*)

PROF_DPI と同じです。

IA32ROOT (IA-32 アーキテクチャーとインテル® 64 アーキテクチャー)

標準以外のインストール構成の場合に、インクルードおよびライブラリー・ファイルを含むディレクトリーを指します。

ICCCFG

icc を使用してコンパイラーを起動したときにコンパイルをカスタマイズするための設定ファイルを指定します。

ICPCCFG

icpc を使用してコンパイラーを起動したときにコンパイルをカスタマイズするための設定ファイルを指定します。

ICLCFG (Windows*)

デフォルトの設定ファイルの代わりに、コンパイラーが使用する設定ファイルを指定します。

INTEL_LICENSE_FILE

インテルのライセンスファイルの場所を指定します。

Windows* システムでは、この環境変数は Visual Studio* から設定できません。

__INTEL_PRE_CFLAGS

__INTEL_POST_CFLAGS

コマンドラインにコンパイラー・オプションを追加します。

これは、コンパイラー設定ファイル icl.cfg ですでに提供されている機能の拡張です。

デフォルトでは、icl.cfg (Windows*)、icc.cfg (Linux* および macOS*)、または icpc.cfg (Linux* および macOS*) という名前の設定ファイルが使用されます。このファイルは、コンパイラーの実行ファイルが格納されているディレクトリーにあります。別の場所にあるほかの設定ファイルを使用する場合は、ICLCFG (Windows*)、ICCCFG (Linux* および macOS*)、または ICPCCFG (Linux* および macOS*) 環境変数を使用し、その設定ファイルのディレクトリーとファイル名を指定します。

オプションをコマンドラインの先頭に追加する場合は __INTEL_PRE_CFLAGS を、最後に追加する場合は __INTEL_POST_CFLAGS を使用します。コマンドラインは、次のように構成されます。

構文: (Windows* では icl を、Linux* および macOS* では icc を使用します。)icl/icc <PRE フラグ> <設定ファイルからのフラグ> <コンパイラー起動時のフラグ> <POST フラグ>

/W5 (Windows*) または -w3 (Linux* および macOS*) を指定すると、ドライバーは環境変数によりオプションが変更されることを警告します。

INTEL_TARGET_ARCH_IA32

この環境変数を設定すると、すべての関連ツール (コンパイラーとインテル固有のリンカーツールを含む) が 32 ビット・コンパイル向けになります。この環境変数を設定しない場合、コンパイラーを起動するたびに、コマンドラインで明示的に /Qm32 (Windows*) または -m32 (Linux* および macOS*) を指定する必要があります。

PATH

システムがバイナリー実行ファイルを検索するディレクトリーを指定します。

Windows* では、これはダイナミック・リンク・ライブラリー (DLL) の検索にも影響します。

TMP

TMPDIR

TEMP

一時ファイルの場所を指定します。これらの変数を指定しない場合、これらの変数がいずれも書き込み不可の場合、または見つからない場合、一時ファイルは /tmp (Linux* および macOS*) または現在のディレクトリー (Windows*) に格納されます。

コンパイラーは、TMPTMPDIRTEMP の順に変数を検索します。

Windows* システムでは、これらの環境変数は Visual Studio* から設定できません。

LD_LIBRARY_PATH (Linux*)

共有オブジェクト (.so ファイル) の場所を指定します。

DYLD_LIBRARY_PATH (macOS*)

ダイナミック・ライブラリーのパスを指定します。

INCLUDE (Windows*)

ソース・ヘッダー・ファイル (インクルード・ファイル) のディレクトリーを指定します。

LIB (Windows*)

コンパイラーとリンカーが使用するすべてのライブラリーのディレクトリーを指定します。

インテル® MIC アーキテクチャーの環境変数
GNU* 環境変数と拡張

CPATH (Linux* および macOS*)

C/C++ コンパイル用のインクルード・ディレクトリーのパスを指定します。

C_INCLUDE_PATH (Linux* および macOS*)

C コンパイル用のインクルード・ディレクトリーのパスを指定します。

CPLUS_INCLUDE_PATH (Linux* および macOS*)

C コンパイル用のインクルード・ディレクトリーのパスを指定します。

DEPENDENCIES_OUTPUT (Linux* および macOS*)

コンパイラーで処理されるシステム以外のヘッダーファイルに基づいて make の依存性を出力する方法を指定します。システム・ヘッダー・ファイルは依存性出力で無視されます。

GCC_EXEC_PREFIX (Linux*)

リンカー (ld) とアセンブラー (as) の代替名を指定します。

GCCROOT (Linux*)

gcc バイナリーの場所を指定します。

-gcc-name オプションを使用する際に、コンパイラーが gcc バイナリーの場所を特定できない場合にのみ、この変数を設定します。

GXX_INCLUDE (Linux*)

gcc ヘッダーの場所を指定します。-gcc-name=directory-name/gcc または -gxx-name=directory-name/g++ で指定された必要な値をコンパイラーが見つけられない場合、この変数を設定して、gcc ファイルの場所を指定します。

GXX_ROOT (Linux*)

gcc バイナリーの場所を指定します。-gcc-name=directory-name/gcc または -gxx-name=directory-name/g++ で指定された必要な値をコンパイラーが見つけられない場合、この変数を設定して、gcc ファイルの場所を指定します。

LIBRARY_PATH (Linux* および macOS*)

リンクフェーズで使用するライブラリーのパスを指定します。

SUNPRO_DEPENDENCIES (Linux*)

この変数は、システム・ヘッダー・ファイルが無視されないことを除いて、DEPENDENCIES_OUTPUT と同じです。

コンパイラーのランタイム環境変数

次の表は、実行時に認識されるコンパイラーの環境変数をまとめたものです。

ランタイム環境変数

説明

INTEL_CHKP_REPORT_MODE (Linux*)

ランタイムにポインターチェッカーのレポートモードを変更します。

詳細は、「範囲外エラーの特定とレポート」を参照してください。

GNU* 拡張機能 (インテルの OpenMP* 互換ライブラリーにより認識)

GOMP_CPU_AFFINITY (Linux*)

インテル® コンパイラーの OpenMP* 互換ライブラリーで認識される GNU* 拡張です。OS のプロセッサー ID のリストを指定します。

この環境変数は、最初の並列領域の前、または omp_get_max_threads()omp_get_num_procs()、アフィニティー API 呼び出しを含む特定の API 呼び出しの前に設定する必要があります。この環境変数に関する詳細は、「スレッド・アフィニティー・インターフェイス」を参照してください。

デフォルト: アフィニティーは無効

GOMP_STACKSIZE (Linux*)

インテル® コンパイラーの OpenMP* 互換ライブラリーで認識される GNU* 拡張です。OMP_STACKSIZE と同じです。KMP_STACKSIZE は、OMP_STACKSIZE を上書きする GOMP_STACKSIZE よりも優先されます。

デフォルト: 「OMP_STACKSIZE」の説明を参照してください。

OpenMP* 環境変数 (OMP_) と拡張 (KMP_)

OMP_CANCELLATION

指定した種類の最内領域の取り消し要求を行います。TRUE の場合、CANCEL 構文と取り消しポイントが有効になり、取り消しが要求されます。FALSE の場合、取り消しは無効となり、CANCEL 構文と取り消しポイントは無視されます。

内部バリアコードは、取り消しが行われたかどうかによって動作が異なります。そのため、グローバルフラグを繰り返しチェックし、取り消しが行われたかどうかを確認すべきです。取り消しが行われた場合、スレッドはバリアを実行せずに値 1 を返します (ほかのスレッドをウェイクアップする可能性があります)。そうでない場合、スレッドはバリアを実行し、値 0 を返します。

指定した種類の最内領域の取り消し要求を有効 (TRUE) または無効 (FALSE) にします。

デフォルト: FALSE

例: OMP_CANCELLATION=TRUE

OMP_DISPLAY_ENV

OpenMP* バージョン番号と OpenMP* 環境変数に関連する値の stderr への出力を有効 (TRUE) または無効 (FALSE) にします。

設定可能な値は、TRUE、FALSE、または VERBOSE です。

デフォルト: FALSE

例: OMP_DISPLAY_ENV=TRUE

OMP_DEFAULT_DEVICE

ターゲット領域で使用するデバイスを設定します。OpenMP* ルーチン omp_set_default_device または parallelプラグマの device 節でこの変数をオーバーライドできます。

指定されたデバイス番号のデバイスが存在しない場合、コードはホストで実行されます。この環境変数を設定されていない場合、number 0 が使用されます。

OMP_DYNAMIC

スレッド数の動的調整を有効 (TRUE) または無効 (FALSE) にします。

デフォルト: FALSE

例: OMP_DYNAMIC=TRUE

OMP_MAX_ACTIVE_LEVELS

プログラムの入れ子構造の並列領域の最大レベル数です。

デフォルト: 1

構文: OMP_MAX_ACTIVE_LEVELS=TRUE

OMP_NESTED

入れ子構造の並列化を有効 (TRUE) または無効 (FALSE) にします。

デフォルト: FALSE

例: OMP_NESTED=TRUE

OMP_NUM_THREADS

アプリケーションでほかの値が指定されていない場合は、OpenMP* 並列領域で使用する最大スレッド数を設定します。

すべての並列領域に対してスレッド数を指定する場合、1 つの整数値を設定します。入れ子レベルで 1 つの並列領域に対してそれぞれスレッド数を指定する場合、カンマ区切りリストを設定できます。

リストの最初の値は、最外入れ子レベルの並列領域のスレッド数を示し、2 つ目は次の内側の入れ子レベル、というように設定します。どのレベルでも、値を省略することができます。リストの最初の値が省略された場合、最外レベルではスレッドの通常のデフォルト値が使用されます。その他のレベルで値が省略された場合、そのレベルのスレッド数は、前のレベルから継承されます。

この環境変数は、Qopenmp (Windows*) または qopenmp (Linux * および macOS*)、あるいは Qparallel (Windows*) または parallel (Linux* および macOS*) オプションに適用されます。

デフォルト:プログラムを実行するオペレーティング・システムで現在認識されているプロセッサー数

構文: OMP_NUM_THREADS=value[,value]*

OMP_PLACES

抽象名または負でない数値で指定された、明示的に順序付けされたプレースリストです。除外演算子 “!” を使用して、演算子の直後の番号または位置を除外することもできます。

負でない数値の場合、番号の意味とリストの順序付けは実装定義に依存します。一般に、番号は実行環境における最小実行単位 (通常はハードウェア・スレッド) を表します。

次のような番号のリストを表すには、<lower-bound> : <length> : <stride> 形式で範囲を指定することができます。

"<lower-bound>, <lower-bound> + <stride>, ..., 
<lower-bound> +(<length>-1)*<stride>"
<stride> を省略すると、ユニットストライドが仮定されます。範囲には、1 つの場所の番号を指定することも、一連の場所の番号を指定することもできます。
# EXPLICIT LIST EXAMPLE
setenv OMP_PLACES "{0,1,2,3},{4,5,6,7},{8,9,10,11},{12,13,14,15}"
setenv OMP_PLACES "{0:4},{4:4},{8:4},{12:4}"
setenv OMP_PLACES "{0:4}:4:4"

以下の抽象名は、実行環境とランタイム環境で認識されます。

  • threads: それぞれの場所は、ターゲットマシン上の 1 つのハードウェア・スレッドに対応します。
  • cores: それぞれの場所は、ターゲットマシン上の 1 つのコア (1 つ以上のハードウェア・スレッドを持つ) に対応します。
  • sockets: それぞれの場所は、ターゲットマシン上の 1 つのソケット (1 つ以上のコアで構成される) に対応します。

システムで利用可能なプレースよりも少ないプレースを要求する場合や、システムで利用可能なリソースよりも多くのリソースを要求する場合、プレースリストに含まれる abstract_name タイプのリソースは実装定義に依存します。抽象名の厳密な定義も実装定義に依存します。実装で、ターゲット・プラットフォーム向けに適切な抽象名を追加することもできます。次のように、抽象名に括弧で囲んだ正の整数を追加してプレースリストの長さを表すことができます: abstract_name(num-places)

# ABSTRACT NAMES EXAMPLE
  setenv OMP_PLACES threads
  setenv OMP_PLACES threads(4)

数値をターゲット・プラットフォーム上のプロセッサーにマップできない場合の動作は実装定義に依存します。抽象名を使用して OMP_PLACES 環境変数を定義した場合の動作も実装定義に依存します。

OMP_PROC_BIND (Windows* および Linux*)

対応する入れ子構造のレベルの並列領域に使用するスレッド・アフィニティー・ポリシーを設定します。プロセッサー・コンテキストへのスレッドのバインドを有効 (TRUE) または無効 (FALSE) にします。有効にすると、KMP_AFFINITY=scatter を指定するのと同じです。無効にすると、KMP_AFFINITY=none を指定するのと同じです。

設定可能な値: TRUEFALSE、またはカンマ区切りのリスト (各要素の値は MASTERCLOSESPREAD のいずれか) です。

デフォルト: FALSE

FALSE に設定すると、実行環境は OpenMP* スレッドを OpenMP* 間で移動し、スレッド・アフィニティーは無効になり、並列構造の proc_bind は無視されます。false 以外に設定すると、実行環境は OpenMP* スレッドを OpenMP* 間で移動せず、スレッド・アフィニティーは有効になり、初期スレッドは OpenMP* プレースリストの最初の位置にバインドされます。

MASTER に設定すると、すべてのスレッドはマスタースレッドと同じ場所にバインドされます。CLOSE に設定すると、スレッドは (マスタースレッドがバインドされる場所に近い) 連続した場所にバインドされます。SPREAD に設定すると、マスタースレッドのパーティションが分割され、スレッドは 1 つの場所の連続したサブパーティションにバインドされます。

KMP_AFFINITYGOMP_CPU_AFFINITYOMP_PROC_BIND よりも優先されます。GOMP_CPU_AFFINITYOMP_PROC_BIND よりも優先されます。

OMP_SCHEDULE

ランタイム・スケジュールの型とチャンクサイズ (オプション) を設定します。

デフォルト: STATIC、チャンクサイズの指定なし

構文の例: OMP_SCHEDULE="kind[,chunk_size]"

一部の環境変数はインテル製マイクロプロセッサーおよび互換マイクロプロセッサーで利用可能ですが、インテル製マイクロプロセッサーにおいてより多くの最適化が行われる場合があります。

OMP_STACKSIZE

スレッドのプライベート・スタックとして使用する各 OpenMP* スレッドに割り当てるバイト数を設定します。推奨するサイズは 16M です。

B (バイト)、K (キロバイト)、M (メガバイト)、G (ギガバイト)、T (テラバイト) などオプションのサフィックスを使用してバイト単位を指定します。値のみを指定すると、バイト単位は K (キロバイト) であると見なされます。

この変数は、ユーザープログラムによって生成されるオペレーティング・システムのネイティブスレッド、OpenMP* プログラムまたは Qparallel (Windows*) または parallel (Linux* および macOS*) オプションを使用して作成された並列プログラムのシーケンシャル部分を実行するスレッドには影響ありません。

kmp_{set,get}_stacksize_s() ルーチンは値を設定/取得します。kmp_set_stacksize_s() ルーチンは、最初の並列領域が作成される前にシーケンシャル部分から呼び出される必要があります。この呼び出しが行われない場合、kmp_set_stacksize_s() を呼び出しても効果がありません。

デフォルト (IA-32 アーキテクチャー): 2M

デフォルト (インテル® 64 アーキテクチャー): 4M

デフォルト (インテル® MIC アーキテクチャー): 4M (サポートされているすべての OS)

関連環境変数: KMP_STACKSIZE (OMP_STACKSIZE よりも優先されます)

構文: OMP_STACKSIZE=value

OMP_THREAD_LIMIT

OpenMP* プログラムで同時に実行されるスレッド数を制限します。

この制限に達し、オペレーティング・システムの別のネイティブスレッドが OpenMP* API コールや構造を検出すると、プログラムはエラーメッセージを表示してアボートします。OpenMP* 並列領域の開始時点でこの制限に達した場合は、チーム内のスレッド数が減少したことを示す警告メッセージが 1 度だけ生成されますが、プログラムの実行は続けられます。

この環境変数は、Qopenmp (Windows*) または qopenmp (Linux * および macOS*)、あるいは Qparallel (Windows*) または parallel (Linux* および macOS*) オプションを指定してコンパイルされたプログラムにのみ使用されます。

omp_get_thread_limit() ルーチンは制限値を返します。

デフォルト: 制限なし

関連環境変数: KMP_ALL_THREADS (OMP_THREAD_LIMIT よりも優先されます)

構文: OMP_THREAD_LIMIT=value

OMP_WAIT_POLICY

スレッドは待機中、スピンするか (active)、停止するか (passive) を決定します。

OMP_WAIT_POLICY=ACTIVEKMP_LIBRARY=turnaround のエイリアスで、OMP_WAIT_POLICY=PASSIVEKMP_LIBRARY=throughput のエイリアスです。

デフォルト: Passive

構文: OMP_WAIT_POLICY=value

KMP_AFFINITY (Windows* および Linux*)

ランタイム・ライブラリーを有効にして、論理処理ユニットにスレッドをバインドします。

この環境変数は、最初の並列領域の前、または omp_get_max_threads()omp_get_num_procs()、アフィニティー API 呼び出しを含む特定の API 呼び出しの前に設定する必要があります。この環境変数に関する詳細は、「スレッド・アフィニティー・インターフェイス」を参照してください。

デフォルト: noverbose,warnings,respect,granularity=core,none

デフォルト (インテル® MIC アーキテクチャー): noverbose,warnings,respect,granularity=fine,scatter,0,0

一部の環境変数はインテル製マイクロプロセッサーおよび互換マイクロプロセッサーで利用可能ですが、インテル製マイクロプロセッサーにおいてより多くの最適化が行われる場合があります。

KMP_ALL_THREADS

OpenMP* プログラムで同時に実行されるスレッド数を制限します。制限に達し、オペレーティング・システムの別のネイティブスレッドが OpenMP* API 呼び出しや構造に達すると、プログラムはエラーメッセージを表示してアボートすることがあります。OpenMP* 並列領域の開始時点でこの制限に達した場合は、チーム内のスレッド数が減少したことを示す警告メッセージが 1 度だけ生成されますが、プログラムの実行は続けられます。

この環境変数は、Qopenmp (Windows*) または qopenmp (Linux* および macOS*) オプションを指定してコンパイルされたプログラムにのみ使用されます。

デフォルト: 制限なし

KMP_BLOCKTIME

並列領域の実行が終了した後、スレッドがスリープ状態になるまでスレッドが待機する時間 (ミリ秒単位) を設定します。

s (秒)、m (分)、h (時間)、d (日) などのサフィックスを使用して単位を指定します。

待機時間に制限を設けない場合は infinite を指定します。

デフォルト: 200 ミリ秒

関連環境変数: KMP_LIBRARY

KMP_CPUINFO_FILE

マシントポロジーの記述を含むファイルの代替名を指定します。このファイルは、/proc/cpuinfo と同じ形式でなければなりません。

デフォルト: なし

一部の環境変数はインテル製マイクロプロセッサーおよび互換マイクロプロセッサーで利用可能ですが、インテル製マイクロプロセッサーにおいてより多くの最適化が行われる場合があります。

KMP_DETERMINISTIC_REDUCTION

OpenMP* 並列領域で reduction 節を実装するため、リダクション操作において特定の処理順序の使用を有効 (TRUE) または無効 (FALSE) にします。これにより、指定されたスレッド数、指定された並列領域、指定されたデータセットとリダクション操作に対して、OpenMP* の reduction 節で実行される浮動小数点リダクション操作の丸め誤差は常に同じとなり、一貫性のある浮動小数点結果が得られます。

デフォルト: FALSE

KMP_DYNAMIC_MODE

OMP_DYNAMIC=TRUE の場合に、並列領域に使用されるスレッド数を決定するメソッドを選択します。設定可能な値は次のとおりです (asat | load_balance | thread_limit)。

  • asat: 並列開始時にスレッド数を推定します。

    asat (自動自己割り当てスレッド) のサポートは終了しました。将来のリリースでは削除される予定です。

  • load_balance: システムで利用可能な実行ユニットより多いスレッドを使用しないようにします。

  • thread_limit: システムの合計実行ユニットより多いスレッドを使用しないようにします。

デフォルト (IA-32 アーキテクチャー): load_balance (サポートされているすべての OS)

デフォルト (インテル® 64 アーキテクチャー): load_balance (サポートされているすべての OS)

デフォルト (インテル® MIC アーキテクチャー): thread_limit (サポートされているすべての OS)

KMP_HOT_TEAMS_MAX_LEVEL

ホットチームの入れ子構造の最大レベルを設定します。

ホットチームとは、後続の並列領域で素早く再利用できるように最適化されたスレッドチームです。ホットチームでは、次の並列領域を実行できるようにスレッドが保持されます。一方、コールドチームでは、各並列領域の完了後、スレッドは解放され共通のスレッドプールに配置されます。

値が 2 以上の場合、入れ子構造の並列処理を有効にする必要があります。

デフォルト: 1

KMP_HOT_TEAMS_MODE

ホットチームのスレッド数が減らされた場合のランタイムの動作を指定します。

値は以下のいずれかになります。

  • 0: 余分なスレッドを解放して共通のスレッドプールに戻します。

  • 1: 後続の並列領域で素早く利用できるように余分なスレッドを保持します。

デフォルト: 0

KMP_HW_SUBSET

明示的にアフィニティー設定やプロセス・アフィニティー・マスクを記述する代わりに、OpenMP* アプリケーションで使用するソケット数、ソケットあたりのコア数、コアあたりのスレッド数を指定します。使用するリソースを設定するオフセット値を指定することもできます。

KMP_TOPOLOGY_METHOD=hwloc の場合、拡張構文を利用できます。検出されたリソースに応じて、NUMA ノードや特定のキャッシュレベルを共有するハードウェア・リソースのグループなどの追加リソースを指定できます。例えば、「タイル」は一部のインテル® Xeon Phi™ プロセッサーで L2 キャッシュを共有するコアのセットです。

基本構文:

socketsS[@offset],coresC[@offset],threadsT

S、C、T では大文字と小文字は区別されません。

sockets
使用するソケット数。
cores
各ソケットで使用するコア数。
threads
各コアで使用するスレッド数。
offset
(オプション) スキップするソケット数またはコア数。

拡張構文 (KMP_TOPOLOGY_METHOD=hwloc の場合):

socketsS[@offset],numasN[@offset],tilesL2[@offset],coresC[@offset],threadsT

S、N、L2、C では大文字と小文字は区別されません。一部の指示子は一部のマシンでエイリアスです。同じリソースに対して重複するまたは複数のエイリアス指示子を指定することは許可されていません。

sockets
使用するソケット数。
numas
検出可能な場合、ソケットごとの NUMA ノードの数。
tiles
検出可能な場合、NUMA ノードごと (またはソケットごと) のタイル数。
cores
ソケットごと (または NUMA ノードごと、あるいはソケットごと) のコア数。
threads
各コアで使用するスレッド数。
offset
(オプション) スキップするソケット数またはコア数。

1 つ以上のリソースの種類 (sockets、cores、または threads) を指定しない場合、利用可能なすべてのリソース (sockets、cores、および threads) が使用されます。

選択したトポロジー検出手法でサポートされない特定の種類のリソースが指定された場合、KMP_HW_SUBSET の設定は無視されます。

OpenMP* アフィニティーが disabled に設定されている場合、この変数は効果がありません。

デフォルト: 省略すると、デフォルトで利用可能なすべてのハードウェア・リソースを使用します。

例:

  • 2s,4c,2t: 最初の 2 つのソケット (s0 と s1)、各ソケットで最初の 4 つのコア (c0-c3)、コアあたり 2 スレッドを使用します。

  • 2s@2,4c@8,2t: 最初の 2 つのソケット (s0 と s1) をスキップし 2 つのソケットを使用し、各ソケットで最初の 8 つのコア (c0-c7) をスキップし 4 つのコア (c8-c11) を使用し、コアあたり 2 スレッドを使用します。

  • 5C@1,3T: 利用可能なすべてのソケットを使用し、最初のコアをスキップし 5 つのコアを使用し、コアあたり 3 スレッドを使用します。

  • 2T: すべてのソケットですべてのコアを使用し、コアあたり 2 スレッドを使用します。

  • 4C@12: オフセット 12 で 4 コアを使用し、各コアで利用可能なすべてのスレッドを使用します。

KMP_INHERIT_FP_CONTROL

各並列領域の開始時点で、マスタースレッドの浮動小数点の制御設定を OpenMP* ワーカースレッドへコピーすることを有効 (TRUE) または無効 (FALSE) にします。

デフォルト: TRUE

KMP_LIBRARY

OpenMP* ランタイム・ライブラリーの実行モードを選択します。この変数の値は、serialturnaround、または throughput です。

デフォルト: throughput

KMP_PLACE_THREADS

これは古い環境変数です。KMP_HW_SUBSET を使用してください。

KMP_SETTINGS

プログラム実行中の OpenMP* ランタイム・ライブラリー環境変数の出力を有効 (TRUE) または無効 (FALSE) にします。ユーザー定義の環境変数設定と OpenMP* ランタイム・ライブラリーにより使用される効率的な変数の値の 2 つの変数リストが出力されます。

デフォルト: FALSE

KMP_STACKSIZE

プライベート・スタックとして使用する各 OpenMP* スレッドに割り当てるバイト数を設定します。

推奨するサイズは 16m です。

B (バイト)、K (キロバイト)、M (メガバイト)、G (ギガバイト)、T (テラバイト) などオプションのサフィックスを使用してバイト単位を指定します。値のみを指定すると、バイト単位は K (キロバイト) であると見なされます。

この変数は、ユーザープログラムによって生成されるオペレーティング・システムのネイティブスレッド、あるいは OpenMP* プログラムまたは Qparallel (Windows*) または parallel (Linux* および macOS*) オプションで生成された並列プログラムのシーケンシャル部分を実行するスレッドには影響ありません。

KMP_STACKSIZEGOMP_STACKSIZE をオーバーライドし、GOMP_STACKSIZE は OMP_STACKSIZE をオーバーライドします。

デフォルト (IA-32 アーキテクチャー): 2m

デフォルト (インテル® 64 アーキテクチャー): 4M

デフォルト (インテル® MIC アーキテクチャー): 4M (サポートされているすべての OS)

KMP_TOPOLOGY_METHOD

OpenMP* が特定のマシン・トポロジー・モデル・メソッドを使用するように強制します。

設定可能な値は以下のとおりです。

  • cpuid_leaf11

    cpuid 命令のリーフ 11 により指定された APIC ID をデコードします。

  • cpuid_leaf4

    cpuid 命令のリーフ 4 により指定された APIC ID をデコードします。

  • cpuinfo

    KMP_CPUINFO_FILE を指定しない場合は、/proc/cpuinfo を解析してトポロジーを特定するように強制できます (Linux* のみ)。

    前述のように、KMP_CPUINFO_FILE を指定する場合は、それを使用します (Windows* または Linux*)。

  • group

    2 レベルのマップ (レベル 0 はグループ内の異なるプロセッサーを指定、レベル 1 は異なるグループを指定) として判断します (64 ビットの Windows* のみ)。

  • flat

    プロセッサーの flat (線形) リストとして判断します。

  • hwloc

    Portable Hardware Locality (hwloc) ライブラリーと同様に判断します。最も詳細なモデルで、NUMA ノード、パッケージ、コア、ハードウェア・スレッド、キャッシュ、Windows* プロセッサー・グループなどを含みます。

KMP_VERSION

プログラム実行中の OpenMP* ランタイム・ライブラリーのバージョン情報の出力を有効 (TRUE) または無効 (FALSE) にします。

デフォルト: FALSE

KMP_WARNINGS

プログラム実行中の OpenMP* ランタイム・ライブラリーからの警告の表示を有効 (TRUE) または無効 (FALSE) にします。

デフォルト: TRUE

インテル® グラフィックス・テクノロジーの環境変数 (GFX_)

GFX_CPU_BACKUP

ターゲットが利用できない場合、ホスト上でヘテロジニアス・コードを実行するかどうかを制御します。

offload プラグマの if 節が false と評価されると、ターゲットの状態に関係なく、コードはホスト上で実行されます。

offload プラグマの if 節が指定されていないか true と評価され、オフロードをサポートしているターゲットおよびインテル® グラフィックス・テクノロジー・ドライバーが利用可能で正しく初期化されている場合、コードはターゲット上で実行されます。それ以外の場合、ホストのバックアップ実行は GFX_CPU_BACKUP の値に依存します。

ホストで実行させないようにするには、GFX_CPU_BACKUP0 に設定します。これは、ターゲットが利用できないと、アプリケーションは実行に失敗します。

ターゲットが利用できないときにホストで実行するには、GFX_CPU_BACKUP1 に設定します。デフォルトではこの変数は 1 に設定されるため、コードはホスト上で実行されます。

デフォルト: 1

GFX_MAX_THREAD_COUNT

グラフィックス・コアへオフロードされるループの入れ子を並列化する際のターゲットスレッドの最大数を制御します。この変数により、デフォルトの最大数を変更できます。

次の 2 つの値には特別な意味があります。

  • - 1 (デフォルト): 並列ループの入れ子の反復ごとに 1 スレッドを生成します。ループは、ベクトル化することが可能です。1 スレッドにより実行される 1 反復には、オリジナル・ループの複数の反復が含まれている可能性があります。

  • 0: スレッド数は N*hardware_thread_count になります。N に設定可能な値は次のとおりです。

    • 4: 1 次元のループの入れ子の場合

    • 8: 2 次元以上のループの入れ子の場合

    プログラムのパフォーマンスをチューニングする場合は、この値を使用すると良いでしょう。

多くの (例えば 512) スレッドをスケジュールすると一部の操作のレイテンシーを隠蔽できますが、スレッド数が多くなると、オフロードのコストが増加しパフォーマンスに影響を及ぼします。デフォルトでは、ランタイムが最大スレッド数を自動的に決定します。

特定のオフロード実行における実際のスレッド数は、実際の反復空間に応じてオフロードランタイムによって決定され、最大値よりも小さくなる可能性があります。詳細は、「インテル® グラフィックス・テクノロジー固有の並列性を使いこなす」を参照してください。

デフォルト: -1

例: GFX_MAX_THREAD_COUNT=32

「スレッドグループとスレッド空間の形状の制御」の関数と環境変数は、GFX_MAX_THREAD_COUNT よりも優先されます。

GFX_OFFLOAD_TIMEOUT

デフォルトでは、システム回復タイムアウト時間 (通常は 2 秒) より長くオフロードタスクを実行することはできません。タスクは、この変数で定義された別のタイムアウト後にハングまたは異常終了します。オフロードタスクをより長く実行できるようにするには、(Microsoft* のドキュメントを参照して) システム・レジストリーを編集し、タイムアウトによる回復を無効にします。60 秒では短い場合は、GFX_OFFLOAD_TIMEOUT により長い値を設定します。

デフォルト: 60 秒

GFX_LOG_OFFLOAD

任意のログレベル (1 から 3、3 が最も詳細) を設定して、オフロードプロセスの記録を有効または無効にします。

利用可能なハードウェア・スレッド数を確認するには、この環境変数を 1 に設定します。

実際のスレッド数を監視するには、この環境変数を 2 に設定します。

実際のスレッド数と並列ループの入れ子の反復空間の配分を監視するには、この環境変数を 3 に設定します。

記録を無効にするには、この環境変数を空の文字列または 0 に設定します。

記録を有効にするとオフロードのオーバーヘッドが大幅に増えるため、デバッグにのみ使用することを推奨します。

GFX_SHOW_TIME

実行の最後のタイミング情報の出力を有効または無効にします。

タイマー出力を無効にするには、GFX_SHOW_TIME を空にするか 0 を設定します。

「インテル® グラフィックス・テクノロジー用のオフロードタイマー」を参照してください。

GFX_THREAD_GROUP_WIDTH

スレッドグループの幅を設定します。

「スレッドグループとスレッド空間の形状の制御」を参照してください。

GFX_THREAD_GROUP_HEIGHT

スレッドグループの高さを設定します。

この環境変数は、GFX_MAX_THREAD_COUNT 環境変数よりも優先されます。

「スレッドグループとスレッド空間の形状の制御」を参照してください。

GFX_THREAD_SPACE_WIDTH

スレッド空間の幅 (スレッド数) を設定します。

この変数を設定しない場合、または 0 に設定すると、自動的に適切な値が計算されます。

この環境変数は、_GFX_set_thread_space_config 環境変数よりも優先されます。

「スレッドグループとスレッド空間の形状の制御」を参照してください。

GFX_THREAD_SPACE_HEIGHT

スレッド空間の高さ (スレッド数) を設定します。

この変数を設定しない場合、または 0 に設定すると、自動的に適切な値が計算されます。

この環境変数は、_GFX_set_thread_space_config 環境変数よりも優先されます。

「スレッドグループとスレッド空間の形状の制御」を参照してください。

インテル® メニー・インテグレーテッド・コア (インテル® MIC) アーキテクチャー環境変数

MIC_ENV_PREFIX

ターゲットに渡される環境変数を制御します。

デフォルトでは、ホストで設定されているすべての環境変数がターゲットに渡されます。MIC_ENV_PREFIX を指定すると、プリフィクスがこの変数の値と等しい環境変数のみ渡されます。例えば、MIC_ENV_PREFIX=ABC を指定すると、プリフィクスが ABC の環境変数のみ渡されます。

MIC_LD_LIBRARY_PATH 変数は削除されずにターゲットに渡されるため、MIC_ENV_PREFIX=MIC を使用してターゲット上の LD_LIBRARY_PATH を変更することはできません。

ターゲットで LD_LIBRARY_PATH を変更するには、次の操作を行います。

  1. MIC_ENV_PREFIXMIC 以外のプリフィクスを設定します。

  2. ホストでこのプリフィクス付きの LD_LIBRARY_PATH 環境変数を作成し、任意の値を設定します。これで、ターゲットの LD_LIBRARY_PATH 環境変数が設定されます。

例えば、ホストで次の 2 つの環境変数を設定すると、ターゲットの LD_LIBRARY_PATH/tmp/mylibs に設定されます。

MIC_ENV_PREFIX=ABC
ABC_LD_LIBRARY_PATH=/tmp/mylibs

特定のコプロセッサーへの環境変数の引き渡し、および 1 つまたはすべてのコプロセッサーへの複数の環境変数の引き渡しについては、「CPU の環境変数を設定してコプロセッサーの実行環境を変更する」を参照してください。

MIC_PROXY_IO

stderr と stdout のプロキシーを有効 (1) または無効 (0) にし、プロセスでホストとターゲット間の I/O プロキシーサポートを有効にするかどうかを指定します。

デフォルト: 1

例: MIC_PROXY_IO=0

MIC_SEP_MONITOR

オフロード領域で SEP を有効 (1) または無効 (0) にします。

デフォルト: 0

例: MIC_SEP_MONITOR=1

MIC_STACKSIZE

オフロードのメインスレッドのスタックサイズを指定します。この値は、一般的に個々のスレッドのスタックサイズよりもはるかに大きくなります。ターゲットまたはホストでネイティブに実行する場合に、ulimit-s (BASH シェル) または limit stacksize (C シェル) に設定する値に対応します。

<整数値>B|K|M|G|T のように設定します。各文字の意味は次のとおりです。

  • B = バイト

  • K = キロバイト

  • M = メガバイト

  • G = ギガバイト

  • T = テラバイト

デフォルト: 12M

例: MIC_STACKSIZE=16M

MIC_USE_2MB_BUFFERS

(サイズ > MIC_USE_2MB_BUFFERS) の場合、2M ページを使用します。ランタイムの長さがこの環境変数の値を超えるポインターベースの変数は、大きなページに割り当てられます。

<整数値>B|K|M|G|T のように設定します。各文字の意味は次のとおりです。

  • B = バイト

  • K = キロバイト

  • M = メガバイト

  • G = ギガバイト

  • T = テラバイト

例: MIC_USE_2MB_BUFFERS=64K

OFFLOAD_DEVICES

変数で指定されたコプロセッサーのみ使用するようにオフロードプロセスを制限します。

ターゲットのデバイス番号をカンマ区切りのリストで指定できます。デバイス番号の範囲は、0 ~ (number_of_devices_in_the_system-1) です。0 はシステムの最初のコプロセッサーで、(number_of_devices_in_the_system-1) はシステムの最後のコプロセッサーです。

オフロードに利用可能なコプロセッサーは、論理的に番号が付けられています。関数 _Offload_number_of_devices() は利用可能なコプロセッサーの数を返します。オフロードプラグマの target 指定子で使用するコプロセッサーのインデックスの範囲は、OFFLOAD_DEVICES で指定されます。

デフォルト: オフロードプロセスはすべてのデバイスを使用します。

例: OFFLOAD_DEVICES = 1,2

3 つ以上のコプロセッサーを搭載したシステムでは、アプリケーションはこの設定によりコプロセッサー 1 と 2 のみ使用することができます。コプロセッサー 0 または 1 へのオフロードは、2 つ目と 3 つ目の物理コプロセッサーで実行されます。1 よりも大きなデバイス番号が指定された場合は、すべてのオフロードがコプロセッサー 0 と 1 で行われます。コプロセッサーで実行される関数 _Offload_number_of_devices(), は、オフロードが OFFLOAD_DEVICES で指定されたコプロセッサー 1 または 2 で実行している場合は 0 または 1 を返します。

この変数を空の値に設定すると (export OFFLOAD_DEVICES= ) 効果がありません。この変数をnone に設定すると (set OFFLOAD_DEVICES=none)、プログラム内のオフロードコードの実行に次のように影響します。

  • オフロードがオプションの場合、コードはホスト CPU で実行されます。

  • オフロードが必須の場合、プログラムはオフロードに必要なコプロセッサーの初期化でオフロードエラーにより終了し、デバイスが利用できないことを示すメッセージが出力されます。

オフロードがオプションの場合は optional 節を、必須の場合は mandatory 節を、次のいずれかで指定します。

  • qoffload (Linux*) または Qoffload (Windows*) コンパイラー・オプション

  • offload プラグマ

OFFLOAD_NODES

ホストシステムからオフロード可能なクラスターのサブセット (サーバーまたはノードのグループ) を定義します。クラスター内でオフロードする場合、オフロード可能なノードを指定するため、この環境変数を設定する必要があります。

環境変数の値は、マシン指定子のカンマ区切りリストです。マシン指定子には、マシン名または IP アドレスを使用できます。オプションで、マシン指定子の後に角括弧で囲んだノードタイプとファブリック・タイプを指定できます。現在、デフォルトのノードタイプは x200、ファブリック・タイプは OFI です。今後ほかのノードタイプとファブリックタイプもサポートされる予定です。

OFFLOAD_NODES で指定されたオフロード可能なマシンには、指定された順にデバイス番号 0、1、2、... が割り当てられます。このデバイス番号は、#pragma offload target(mic:<number>) によるオフロードで利用できます。OFFLOAD_DEVICES 環境変数を使用して、利用可能なクラスターマシンのサブセットへオフロードを制限することもできます。

デフォルト: デフォルト値はありません。クラスター内でオフロードする場合は、必ずこの環境変数を設定する必要があります。

例: export OFFLOAD_NODES="machine1,machine2,10.2.100.50"

例: export OFFLOAD_NODES="machine3[x200,OFI]"

例: 次の構文では、offload プラグマで指定されたターゲットにおいて、machine2 と 10.2.100.50 がプロセッサー 0 と 1 として使用されます。

export OFFLOAD_NODES="machine1,machine2,10.2.100.50"
export OFFLOAD_DEVICES=1,2 

OFFLOAD_INIT

オフロードランタイムにターゲットを初期化するタイミングのヒントを与えます。

値は以下のいずれかになります。

  • on_start: mainに入る前に利用可能なすべてのコプロセッサーが初期化されます。

  • on_offload: 各ターゲットへの最初のオフロードの直前に初期化されます。そのオフロードを処理するターゲットのみ初期化されます。

  • on_offload_all: アプリケーションの最初のオフロードの直前に利用可能なすべてのターゲットが初期化されます。

デフォルト: on_offload_all

: OFFLOAD_INIT=on_start

OFFLOAD_REPORT

オフロード実行時間 (秒単位) とデータ転送量 (バイト単位) の出力を制御します。この環境変数は、__Offload_report API を使用した場合と同じです。

値は以下のいずれかになります。

  • 1: オフロード実行時間 (秒単位) を出力します。

  • 2: 1 の情報 + CPU とターゲット間のデータ転送量に関するレポートを生成します。

  • 3: 2 の情報 + デバイスの初期化と個々の変数の転送を含むオフロード処理に関する詳細なレポートを生成します。

デフォルト: なし

例: OFFLOAD_REPORT=1

_Offload_report も参照してください。

プロファイルに基づく最適化 (PGO_) 環境変数

INTEL_PROF_DUMP_CUMULATIVE

インストルメント済みユーザー・アプリケーションの実行中に、インターバル・プロファイル・ダンプ (INTEL_PROF_DUMP_INTERVAL 関数または _PGOPTI_Set_Interval_Prof_Dump 関数により開始) を使用する際、プロファイル情報を含む複数の .dyn ファイルを作成する代わりに、1 つの .dyn ファイルを作成することができます。設定されていない場合は、インストルメント済みユーザー・アプリケーションを実行すると、それぞれのインターバルに対して新しい .dyn ファイルが作成されます。

この環境変数は、終了しないアプリケーションや、異常終了するアプリケーション (通常の終了コードを省略) に対して設定すると便利です。

INTEL_PROF_DUMP_INTERVAL

インストルメント済みのユーザー・アプリケーション内で、インターバル・プロファイルのダンプを開始します。この環境変数は、インストルメント済みのユーザー・アプリケーションでインターバル・プロファイル・ダンプに使用されることがあります。

「インターバル・プロファイル・ダンプ」を参照してください。

INTEL_PROF_DYN_PREFIX

別の PGO 実行によってダンプされた .dyn ファイルと区別するため、.dyn ファイル名に追加するプリフィクスを指定します。インストルメント済みアプリケーションを実行すると、<prefix>_<timestamp>_<pid>.dyn という名前の .dyn ファイルが生成されます。<prefix> は指定した識別子です。

この環境変数で指定する値では、次の文字を使用できません: < > : " / \ | ? *。無効なプリフィクスを指定すると、デフォルトの命名規則が使用されます。

PROF_DIR

プロファイル・ファイル (拡張子が .dyn.dpi.spi などのファイル) を保存するディレクトリーを指定します。デフォルトでは、.dyn ファイルは、[Q]prof-gen オプションでコンパイルされたバイナリーにある最初に実行されたインストルメント済みルーチンを含むファイルのソース・ディレクトリーに保存されます。

この変数は、プロファイル処理の 3 つのフェーズすべてに適用されます。

  • インストルメンテーション・コンパイルとリンク

  • インストルメント済みプログラムの実行

  • フィードバック・コンパイル

PROF_DPI

.dpi ファイルの名前です。

デフォルト: pgopti.dpi

PROF_DUMP_INTERVAL

これは古いオプションです。INTEL_PROF_DUMP_INTERVAL を使用してください。

PROF_NO_CLOBBER

フィードバック・コンパイル・フェーズでの処理を少し変更する変数です。デフォルトでは、フィードバック・コンパイル・フェーズでは、すべての動的情報ファイルから得たデータがマージされます。そして .dyn ファイルが既存の pgopti.dpi ファイルよりも新しい場合は、pgopti.dpi ファイルを上書きします。

この変数を設定すると、コンパイラーは既存の pgopti.dpi ファイルを上書きせずに、警告を発行します。新しい動的情報ファイルを使用するには、既存の pgopti.dpi ファイルを削除する必要があります。


関連情報