並列処理に使用する組み込み関数

以下の組み込み関数を使用して、並列環境に関する情報を取得します。 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 ランタイム・ライブラリー関数についての完全な情報は、OpenMP C/C++ アプリケーション・プログラム・インターフェースの仕様を参照してください。

関連概念

プログラムの並列化

関連タスク

プラグマを使用した並列処理の制御

関連参照

並列処理を制御するプラグマ
並列処理のための OpenMP ランタイム・オプション
付録 B, 組み込み関数 IBM Copyright 2003