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

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

次の表は、これらランタイム・ライブラリ・ルーチンとのインターフェイスを明記したものです。ルーチン名はユーザ名前空間に保存しています。omp_lib.fomp_lib.h および omp_lib.mod ヘッダファイルは、コンパイラがインストールされたディレクトリ以下の INCLUDE ディレクトリにあります。omp_lib.h ヘッダファイルは、コンパイラがインストールされたディレクトリ以下の INCLUDE ディレクトリにあり、 Fortran の INCLUDE 文で使用します。omp_lib.mod ファイルは、INCLUDE ディレクトリにあり、Fortran の USE 文で使用します。

このファイルには、下の表の関数で使用される 2 種類のロック omp_lock_t および omp_nest_lock_t の定義が格納されています。

このトピックでは、OpenMP ランタイム・ライブラリ・ルーチンの概要を説明します。詳細は、「OpenMP Fortran バージョン 2.0 仕様」を参照してください。

関数

説明

実行環境ルーチン

subroutine omp_set_num_threads(num_threads)
integer
num_threads

後続の並列領域に使用するスレッド数を設定します。

integer function omp_get_num_threads()

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

integer function omp_get_max_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)
integer
nested

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

logical function omp_get_nested()

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

ロックルーチン

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 に関連付けられているロックが使用可能な状態になるまで実行中のスレッドを強制的に待機させます。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()

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