並列処理のための組み込み関数

以下の組み込み関数を使用して、並列環境に関する情報を取得します。 omp_ 関数の関数定義は、omp.h ヘッダー・ファイルにあります。

プロトタイプ 説明
int omp_get_num_threads(void); この関数が呼び出された並列領域を実行しているチームに現在存在するスレッドの数を戻します。
void omp_set_num_threads(int num_threads); OMP_NUM_THREADS 環境変数の設定をオーバーライドし、このディレクティブに続く並列領域で使用されるスレッドの数を指定します。値 num_threads は正整数でなければなりません。
num_threads 節がある場合は、それが適用される並列領域に対して、omp_set_num_threads ライブラリー関数または OMP_NUM_THREADS 環境変数によって要求されたスレッドの数が置き換えられます。後続の並列領域はこの影響を受けません。
int omp_get_max_threads(void); omp_get_num_threads に対する呼び出しで戻すことができる最大値を戻します。
int omp_get_thread_num(void); そのチームの範囲内で、この関数を実行しているスレッドのスレッド番号を戻します。 スレッド番号は、0 と omp_get_num_threads()-1 の間です。チームのマスター・スレッドは、スレッド 0 です。
int omp_get_num_procs(void); プログラムに割り当てることができるプロセッサーの最大数を戻します。
int omp_in_parallel(void); 並列で実行している並列領域の動的範囲内で呼び出された場合、非ゼロを戻します。それ以外は 0 を戻します。
void omp_set_dynamic(int dynamic_threads); 並列領域の実行に使用可能なスレッドの数の動的調整を使用可能または使用不可にします。
int omp_get_dynamic(void); 動的スレッドの調整が使用可能な場合に非ゼロを戻し、それ以外は 0 を戻します。
void omp_set_nested(int nested); ネストされた並列性を使用可能または使用不可にします。
int omp_get_nested(void); ネストされた並列性が使用可能な場合に非ゼロを戻し、使用不可の場合は 0 を戻します。
void omp_init_lock(omp_lock_t *lock);

void omp_init_nest_lock(omp_nest_lock_t *lock);

これらの関数は、ロックを初期化する唯一の手段を提供します。 各関数は以降の呼び出しで使用するために、パラメーター lock と関連したロックを初期化します。
void omp_destroy_lock(omp_lock_t *lock);

void omp_destroy_nest_lock(omp_nest_lock_t *lock);

これらの関数は、指定されたロック変数 lock が未初期化であることを保証します。
void omp_set_lock(omp_lock_t *lock);

void omp_set_nest_lock(omp_nest_lock_t *lock);

これらの各関数は、 指定されたロックが使用可能になりロックを設定するまで、 その関数を実行しているスレッドをブロックします。 アンロックされている場合は、単純ロックが使用可能です。 ネスト可能なロックは、アンロックされている場合、 またはこの関数を実行しているスレッドによってすでに所有されている場合は使用可能です。
void omp_unset_lock(omp_lock_t *lock);

void omp_unset_nest_lock(omp_nest_lock_t *lock);

これらの関数は、ロックの所有権を解放する手段を提供します。
int omp_test_lock(omp_lock_t *lock);

int omp_test_nest_lock(omp_nest_lock_t *lock);

これらの関数は、ロックを設定しようとしますが、 スレッドの実行はブロックしません。
double omp_get_wtime(void); 固定された開始時刻からの経過時間を戻します。 固定された開始時刻の値は現行プログラムの開始時に決定され、プログラム実行中、定数となります。
double omp_get_wtick(void); クロックの刻みの間の秒数を戻します。
注:
現在のインプリメンテーションでは、ネストされた並列領域は、常に直列化されています。 その結果、omp_set_nested は影響力を持たず、omp_get_nested は常に 0 を戻します。

OpenMP ランタイム・ライブラリー関数についての完全な情報は、www.openmp.org の OpenMP C/C++ アプリケーション・プログラム・インターフェースの仕様を参照してください。

関連情報