OpenMP* は、並列モードでプログラムを管理しやすくするために、ランタイム・ライブラリー・ルーチンを提供します。これらのランタイム・ライブラリー・ルーチンの多くには、デフォルトとして設定可能な環境変数が対応付けられています。ランタイム・ライブラリー・ルーチンを使用すれば、これらの変数を動的に変更でき、プログラムを簡単に制御できます。いずれの場合も、ランタイム・ライブラリー・ルーチンを呼び出すと、それに対応する環境変数は無効になります。これらのルーチンはすべて外部プロシージャーです。
OpenMP* ランタイム・ライブラリー・ルーチンを実行することで OpenMP*ランタイム環境が初期化され、OpenMP* 環境変数のそれ以降のプログラムコードによる設定の効果がなくなることがあります。この問題を回避するには、インテルの拡張ルーチン kmp_set_defaults() を使用して OpenMP* 環境変数を設定します。
インテル® コンパイラーは、すべての OpenMP* ランタイム・ライブラリー・ルーチンをサポートしています。これらのルーチンの使用に関する詳細は、OpenMP* API 仕様を参照してください。
ルーチンを含むプログラム単位に次のような文を追加して適切なルーチンの宣言をインクルードします。
例 |
---|
|
モジュールファイルは、コンパイラーをインストールした ../include (Linux* および macOS*) または ..\include (Windows*) ディレクトリーにあります。
omp_lib.mod (および omp_lib.mod の INCLUDE バージョンである omp_lib.h) の整数引数 openmp_version は、10 進数 yyyymm です。yyyy と mm は、現在のバージョンのコンパイラーとライブラリーでサポートされる OpenMP* API のバージョンを示します。詳細は、定義済みプリプロセッサー・シンボル _OPENMP を参照してください。
次の表は、各ルーチンの仮引数のデータ型を指定するキーのリストです。
キー |
OMP_LIB Kind |
BIND(C) Kind |
KIND= |
---|---|---|---|
INTEGER ( int ) |
OMP_INTEGER_KIND |
C_INT |
4 |
LOGICAL ( log ) |
OMP_LOGICAL_KIND |
4 |
|
REAL ( dp ) |
DOUBLE PRECISION |
C_DOUBLE |
8 |
INTEGER(OMP_LOCK_KIND) |
C_INTPTR_T |
intptr_t <<1>> |
|
INTEGER(OMP_NEST_LOCK_KIND) |
C_INTPTR_T |
intptr_t <<1>> |
|
INTEGER (OMP_SCHED_KIND) |
OMP_INTEGER_KIND |
C_INT |
4 |
INTEGER(OMP_PROC_BIND_KIND) |
OMP_INTEGER_KIND |
C_INT |
4 |
INTEGER(OMP_SYNC_HINT_KIND) |
C_INTPTR_T |
intptr_t <<1>> |
intptr_t はポインター (アドレス) を保持できる大きな整数です。インテル® Fortran コンパイラーでは、32 ビット・アプリケーションをビルドする場合は INTEGER(4)、64 ビット・アプリケーションをビルドする場合は INTEGER(8) です。これは、Fortran 組込み関数 INT_PTR_KIND() によって返される値です。
これらのルーチンは、現在の競合グループ内のスレッドチームに影響を与え、監視します。
ルーチン |
説明 |
---|---|
SUBROUTINE OMP_SET_NUM_THREADS(num_threads)INTEGER(int) num_threads |
呼び出し側のスレッドにより作成される後続の並列領域に使用するスレッド数を設定します。 |
INTEGER(int) FUNCTION OMP_GET_NUM_THREADS() |
現在の並列領域に使用されているスレッドの数を返します。 この関数は、OMP_SET_NUM_THREADS() 関数からの呼び出しスレッドによって継承される値は返しません。 |
INTEGER(int) FUNCTION OMP_GET_MAX_THREADS() |
呼び出し側のスレッドにより作成される後続の並列領域に利用可能なスレッド数を返します。 |
INTEGER(int) FUNCTION OMP_GET_THREAD_NUM() |
現在の並列領域のコンテキスト内の呼び出しスレッド数を返します。 |
LOGICAL(log) FUNCTION OMP_IN_PARALLEL() |
並列で実行されている並列領域の動的な範囲内で呼ばれた場合、.TRUE. を返します。そうでない場合は、.FALSE. を返します。 |
SUBROUTINE OMP_SET_DYNAMIC(dynamic_threads) |
並列領域の実行に使用するスレッド数の動的な調整を有効または無効にします。dynamic_threads が .TRUE. の場合は、動的スレッドは有効です。dynamic_threads が .FALSE. の場合は、動的スレッドは無効です。動的スレッドはデフォルトでは無効です。 |
LOGICAL(log) FUNCTION OMP_GET_DYNAMIC() |
動的なスレッド調整が有効の場合は、.TRUE. を返します。そうでない場合は、.FALSE. を返します。 |
LOGICAL(log) FUNCTION OMP_GET_CANCELLATION() |
キャンセルが有効な場合は .TRUE. を返します。そうでない場合は、.FALSE. を返します。 このルーチンは、環境変数 OMP_CANCELLATION の設定の影響を受けます。 |
SUBROUTINE OMP_SET_NESTED(nested) 注これは古いルーチン (非推奨) です。 |
入れ子構造の並列処理を有効または無効にします。nested が .TRUE. の場合は、入れ子構造の並列処理は有効です。nested が .FALSE. の場合は、入れ子構造の並列処理は無効です。入れ子構造の並列処理はデフォルトでは無効です。 |
LOGICAL FUNCTION OMP_GET_NESTED() 注これは古いルーチン (非推奨) です。 |
入れ子構造の並列処理が有効な場合は、.TRUE. を返します。そうでない場合は、.FALSE. を返します。 |
SUBROUTINE OMP_SET_SCHEDULE(kind,chunk_size) |
'runtime' がスケジュール種別として使用されている場合に適用されるワークシェア・ループのスケジュールを決定します。 |
SUBROUTINE OMP_GET_SCHEDULE(kind,chunk_size) |
'runtime' スケジュールが使用されている場合に適用されるワークシェア・ループのスケジュールを返します。 |
INTEGER FUNCTION OMP_GET_THREAD_LIMIT() |
OpenMP* プログラムで同時に実行するスレッド数の最大値を返します。 |
INTEGER FUNCTION OMP_GET_SUPPORTED_ACTIVE_LEVELS() |
実装でサポートされるアクティブな並列レベル数を返します。 |
SUBROUTINE OMP_SET_MAX_ACTIVE_LEVELS(max_active_levels) |
入れ子構造のアクティブな並列領域の数を制限します。負の max_active_levels が指定された場合、呼び出しは無視されます。 |
INTEGER FUNCTION OMP_GET_MAX_ACTIVE_LEVELS() |
入れ子構造のアクティブな並列領域の最大数を返します。 |
INTEGER FUNCTION OMP_GET_LEVEL() |
呼び出しが含まれたタスクを囲む、入れ子構造の並列領域 (アクティブ、非アクティブにかかわらず) の数を返します。暗黙的な並列領域は含まれません。 |
INTEGER FUNCTION OMP_GET_ANCESTOR_THREAD_NUM(level) |
指定された現在のスレッドの入れ子レベルに対する先祖のスレッド番号を返します。 |
INTEGER FUNCTION OMP_GET_TEAM_SIZE(level) |
現在のスレッドの指定された入れ子レベルにおいて、先祖または現在のスレッドが属するスレッドチームのサイズを返します。 |
INTEGER FUNCTION OMP_GET_ACTIVE_LEVEL() |
呼び出しが含まれたタスクを囲む、入れ子構造のアクティブな並列領域の数を返します。 |
次の PARAMETER 定数は OMP_LIB.MOD で定義され、OMP_SET_SCHEDULE と OMP_GET_SCHEDULE の KIND 仮引数で設定または返すことができます。
integer(omp_sched_kind), parameter :: omp_sched_static = 1 integer(omp_sched_kind), parameter :: omp_sched_dynamic = 2 integer(omp_sched_kind), parameter :: omp_sched_guided = 3 integer(omp_sched_kind), parameter :: omp_sched_auto = 4
これらのルーチンは、有効なスレッド・アフィニティー・ポリシーに影響を与え、アクセスします。
関数 |
説明 |
---|---|
INTEGER(KIND=OMP_PROC_BIND_KIND) OMP_GET_PROC_BIND() |
OMP_PROC_BIND 環境変数で初期化される、現在アクティブなスレッド・アフィニティー・ポリシーを返します。 このポリシーは、後続の入れ子構造の並列領域で使用されます。 |
INTEGER(int) FUNCTION OMP_GET_NUM_PLACES() |
初期タスクのプレースリスト (通常、スレッド、コア、またはソケット) で、実行環境が利用可能なプレースの数を返します。 |
INTEGER(int) FUNCTION OMP_GET_PLACE_NUM_PROCS(place_num) |
プレース番号 place_num に関連付けられたプロセッサー数を返します。place_num が負または OMP_GET_NUM_PLACES() 以上の場合はゼロを返します。 |
SUBROUTINE OMP_GET_PLACE_PROC_IDS(place_num,ids) INTEGER(int) place_num INTEGER(int) ids(*) |
プレース番号 place_num に関連付けられた各プロセッサーの ID 番号を返します。ID 番号は負以外で、その意味は実装定義に依存します。ID 番号は配列 ids で返され、配列内の順序は実装定義に依存します。ids には、少なくとも OMP_GET_PLACE_NUM_PROCS(place_num) 要素が含まれていないければなりません。place_num が負または OMP_GET_NUM_PLACES() 以上の場合、ルーチンは何も返しません。 |
INTEGER(int) FUNCTION OMP_GET_PLACE_NUM() |
到達スレッドがバインドされているプレースの番号を返します。プレース番号は、0 から OMP_GET_NUM_PLACES() - 1 の範囲の値です。到達スレッドがプレースにバインドされていない場合は、-1 を返します。 |
INTEGER FUNCTION OMP_GET_PARTITION_NUM_PLACES() |
最も内側の暗黙のタスクのプレース・パーティションのプレース数を返します。 |
SUBROUTINE OMP_GET_PARTITION_PLACE_NUMS(place_nums) INTEGER(int) place_nums(*) |
最も内側の暗黙のタスクの place-partition-var ICV のプレースに対応するプレース数のリストを返します。配列 place_nums は、OMP_GET_PARTITION_NUM_PLACES() 要素を格納するのに十分な大きさでなければなりません。 |
SUBROUTINE OMP_SET_AFFINITY_FORMAT(format) CHARACTER(LEN=*),INTENT(IN) :: format |
affinity-format-var ICV の値を設定して、デバイスで使用するアフィニティー形式を設定します。 |
INTEGER FUNCTION OMP_GET_AFFINITY_FORMAT(buffer) CHARACTER(LEN=*),INTENT(OUT) :: buffer |
デバイスの affinity-format-var ICV の値を返します。 |
SUBROUTINE OMP_DISPLAY_AFFINITY(format) CHARACTER(LEN=*),INTENT(IN) :: format |
指定された形式で OpenMP* スレッド・アフィニティー情報を出力します。 |
INTEGER FUNCTION OMP_CAPTURE_AFFINITY(buffer, format) CHARACTER(LEN=*),INTENT(OUT) :: buffer CHARACTER(LEN=*),INTENT(IN) :: format |
指定された形式で OpenMP* スレッド・アフィニティー情報をバッファーに出力します。 |
次の PARAMETER 定数は OMP_LIB.MOD で定義され、OMP_GET_PROC_BIND によって返される値を表します。
integer (omp_proc_bind_kind), parameter :: omp_proc_bind_false = 0 integer (omp_proc_bind_kind), parameter :: omp_proc_bind_true = 1 integer (omp_proc_bind_kind), parameter :: omp_proc_bind_master = 2 integer (omp_proc_bind_kind), parameter :: omp_proc_bind_close = 3 integer (omp_proc_bind_kind), parameter :: omp_proc_bind_spread = 4
これらのルーチンは、TEAMS 領域を実行する可能性があるチームのリーグに影響を与え、監視します。
関数 |
説明 |
---|---|
INTEGER(int) FUNCTION OMP_GET_NUM_TEAMS() |
現在の TEAMS 領域の初期チームの数を返します。 |
INTEGER(int) FUNCTION OMP_GET_TEAM_NUM() |
呼び出しスレッドのチームの数を返します。 |
SUBROUTINE OMP_SET_NUM_TEAMS(num_teams) INTEGER num_teams |
NUM_TEAMS 節がない以降の TEAMS 領域で使用されるスレッド数に影響します。 |
INTEGER FUNCTION OMP_GET_MAX_TEAMS() |
このルーチンから実行が戻った後に遭遇する NUM_TEAMS 節がない TEAMS 構文で作成できるチーム数の上限を返します。 |
SUBROUTINE OMP_SET_TEAMS_THREAD_LIMIT(thread_limit) INTEGER thread_limit |
TEAMS 構文で作成される各競合グループに参加できる OpenMP* スレッドの最大数を定義します。 |
INTEGER FUNCTION OMP_GET_TEAMS_THREAD_LIMIT() |
TEAMS 構文で作成される各競合グループに参加できる OpenMP* スレッドの最大数を返します。 |
これらのルーチンは、OpenMP* の明示的なタスクに関連するものです。
関数 | 説明 |
---|---|
INTEGER(int) FUNCTION OMP_GET_MAX_TASK_PRIORITY() |
PRIORITY 節で指定可能な最大値を返します。 |
LOGICAL(log) FUNCTION OMP_IN_EXPLICIT_TASK() |
明示的なタスク領域内で呼ばれた場合、.TRUE. を返します。そうでない場合は、.FALSE. を返します。 |
LOGICAL(log) FUNCTION OMP_IN_FINAL() |
final タスク領域内で呼ばれた場合、.TRUE. を返します。そうでない場合は、.FALSE. を返します。 |
これらのルーチンは、OpenMP* ランタイムが使用したリソースを解放します。これらのルーチンはホストデバイス上でのみ有効です。
関数 | 説明 |
---|---|
INTEGER FUNCTION OMP_PAUSE_RESOURCE(kind, device_num) INTEGER (OMP_PAUSE_RESOURCE_KIND) kind INTEGER device_num |
ランタイムが、指定されたデバイスで OpenMP* が使用したリソースを解放することを許可します。ランタイムは、成功した場合は 0 を返し、そうでない場合は非ゼロを返します。 |
INTEGER FUNCTION OMP_PAUSE_RESOURCE_ALL(kind) INTEGER (OMP_PAUSE_RESOURCE_KIND) kind |
ランタイムが、すべてのデバイスで OpenMP* が使用したリソースを解放することを許可します。ランタイムは、成功した場合は 0 を返し、そうでない場合は非ゼロを返します。 |
これらのルーチンは、OpenMP* プログラムからアクセス可能なデバイスのセットに関連するものです。
関数 | 説明 |
---|---|
INTEGER(int) FUNCTION OMP_GET_NUM_PROCS() |
プログラムで利用できるプロセッサー数を決定します。 |
SUBROUTINE OMP_SET_DEFAULT_DEVICE(device_number) |
デフォルトのデバイス番号を設定します。 |
INTEGER(int) FUNCTION OMP_GET_DEFAULT_DEVICE() |
デフォルトのデバイス番号を返します。 |
INTEGER(int) FUNCTION OMP_GET_NUM_DEVICES() |
ターゲットデバイス数を返します。 |
INTEGER FUNCTION OMP_GET_DEVICE_NUM() |
呼び出しスレッドが実行しているデバイスのデバイス番号を返します。 |
LOGICAL(log) FUNCTION OMP_IS_INITIAL_DEVICE() |
現在のタスクがホストデバイスで実行している場合は .TRUE. を返します。そうでない場合は、.FALSE. を返します。 |
INTEGER(int) FUNCTION OMP_GET_INITIAL_DEVICE() |
ホストデバイスのデバイス番号を返します。デバイス番号は実装定義に依存します。0 から OMP_GET_NUM_DEVICES() - 1 の範囲の場合、すべてのデバイス構造/ルーチンで有効です。そうでない場合、デバイス・メモリー・ルーチンでのみ有効で、DEVICE 節では無効です。 |
この機能は ifx でのみ利用できます。
関数 | 説明 |
---|---|
TYPE(c_ptr) FUNCTION omp_target_alloc (size, device_num) USE, INTRINSIC :: ISO_C_BINDING INTEGER(c_size_t) :: size INTEGER(c_int) :: device_num |
サイズが size バイトのストレージのデバイスアドレスを返します。割り当て要求を満たせない場合、null アドレスを返します。device_num で指定されたデバイス上に割り当てます。 |
SUBROUTINE omp_target_free (device_ptr, device_num) USE, INTRINISIC :: ISO_C_BINDING TYPE (c_ptr) :: device_ptr INTEGER(c_int) :: device_num |
device_num で指定されたデバイス上の device_ptr が指す位置にある、以前に割り当てられたメモリー割り当てを解放します。 |
ロックルーチンを使用して OpenMP* ロックを操作します。
関数 |
説明 |
---|---|
SUBROUTINE OMP_INIT_LOCK(svar) |
ロックを解除状態に初期化します。 |
SUBROUTINE OMP_INIT_NEST_LOCK(nvar) |
入れ子されたロックを解除状態に初期化します。入れ子されたロックの入れ子カウントはゼロに設定されます。 |
SUBROUTINE OMP_INIT_LOCK_WITH_HINT(svar, hint) |
ロックを解除状態に初期化します。オプションで hint を基に特定のロック実装を選択できます。 |
SUBROUTINE OMP_INIT_NEST_LOCK_WITH_HINT(nvar, hint) |
入れ子されたロックを解除状態に初期化します。オプションで hint を基に特定のロック実装を選択できます。入れ子されたロックの入れ子カウントはゼロに設定されます。 |
SUBROUTINE OMP_DESTROY_LOCK(svar) |
ロックの状態を未初期化に変更します。 |
SUBROUTINE OMP_DESTROY_NEST_LOCK(nvar) |
入れ子されたロックの状態を未初期化に変更します。 |
SUBROUTINE OMP_SET_LOCK(svar) |
ロックが使用可能な状態になるまで実行中のスレッドを強制的に待機させます。ロックが使用可能になると、スレッドにはそのロックの所有権が与えられます。ロックは初期化されていなければなりません。 |
SUBROUTINE OMP_SET_NEST_LOCK(nvar) |
入れ子されたロックが使用可能な状態になるまで実行中のスレッドを強制的に待機させます。スレッドがすでにロックを所有している場合は、ロックの入れ子カウントは増えます。ロックは初期化されていなければなりません。 |
SUBROUTINE OMP_UNSET_LOCK(svar) |
実行スレッドが所有するロックを解放します。実行スレッドがロックを所有していない場合の動作は不定です。 |
SUBROUTINE OMP_UNSET_NEST_LOCK(nvar) |
入れ子されたロックの入れ子カウントをデクリメントして、入れ子カウントがゼロになった場合は、実行スレッドが所有するロックを解放します。実行スレッドが入れ子されたロックを所有していない場合の動作は不定です。 |
LOGICAL(log) OMP_TEST_LOCK(svar) |
ロックの設定を試みます。成功した場合は、.TRUE. を返します。そうでない場合は、.FALSE. を返します。ロックは初期化されていなければなりません。 |
INTEGER(int) OMP_TEST_NEST_LOCK(nvar) |
入れ子されたロックの設定を試みます。成功した場合は入れ子カウント数を返し、失敗した場合は 0 を返します。 |
次の PARAMETER 定数は OMP_LIB.MOD で定義され、OMP_INIT_LOCK_WITH_HINT と OMP_INIT_NEST_LOCK_WITH_HINT の HINT 仮引数で設定できます。
integer (omp_sync_hint_kind), parameter :: omp_sync_hint_none = 0 integer (omp_sync_hint_kind), parameter :: omp_sync_hint_uncontended = 1 integer (omp_sync_hint_kind), parameter :: omp_sync_hint_contended = 2 integer (omp_sync_hint_kind), parameter :: omp_sync_hint_nonspeculative = 4 integer (omp_sync_hint_kind), parameter :: omp_sync_hint_speculative = 8
Fortran では、+ 演算子を使用してヒントを組み合わせることができます。ヒントを組み合わせた場合の動作は、実装定義に依存します。omp_sync_hint_none とヒントを組み合わせた場合、そのヒントを指定した場合と同じ効果があります。次の制約事項は、ヒントを組み合わせる場合に適用されます。
関数 |
説明 |
---|---|
REAL (dp) FUNCTION OMP_GET_WTIME() |
任意の参照時間から経過したウォールクロック時間 (秒) に等しい倍精度値を返します。参照時間は、プログラム実行中には変更されません。 |
REAL (dp) FUNCTION OMP_GET_WTICK() |
連続するクロック刻みの間隔の秒数に等しい倍精度値を返します。 |
関数 |
説明 |
---|---|
SUBROUTINE OMP_FULFILL_EVENT(event) INTEGER(OMP_EVENT_HANDLE_KIND) event |
イベントハンドル event に関連付けられているイベントを処理してイベントを破棄します。 |
この機能は ifx でのみ利用できます。
関数 |
説明 |
---|---|
FUNCTION omp_init_allocator(memspace, ntraits, traits) INTEGER (KIND=omp_allocator_handle_kind) omp_init_allocator INTEGER (KIND=omp_memspace_handle_kind),INTENT(IN) :: memspace INTEGER,INTENT(IN) :: ntraits TYPE(omp_alloctrait),INTENT(IN) :: traits(*) |
アロケーターを初期化してメモリー空間に関連付けて、アロケーター・ハンドルを返します。memspace 引数は、「OpenMP* メモリー空間アロケーター」で定義されている事前定義されたメモリー空間のいずれかでなければなりません。ntraits 引数は、特性配列引数に含まれる特性の数を指定します。特性が ntraits で指定された数よりも少ない場合、動作は不定です。dynamic_allocators を指定する REQUIRES ディレクティブは、この関数を呼び出すターゲット領域の同じコンパイル単位になければなりません。 |
SUBROUTINE omp_destroy_allocator (allocator) INTEGER(KIND=omp_allocator_handle_kind),INTENT(IN) :: allocator |
アロケーター・ハンドル引数によって使用されるすべてのリソースを解放します。アロケーター引数は、事前定義されたアロケーターのハンドルで会ってはなりません。dynamic_allocators を指定する REQUIRES ディレクティブは、この関数を呼び出すターゲット領域の同じコンパイル単位になければなりません。 |
SUBROUTINE omp_set_default_allocator (allocator) INTEGER(KIND=omp_allocator_handle_kind) :: allocator |
アロケーターを指定しない ALLOCATE 節やディレクティブによるメモリー割り当てに使用されるデフォルトのメモリー・アロケーターを設定します。アロケーター引数は有効なアロケーターでなければなりません。 |
FUNCTION omp_get_default_allocator () INTEGER(KIND=omp_allocator_handle_kind) :: omp_get_default_allocator |
アロケーターを指定しない ALLOCATE 節やディレクティブによる割り当てに使用されるアロケーターのアロケーター・ハンドルを返します。 |
TYPE(c_ptr) FUNCTION omp_alloc (size, allocator) bind (c) USE, INTRINSIC ISO_C_BINDING INTEGER(c_size_t) VALUE :: size INTEGER(omp_allocator_handle_kind), value :: allocator |
指定されたメモリー・アロケーターに size バイトのメモリー割り当てを要求します。 allocator 引数は、事前定義済みメモリー・アロケーター値のいずれかに評価される整数定数式でなければなりません。allocator が OMP_NULL_ALLOCATOR の場合、暗黙のバインドタスクの ICV def-allocator-var で指定されたアロケーターが使用されます。 割り当てに成功した場合は、割り当てられた最初のワードへのポインターが返されます。そうでない場合は、アロケーターのフォールバック特性に指定された動作になります。size がゼロの場合は、C_NULL_PTR (Fortran) または NULL (C) が返されます。割り当てられるメモリーは、malloc で要求される最大アライメントとアロケーターのアライメント特性を満たすバイト境界でアライメントされます。 ターゲット領域にある omp_alloc 呼び出しは、同じコンパイル単位に DYNAMIC_ALLOCATORS を指定する REQUIRES ディレクティブがある場合を除いて、OMP_NULL_ALLOCATOR をアロケーター引数として渡しません。 |
TYPE(c_ptr) FUNCTION omp_aligned_alloc (alignment, size, allocator) bind (c) USE, INTRINSIC ISO_C_BINDING INTEGER(c_size_t) VALUE :: alignment, size INTEGER(omp_allocator_handle_kind), value :: allocator |
指定されたメモリー・アロケーターに size バイトのメモリー割り当てを要求します。alignment は 2 の累乗で、size はアライメントの倍数でなければなりません。 allocator 引数は、事前定義済みメモリー・アロケーター値のいずれかに評価される整数定数式でなければなりません。allocator が OMP_NULL_ALLOCATOR の場合、暗黙のバインドタスクの ICV def-allocator-var で指定されたアロケーターが使用されます。 割り当てに成功した場合は、割り当てられた最初のワードへのポインターが返されます。そうでない場合は、アロケーターのフォールバック特性に指定された動作になります。size がゼロの場合は、C_NULL_PTR (Fortran) または NULL (C) が返されます。割り当てられるメモリーは、malloc で要求される最大アライメント、アロケーターのアライメント特性、およびアライメント引数で指定された値を満たすバイト境界でアライメントされます。 ターゲット領域にある omp_alloc 呼び出しは、同じコンパイル単位に DYNAMIC_ALLOCATORS を指定する REQUIRES ディレクティブがある場合を除いて、OMP_NULL_ALLOCATOR をアロケーター引数として渡しません。 |
TYPE(c_ptr) FUNCTION omp_calloc (nmemb, size, allocator) bind (c) USE, INTRINSIC :: ISO_C_BINDING INTEGER(c_size_t) value :: nmemb, size INTEGER(omp_allocator_handle_t), value :: allocator |
指定されたメモリー・アロケーターにゼロで初期化された size バイトのメモリー割り当てを要求します。 allocator 引数は、事前定義済みメモリー・アロケーター値のいずれかに評価される整数定数式でなければなりません。TARGET 領域から omp_calloc が呼び出す場合、呼び出しと同じコンパイル単位の REQUIRES ディレクティブに DYNAMIC_ALLOCATORS が指定されていない限り、アロケーター値は OMP_NULL_ALLOCATOR であってはなりません。OMP_NULL_ALLOCATOR を指定すると、暗黙のバインドタスクの def-allocator-var ICV で指定されたアロケーターが使用されます。 割り当ては nmemb 要素の配列で、各要素は size バイトです。allocator は、使用するメモリー・アロケーターを指定します。割り当てられるメモリーはゼロで初期化されます。要求に失敗した場合、アロケーターの FALLBACK 特性で指定された動作になります。割り当ては、malloc で要求される最大アライメントとアロケーターのアライメント特性を満たすバイト境界でアライメントされます。 nmemb または size の値が 0 の場合、NULL (C) または C_NULL_PTR (Fortran) が返されます。 |
派生型 omp_allocator は OMP_LIB.MOD で定義されており、omp_init_allocator 関数の特性引数の型として使用されます。
type omp_alloctrait integer(kind=omp_alloctrait_key_kind) :: key integer(kind=omp_alloctrait_val_kind) :: value end type omp_alloctrait
以下のパラメーター定数は OMP_LIB.MOD で定義されており、omp_alloctrait 型の派生型で割り当て特性キーの指定に使用できます。
integer(omp_alloctrait_key_kind), parameter :: omp_atk_sync_hint = 1 integer(omp_alloctrait_key_kind), parameter :: omp_atk_alignment = 2 integer(omp_alloctrait_key_kind), parameter :: omp_atk_access = 3 integer(omp_alloctrait_key_kind), parameter :: omp_atk_pool_size = 4 integer(omp_alloctrait_key_kind), parameter :: omp_atk_fallback = 5 integer(omp_alloctrait_key_kind), parameter :: omp_atk_fb_data = 6 integer(omp_alloctrait_key_kind), parameter :: omp_atk_atk_pinned = 7 integer(omp_alloctrait_key_kind), parameter :: omp_atk_partition = 8
以下のパラメーター定数は OMP_LIB.MOD で定義されており、omp_alloctrait 型の派生型で割り当て特性値の設定に使用できます。
integer(omp_alloctrait_val_kind), parameter :: omp_atv_false = 0 integer(omp_alloctrait_val_kind), parameter :: omp_atv_true = 1 integer(omp_alloctrait_val_kind), parameter :: omp_atv_default = 2 integer(omp_alloctrait_val_kind), parameter :: omp_atv_contended = 3 integer(omp_alloctrait_val_kind), parameter :: omp_atv_uncontended = 4 integer(omp_alloctrait_val_kind), parameter :: omp_atv_sequential = 5 integer(omp_alloctrait_val_kind), parameter :: omp_atv_private = 6 integer(omp_alloctrait_val_kind), parameter :: omp_atv_all = 7 integer(omp_alloctrait_val_kind), parameter :: omp_atv_thread = 8 integer(omp_alloctrait_val_kind), parameter :: omp_atv_pteam = 9 integer(omp_alloctrait_val_kind), parameter :: omp_atv_cgroup = 10 integer(omp_alloctrait_val_kind), parameter :: omp_atv_default_mem_fb = 11 integer(omp_alloctrait_val_kind), parameter :: omp_atv_null_fb = 12 integer(omp_alloctrait_val_kind), parameter :: omp_atv_abort_fb = 13 integer(omp_alloctrait_val_kind), parameter :: omp_atv_allocator_fb = 14 integer(omp_alloctrait_val_kind), parameter :: omp_atv_environment = 15 integer(omp_alloctrait_val_kind), parameter :: omp_atv_nearest = 16 integer(omp_alloctrait_val_kind), parameter :: omp_atv_blocked = 17 integer(omp_alloctrait_val_kind), parameter :: omp_atv_interleaved = 18
関数 |
説明 |
---|---|
INTEGER FUNCTION OMP_CONTROL_TOOL(command, modifier) INTEGER (kind=omp_control_tool_kind) command INTEGER modifier |
プログラムがアクティブなツールにコマンドを渡せるようにします。 |
関数 |
説明 |
---|---|
SUBROUTINE OMP_DISPLAY_ENV(verbose) LOGICAL,INTENT(IN) :: verbose |
OpenMP* バージョン番号と環境変数に関連する ICV の初期値を表示します。 |