3.1.7 omp_set_dynamic 関数
omp_set_dynamic 関数は、並列領域の実行に使用できるスレッド数の動的調整を有効または無効にします。形式は次のとおりです。
#include <omp.h>
void omp_set_dynamic(int dynamic_threads);
dynamic_threads が 0 以外の値に評価される場合、以降の並列領域の実行に使用されるスレッド数は、システム リソースが最適に利用されるよう、ランタイム環境によって自動的に調整されます。結果として、開発者が指定するスレッド数が最大スレッド数になります。並列領域を実行するチーム内のスレッド数は、その並列領域の存続期間中は固定され、omp_get_num_threads 関数によって報告されます。
dynamic_threads が 0 に評価される場合、動的調整は無効になります。
この関数は、omp_in_parallel 関数が 0 を返すプログラム内から呼び出された場合に、上記の動作を実行します。omp_in_parallel 関数が 0 以外の値を返すプログラムから呼び出される場合のこの関数の動作は未定義です。
omp_set_dynamic の呼び出しは、OMP_DYNAMIC 環境変数より優先されます。
スレッドの動的調整の既定の設定は実装で定義されます。したがって、固定数のスレッドによって実行する必要があるユーザー コードの場合、明示的に動的スレッドを無効にする必要があります。実装側でスレッド数の動的調整機能を提供する必要はありませんが、すべてのプラットフォーム間での移植性をサポートするインターフェイスを提供する必要はあります。
クロス リファレンス
omp_get_num_threads 関数については、37 ページの「3.1.2 omp_get_num_threads 関数 」を参照してください。
OMP_DYNAMIC 環境変数については、49 ページの「4.3 OMP_DYNAMIC」を参照してください。
omp_in_parallel 関数については、38 ページの「3.1.6 omp_in_parallel 関数」を参照してください。