OpenMP は、並列モードでプログラムを管理しやすくするために、いくつかのランタイム・ライブラリー・ルーチンを提供します。これらのランタイム・ライブラリー・ルーチンの多くには、デフォルトとして設定可能な環境変数が対応付けられています。ランタイム・ライブラリー・ルーチンを使用すれば、これらの変数を動的に変更でき、プログラムを簡単に制御できます。いずれの場合も、ランタイム・ライブラリー・ルーチンを呼び出すと、それに対応する環境変数は無効になります。
ここでは、OpenMP ランタイム・ライブラリー・ルーチンの概要を説明します。「OpenMP* のサポートの概要」も参照してください。これらのルーチンの使用に関する詳細は、OpenMP API バージョン 3.0 仕様を参照してください。
ソースコードに次のような文を追加して適切なルーチンの宣言をインクルードします。
例 |
---|
include "omp_lib.h" |
#include <omp.h> |
ヘッダーファイルは、コンパイラーをインストールした ../include (Linux* および Mac OS* X) または ..\include (Windows*) ディレクトリーにあります。
次の表は、これらランタイム・ライブラリー・ルーチンとのインターフェイスを明記したものです。(ルーチン名はユーザー名前空間にあります。)
実行環境ルーチンを使用して、スレッドおよび並列環境の監視と操作を行います。
関数 |
説明 |
---|---|
void omp_set_num_threads(int nthreads) |
呼び出し側のスレッドにより作成される後続の並列領域に使用するスレッド数を設定します。 |
int omp_get_num_threads(void) |
現在の並列領域に使用されているスレッドの数を返します。 この関数は、omp_set_num_threads() 関数からの呼び出し側スレッドによって継承される値は返しません。 |
int omp_get_max_threads(void) |
呼び出し側のスレッドにより作成される後続の並列領域に利用可能なスレッド数を返します。 この関数は、omp_set_num_threads() 関数からの呼び出し側スレッドによって継承される値を返します。 |
int omp_get_thread_num(void) |
現在の並列領域のコンテキスト内の呼び出し側スレッド数を返します。 |
int omp_get_num_procs(void) |
プログラムで利用できるプロセッサー数を決定します。 |
int omp_in_parallel(void) |
並列で実行されている並列領域の動的な範囲内で呼ばれた場合、TRUE を返します。そうでない場合は、FALSE (整数値 0) を返します。 |
void omp_set_dynamic(intdynamic_threads) |
並列領域の実行に使用するスレッド数の動的な調整を有効または無効にします。dynamic_threads が TRUE の場合は、動的スレッドは有効です。dynamic_threads が FALSE の場合は、動的スレッドは無効です。動的スレッドはデフォルトでは無効です。 |
int omp_get_dynamic(void) |
動的なスレッド調整が有効の場合は、TRUE を返します。そうでない場合は、FALSE を返します。 |
void omp_set_nested(intnested) |
入れ子された並列処理を有効または無効にします。nested が TRUE の場合は、入れ子された並列処理は有効です。nested が FALSE の場合は、入れ子された並列処理は無効です。入れ子された並列処理はデフォルトでは無効です。 |
int omp_get_nested(void) |
入れ子された並列処理が有効な場合は、TRUE を返します。そうでない場合は、FALSE を返します。 |
void omp_set_schedule(omp_sched_t kind,int modifier) |
'runtime' がスケジュール種別として使用されている場合に適用されるワークシェアリング・ループのスケジュールを決定します。 |
void omp_get_schedule(omp_sched_t *kind,int *modifier) |
'runtime' スケジュールが使用されている場合に適用されるワークシェアリング・ループのスケジュールを返します。 |
int omp_get_thread_limit(void) |
OpenMP プログラムで同時に実行するスレッド数の最大値を返します。 |
void omp_set_max_active_levels(int max_active_levels) |
入れ子されたアクティブな並列領域の数を制限します。負の max_active_levels が指定された場合、呼び出しは無視されます。 |
int omp_get_max_active_levels(void) |
入れ子されたアクティブな並列領域の最大数を返します。 |
int omp_get_active_level(void) |
呼び出しが含まれたタスクを囲む、入れ子されたアクティブな並列領域の数を返します。 |
int omp_get_level(void) |
呼び出しが含まれたタスクを囲む、入れ子された並列領域 (アクティブ、非アクティブにかかわらず) の数を返します。暗黙的な並列領域は含まれません。 |
int omp_get_ancestor_thread_num(int level) |
指定された現在のスレッドの入れ子レベルに対する先祖のスレッド番号を返します。 |
int omp_get_team_size(int level) |
先祖が所属するスレッドチームのサイズを返します。 |
ロックルーチンを使用して OpenMP ロックを操作します。
関数 |
説明 |
---|---|
void omp_init_lock(omp_lock_t lock) |
後続の呼び出しに使用する lock に関連付けられたロックを初期化します。 |
void omp_destroy_lock(omp_lock_t lock) |
lock により指定されたロックを未定義または未初期化にします。 |
void omp_set_lock(omp_lock_t lock) |
lock に関連付けられているロックが使用可能な状態になるまで実行中のスレッドを強制的に待機させます。ロックが使用可能になると、スレッドにはそのロックの所有権が与えられます。 |
void omp_unset_lock(omp_lock_t lock) |
lock に関連付けられているロックの所有権から実行スレッドを解放します。lock に関連付けられたロックを実行中のスレッドが所有していない場合の動作は不定です。 |
int omp_test_lock(omp_lock_t lock) |
lock に関連付けられているロックを設定しようと試みます。成功した場合は、TRUE を返します。そうでない場合は、FALSE を返します。 |
void omp_init_nest_lock(omp_nest_lock_t lock) |
後続の呼び出しに使用する lock に関連付けられた入れ子されたロックを初期化します。 |
void omp_destroy_nest_lock(omp_nest_lock_t lock) |
lock に関連付けられている入れ子されたロックを未定義または未初期化にします。 |
void omp_set_nest_lock(omp_nest_lock_t lock) |
lock に関連付けられている入れ子されたロックが使用可能な状態になるまで実行中のスレッドを強制的に待機させます。ロックが使用可能になると、スレッドにはその入れ子されたロックの所有権が与えられます。スレッドが既にロックを所有している場合は、ロックの入れ子カウント数は増えます。 |
void omp_unset_nest_lock(omp_nest_lock_t lock) |
入れ子カウント数がゼロの場合は、lock に関連付けられた入れ子されたロックの所有権から実行中のスレッドを解放します。解放されない場合、入れ子カウント数は減ります。 lock に関連付けられた入れ子のロックを、実行中のスレッドが所有していない場合の動作は不定です。 |
int omp_test_nest_lock(omp_nest_lock_t lock) |
lock により指定されている入れ子されたロックを設定しようと試みます。成功した場合は入れ子カウント数を返し、失敗した場合は 0 を返します。 |
関数 |
説明 |
---|---|
double omp_get_wtime(void) |
任意の参照時間から経過したウォールクロック時間 (秒) に等しい倍精度値を返します。参照時間は、プログラム実行中には変更されません。 |
double omp_get_wtick(void) |
連続するクロック刻みの間隔の秒数に等しい倍精度値を返します。 |