次の方法で共有


E. OpenMP C/C++ の実装で定義されている動作

この付録では、この API で "実装で定義" と説明されている動作をまとめています。 各動作は、メイン仕様の説明と相互参照されています。

解説

これらのケースでは、実装で動作を定義し、文書化する必要がありますが、この一覧は不完全である可能性があります。

  • スレッド数: スレッド数の動的調整が無効になっているときに並列領域が検出され、その並列領域に対して要求されたスレッド数がランタイム システムで提供できる数を超えている場合、プログラムの動作は実装で定義されます (9 ページを参照)。

    Visual C++ では、入れ子になっていない並列領域の場合、64 スレッド (最大) が提供されます。

  • プロセッサ数: 任意の時点でスレッドを実際にホストしている物理プロセッサの数は、実装で定義されます (10 ページを参照)。

    Visual C++ では、この数は一定ではなく、オペレーティング システムによって制御されます。

  • スレッドのチームの作成: 入れ子になった並列領域を実行するチーム内のスレッドの数は、実装で定義されます (10 ページを参照)。

    Visual C++ では、この数はオペレーティング システムによって決定されます。

  • schedule(runtime): スケジューリングに関する決定は実行時まで遅延されます。 スケジュールの種類とチャンク サイズは、OMP_SCHEDULE 環境変数を設定することで実行時に選択できます。 この環境変数が設定されていない場合、結果のスケジュールは実装で定義されます (13 ページを参照)。

    Visual C++ では、スケジュールの種類はチャンク サイズのない static です。

  • 既定のスケジューリング: schedule 句がない場合、既定のスケジュールは実装で定義されます (13 ページを参照)。

    Visual C++ では、既定のスケジュールの種類はチャンク サイズのない static です。

  • ATOMIC: 実装で、すべての atomic ディレクティブを同じ一意の名前が付けられた critical ディレクティブに置き換えるかどうかは、実装で定義されます (20 ページを参照)。

    Visual C++ では、atomic によって変更されるデータが自然なアラインメント上にない場合、または長さが 1 バイトまたは 2 バイトの場合、そのプロパティを満たすすべてのアトミック操作で 1 つのクリティカル セクションが使用されます。 それ以外の場合、クリティカル セクションは使用されません。

  • omp_get_num_threads: スレッド数がユーザーによって明示的に設定されていない場合、既定値は実装で定義されます (9 ページを参照)。

    Visual C++ では、既定のスレッド数はプロセッサ数と同じになります。

  • omp_set_dynamic: 動的スレッド調整の既定値は実装で定義されます。

    Visual C++ では、既定値は FALSE です。

  • omp_set_nested: 入れ子になった並列処理が有効になっている場合、入れ子になった並列領域の実行に使用されるスレッドの数は、実装で定義されます。

    Visual C++ では、スレッド数はオペレーティング システムによって決定されます。

  • OMP_SCHEDULE 環境変数: この環境変数の既定値は実装で定義されます。

    Visual C++ では、スケジュールの種類はチャンク サイズのない static です。

  • OMP_NUM_THREADS 環境変数: OMP_NUM_THREADS 環境変数に値が指定されていない場合、指定された値が正の整数ではない場合、または値がシステムでサポートできるスレッドの最大数を超えている場合、使用するスレッドの数は実装で定義されます。

    Visual C++ では、指定された値が 0 以下の場合、スレッド数はプロセッサ数と同じになります。 値が 64 より大きい場合、スレッド数は 64 です。

  • OMP_DYNAMIC 環境変数: 既定値は実装で定義されます。

    Visual C++ では、既定値は FALSE です。