この付録では、この API で "実装で定義されている" と記述されている動作について説明します。 各動作について、仕様内のそれぞれ該当する参照箇所が記載されています。
解説
以下の場合について、実装側でその動作を定義および文書化する必要があります。ただし、この一覧ですべてというわけではありません。
**スレッドの数:**スレッド数の動的調整が無効になっている、ランタイム システムが提供できる数の並列領域に対して要求されるスレッドの数を超えたながら並列領域が発生した場合は、プログラムの動作の実装 (9 ページを参照) 定義です。
Visual C++ では、入れ子になっていない並行領域については、最大 64 スレッドが提供されます。
**プロセッサの数:**任意の時点でスレッドを実際にホストする物理的なプロセッサ数実装で定義されます (10 ページを参照)。
Visual C++ では、この数は定数ではなく、オペレーティング システムによって制御されます。
**スレッドのチームを作成します。**入れ子になった並列領域を実行するチーム内のスレッド数は実装で定義されます。(10 ページを参照してください。)
Visual C++ では、これはオぺレーティング システムによって決定されます。
**schedule(runtime):**決定に関するスケジュール実行時まで延期されます。 スケジュールのタイプとチャンク サイズは OMP_SCHEDULE 環境変数を設定することによって、実行時に選択できます。 この環境変数が設定されていない場合、選択されるスケジュールは実装で定義されます (13 ページを参照)。
Visual C++ では、スケジュールのタイプは、チャンク サイズ指定のない static になります。
**既定のスケジュールします。**スケジュール句がない場合は、既定のスケジュールの実装-(13 ページを参照) 定義されます。
Visual C++ では、既定のスケジュール タイプは、チャンク サイズ指定のない static です。
アトミック。かどうかすべての実装を置き換えます実装定義はatomicディレクティブと重要なを同じ一意の名前 (20 ページを参照) を持つディレクティブ。
Visual C++ では、atomic によって変更されるデータが自然の配置にない場合、あるには 1 バイトまたは 2 バイト長である場合、そのプロパティを満たすすべての分割不可能な操作が 1 つのクリティカル セクションを使用します。 それ以外の場合、クリティカル セクションは使用されません。
**omp_get_num_threads:**スレッドの数、ユーザーが明示的に設定されていない場合は、既定値は実装で定義されます (9 ページを参照してくださいとセクション 3.1.237 ページ)。
Visual C++ では、スレッド数の既定値は、プロセッサ数と等しくなります。
**omp_set_dynamic:**動的なスレッド調整の既定実装で定義されます (を参照してくださいセクション 3.1.7ページ 39)。
Visual C++ では、既定値は FALSE です。
**omp_set_nested:**入れ子になった並列処理が有効になっている場合は、入れ子になった並行領域の実行に使用されるスレッド数は実装で定義されます (を参照してくださいセクション 3.1.9ページ 40)。
Visual C++ では、このスレッド数はオぺレーティング システムによって決定されます。
OMP_SCHEDULE環境変数:この環境変数の既定値は実装で定義されます (を参照してくださいセクション 4. 1ページ 48)。
Visual C++ では、スケジュールのタイプは、チャンク サイズ指定のない static です。
OMP_NUM_THREADS環境変数:値が指定されていない場合、OMP_NUM_THREADS環境変数、または指定された値は、正の整数ではないか、値がシステムがサポートするスレッドの最大数を超える場合は、使用するスレッド数は実装で定義されます (を参照してくださいセクション 4. 2ページ 48)。
Visual C++ では、指定されている値が 0 以下の場合、スレッド数はプロセッサ数と等しくなります。 値が 64 を超えている場合、スレッド数は 64 になります。
OMP_DYNAMIC環境変数:既定値は実装で定義されます (を参照してくださいセクション 4. 3の 49 ページ)。
Visual C++ では、既定値は FALSE です。