OpenMP* ランタイム・ライブラリー・ルーチン

OpenMP は、並列モードでプログラムを管理しやすくするために、いくつかのランタイム・ライブラリー・ルーチンを提供します。これらのランタイム・ライブラリー・ルーチンの多くには、デフォルトとして設定可能な環境変数が対応付けられています。ランタイム・ライブラリー・ルーチンを使用すれば、これらの変数を動的に変更でき、プログラムを簡単に制御できます。いずれの場合も、ランタイム・ライブラリー・ルーチンを呼び出すと、それに対応する環境変数は無効になります。

ここでは、OpenMP ランタイム・ライブラリー・ルーチンの概要を説明します。「OpenMP* のサポートの概要」も参照してください。これらのルーチンの使用に関する詳細は、OpenMP API バージョン 3.0 仕様を参照してください。

次の表は、これらランタイム・ライブラリー・ルーチンとのインターフェイスを明記したものです。(ルーチン名はユーザー名前空間にあります。)

実行環境ルーチン

実行環境ルーチンを使用して、スレッドおよび並列環境の監視と操作を行います。

関数

説明

SUBROUTINE OMP_SET_NUM_THREADS(num_threads)
INTEGER num_threads

呼び出し側のスレッドにより作成される後続の並列領域に使用するスレッド数を設定します。

INTEGER FUNCTION OMP_GET_NUM_THREADS()

現在の並列領域に使用されているスレッドの数を返します。

この関数は、OMP_SET_NUM_THREADS() 関数からの呼び出し側スレッドによって継承される値は返しません。

INTEGER FUNCTION OMP_GET_MAX_THREADS()

呼び出し側のスレッドにより作成される後続の並列領域に利用可能なスレッド数を返します。

この関数は、OMP_SET_NUM_THREADS() 関数からの呼び出し側スレッドによって継承される値を返します。

INTEGER FUNCTION OMP_GET_THREAD_NUM()

現在の並列領域のコンテキスト内の呼び出し側スレッド数を返します。

INTEGER FUNCTION OMP_GET_NUM_PROCS()

プログラムで利用できるプロセッサー数を決定します。

LOGICAL FUNCTION OMP_IN_PARALLEL()

並列で実行されている並列領域の動的な範囲内で呼ばれた場合、.TRUE. を返します。そうでない場合は、.FALSE. を返します。

SUBROUTINE
OMP_SET_DYNAMIC(dynamic_threads)
LOGICAL dynamic_threads

並列領域の実行に使用するスレッド数の動的な調整を有効または無効にします。dynamic_threads.TRUE. の場合は、動的スレッドは有効です。dynamic_threads.FALSE. の場合は、動的スレッドは無効です。動的スレッドはデフォルトでは無効です。

LOGICAL FUNCTION OMP_GET_DYNAMIC()

動的なスレッド調整が有効の場合は、.TRUE. を返します。そうでない場合は、.FALSE. を返します。

SUBROUTINE OMP_SET_NESTED(nested)
LOGICAL nested

入れ子された並列処理を有効または無効にします。nested.TRUE. の場合は、入れ子された並列処理は有効です。nested.FALSE. の場合は、入れ子された並列処理は無効です。入れ子された並列処理はデフォルトでは無効です。

LOGICAL FUNCTION OMP_GET_NESTED()

入れ子された並列処理が有効な場合は、.TRUE. を返します。そうでない場合は、.FALSE. を返します。

SUBROUTINE
OMP_SET_SCHEDULE(kind,modifier)
INTEGER(KIND=omp_sched_t) kind
INTEGER modifier

'runtime' がスケジュール種別として使用されている場合に適用されるワークシェアリング・ループのスケジュールを決定します。

SUBROUTINE
OMP_GET_SCHEDULE(kind,modifier)
INTEGER(KIND=omp_sched_t) kind
INTEGER modifier

'runtime' スケジュールが使用されている場合に適用されるワークシェアリング・ループのスケジュールを返します。

INTEGER FUNCTION
OMP_GET_THREAD_LIMIT()

OpenMP プログラムで同時に実行するスレッド数の最大値を返します。

SUBROUTINE
OMP_SET_MAX_ACTIVE_LEVELS(max_active_levels)
INTEGER max_active_levels

入れ子されたアクティブな並列領域の数を制限します。負の max_active_levels が指定された場合、呼び出しは無視されます。

INTEGER FUNCTION
OMP_GET_MAX_ACTIVE_LEVELS()

入れ子されたアクティブな並列領域の最大数を返します。

INTEGER FUNCTION
OMP_GET_ACTIVE_LEVEL()

呼び出しが含まれたタスクを囲む、入れ子されたアクティブな並列領域の数を返します。

INTEGER FUNCTION
OMP_GET_LEVEL()

呼び出しが含まれたタスクを囲む、入れ子された並列領域 (アクティブ、非アクティブにかかわらず) の数を返します。暗黙的な並列領域は含まれません。

INTEGER FUNCTION
OMP_GET_ANCESTOR_THREAD_NUM(level)
INTEGER level

指定された現在のスレッドの入れ子レベルに対する先祖のスレッド番号を返します。

INTEGER FUNCTION
OMP_GET_TEAM_SIZE(level)
INTEGER level

先祖が所属するスレッドチームのサイズを返します。

ロックルーチン

ロックルーチンを使用して OpenMP ロックを操作します。

関数

説明

SUBROUTINE OMP_INIT_LOCK(lock)
INTEGER (KIND=OMP_LOCK_KIND)::lock

後続の呼び出しに使用する lock に関連付けられたロックを初期化します。

SUBROUTINE OMP_DESTROY_LOCK(lock)
INTEGER(KIND=OMP_LOCK_KIND)::lock

lock により指定されたロックを未定義または未初期化にします。ロックは初期化されており、ロックされていてはなりません。

SUBROUTINE OMP_SET_LOCK(lock)
INTEGER(KIND=OMP_LOCK_KIND)::lock

lock に関連付けられているロックが使用可能な状態になるまで実行中のスレッドを強制的に待機させます。ロックが使用可能になると、スレッドにはそのロックの所有権が与えられます。ロックは初期化されていなければなりません。

SUBROUTINE OMP_UNSET_LOCK(lock)
INTEGER(KIND=OMP_LOCK_KIND)::lock

lock に関連付けられているロックの所有権から実行スレッドを解放します。lock に関連付けられたロックを実行中のスレッドが所有していない場合の動作は不定です。

LOGICAL OMP_TEST_LOCK(lock)
INTEGER(KIND=OMP_LOCK_KIND)::lock

lock に関連付けられているロックを設定しようと試みます。成功した場合、.TRUE. を返します。そうでない場合、.FALSE. を返します。ロックは初期化されていなければなりません。

SUBROUTINE OMP_INIT_NEST_LOCK(lock)
INTEGER(KIND=OMP_NEST_LOCK_KIND)::lock

後続の呼び出しに使用する lock に関連付けられた入れ子されたロックを初期化します。

SUBROUTINE OMP_DESTROY_NEST_LOCK(lock)
INTEGER(KIND=OMP_NEST_LOCK_KIND)::lock

lock に関連付けられている入れ子されたロックを未定義または未初期化にします。ロックは初期化されており、ロックされていてはなりません。

SUBROUTINE OMP_SET_NEST_LOCK(lock)
INTEGER(KIND=OMP_NEST_LOCK_KIND)::lock

lock に関連付けられている入れ子されたロックが使用可能な状態になるまで実行中のスレッドを強制的に待機させます。ロックが使用可能になると、スレッドにはその入れ子されたロックの所有権が与えられます。ロックは初期化されていなければなりません。

SUBROUTINE OMP_UNSET_NEST_LOCK(lock)
INTEGER(KIND=OMP_NEST_LOCK_KIND)::lock

入れ子カウント数がゼロの場合は、lock に関連付けられた入れ子されたロックの所有権から実行中のスレッドを解放します。lock に関連付けられた入れ子のロックを、実行中のスレッドが所有していない場合の動作は不定です。

INTEGER OMP_TEST_NEST_LOCK(lock)
INTEGER(KIND=OMP_NEST_LOCK_KIND)::lock

lock により指定されている入れ子されたロックを設定しようと試みます。成功した場合は入れ子カウント数を返し、失敗した場合は 0 を返します。

タイミングルーチン

関数

説明

DOUBLE PRECISION FUNCTION OMP_GET_WTIME()

任意の参照時間から経過したウォールクロック時間 (秒) に等しい倍精度値を返します。参照時間は、プログラム実行中には変更されません。

DOUBLE PRECISION FUNCTION OMP_GET_WTICK()

連続するクロック刻みの間隔の秒数に等しい倍精度値を返します。