OpenMP* は、並列モードでプログラムを管理しやすくするために、ランタイム・ライブラリー・ルーチンを提供します。これらのランタイム・ライブラリー・ルーチンの多くには、デフォルトとして設定可能な環境変数が対応付けられています。ランタイム・ライブラリー・ルーチンを使用すれば、これらの変数を動的に変更でき、プログラムを簡単に制御できます。いずれの場合も、ランタイム・ライブラリー・ルーチンを呼び出すと、それに対応する環境変数は無効になります。
OpenMP* ランタイム・ライブラリー・ルーチンを実行することで OpenMP*ランタイム環境が初期化され、OpenMP* 環境変数のそれ以降のプログラムコードによる設定の効果がなくなることがあります。この問題を回避するには、インテルの拡張ルーチン kmp_set_defaults() を使用して OpenMP* 環境変数を設定します。
インテル® コンパイラーは、すべての OpenMP* ランタイム・ライブラリー・ルーチンをサポートしています。これらのルーチンの使用に関する詳細は、OpenMP* API 仕様を参照してください。
ソースコードを含むプログラム単位に次のような文を追加して適切なルーチンの宣言をインクルードします。
例 |
---|
|
ヘッダーファイルは、コンパイラーをインストールした ../include (Linux*) または ..\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) |
呼び出し側のスレッドにより作成される後続の並列領域に利用可能なスレッド数を返します。 |
int omp_get_thread_num(void) |
現在の並列領域のコンテキスト内の呼び出しスレッド数を返します。 |
int omp_in_parallel(void) |
並列で実行されている並列領域の動的な範囲内で呼ばれた場合、TRUE を返します。そうでない場合は、FALSE を返します。 |
void omp_set_dynamic(int dynamic_threads) |
並列領域の実行に使用するスレッド数の動的な調整を有効または無効にします。dynamic_threads が TRUE の場合は、動的スレッドは有効です。dynamic_threads が FALSE の場合は、動的スレッドは無効です。動的スレッドはデフォルトでは無効です。 |
int omp_get_dynamic(void) |
動的なスレッド調整が有効の場合は、TRUE を返します。そうでない場合は、FALSE を返します。 |
int omp_get_cancellation(void) |
キャンセルが有効な場合は TRUE を返します。そうでない場合は、FALSE を返します。 このルーチンは、環境変数 OMP_CANCELLATION の設定の影響を受けます。 |
void omp_set_nested(int nested) 注これは古いルーチン (非推奨) です。 |
入れ子構造の並列処理を有効または無効にします。nested が TRUE の場合は、入れ子構造の並列処理は有効です。nested が FALSE の場合は、入れ子構造の並列処理は無効です。入れ子構造の並列処理はデフォルトでは無効です。 |
int omp_get_nested(void) 注これは古いルーチン (非推奨) です。 |
入れ子構造の並列処理が有効な場合は、TRUE を返します。そうでない場合は、FALSE を返します。 |
void omp_set_schedule(omp_sched_t kind,int chunk_size) |
'runtime' がスケジュール種別として使用されている場合に適用されるワークシェア・ループのスケジュールを決定します。 |
void omp_get_schedule(omp_sched_kind *kind,int *chunk_size) |
'runtime' スケジュールが使用されている場合に適用されるワークシェア・ループのスケジュールを返します。 |
int omp_get_thread_limit(void) |
OpenMP* プログラムで同時に実行するスレッド数の最大値を返します。 |
int omp_get_supported_active_levels(void) |
実装でサポートされるアクティブな並列レベル数を返します。 |
void omp_set_max_active_levels(int max_active_levels) |
入れ子構造のアクティブな並列領域の数を制限します。max_active_levels の値は、負でない整数に評価されなければなりません。 |
int omp_get_max_active_levels(void) |
入れ子構造のアクティブな並列領域の最大数を返します。 |
int omp_get_level(void) |
呼び出しが含まれたタスクを囲む、入れ子構造の並列領域 (アクティブ、非アクティブにかかわらず) の数を返します。暗黙的な並列領域は含まれません。 |
int omp_get_ancestor_thread_num(int level) |
指定された現在のスレッドの入れ子レベルに対する先祖のスレッド番号を返します。 |
int omp_get_team_size(int level) |
指定された入れ子レベルにおいて、先祖または現在のスレッドが属するスレッドチームのサイズを返します。 |
int omp_get_active_level(void) |
呼び出しが含まれたタスクを囲む、入れ子構造のアクティブな並列領域の数を返します。 |
これらのルーチンは、有効なスレッド・アフィニティー・ポリシーに影響を与え、アクセスします。
関数 |
説明 |
---|---|
omp_proc_bind_t omp_get_proc_bind(void) |
OMP_PROC_BIND 環境変数で初期化される、現在アクティブなスレッド・アフィニティー・ポリシーを返します。 このポリシーは、後続の入れ子構造の並列領域で使用されます。 |
int omp_get_num_places(void) |
初期タスクのプレースリスト (通常、スレッド、コア、またはソケット) で、実行環境が利用可能なプレースの数を返します。 |
int omp_get_place_num_procs(int place_num) |
プレース番号 place_num に関連付けられたプロセッサー数を返します。place_num が負または omp_get_num_places() 以上の場合はゼロを返します。 |
void omp_get_place_proc_ids(int place_num, int *ids) |
プレース番号 place_num に関連付けられた各プロセッサーの ID 番号を返します。ID 番号は負以外で、その意味は実装定義に依存します。ID 番号は配列 ids で返され、配列内の順序は実装定義に依存します。配列 ids は omp_get_place_num_procs(place_num) 要素を格納するのに十分な大きさでなければなりません。place_num が負または omp_get_num_places() 以上の場合、ルーチンは何も返しません。 |
int omp_get_place_num(void) |
到達スレッドがバインドされているプレースの番号を返します。プレース番号は、0 から omp_get_num_places() の範囲の値です。到達スレッドがプレースにバインドされていない場合は、-1 を返します。 |
int omp_get_partition_num_places(void) |
最も内側の暗黙のタスクのプレース・パーティションのプレース数を返します。 |
void omp_get_partition_place_nums(int *place_nums) |
最も内側の暗黙のタスクの place-partition-var ICV のプレースに対応するプレース数のリストを返します。配列 place_nums は、omp_get_partition_num_places() 要素を格納するのに十分な大きさでなければなりません。 |
void omp_set_affinity_format(const char *format) |
affinity-format-var ICV の値を設定して、デバイスで使用するアフィニティー形式を設定します。 |
size_t omp_get_affinity_format(char *buffer, size_t size) |
デバイスの affinity-format-var ICV の値を返します。 |
void omp_display_affinity(const char *format) |
指定された形式で OpenMP* スレッド・アフィニティー情報を出力します。 |
size_t omp_capture_affinity(char *buffer, size_t size, const char *format) |
指定された形式で OpenMP* スレッド・アフィニティー情報をバッファーに出力します。 |
これらのルーチンは、teams 領域を実行する可能性があるチームのリーグに影響を与え、監視します。
関数 |
説明 |
---|---|
int omp_get_num_teams(void) |
現在の teams 領域の初期チームの数を返します。 |
int omp_get_team_num(void) |
呼び出しスレッドの初期チームの数を返します。 |
void omp_set_num_teams(int num_teams) |
num_teams 節がない以降の teams 領域で使用されるスレッド数に影響します。 |
int omp_get_max_teams(void) |
このルーチンから実行が戻った後に遭遇する num_teams 節がない teams 構文で作成できるチーム数の上限を返します。 |
void omp_set_teams_thread_limit(int thread_limit) |
teams 構文で作成される各競合グループに参加できる OpenMP* スレッドの最大数を定義します。 |
int omp_get_teams_thread_limit(void) |
teams 構文で作成される各競合グループに参加できる OpenMP* スレッドの最大数を返します。 |
これらのルーチンは、OpenMP* の明示的なタスクに関連するものです。
関数 | 説明 |
---|---|
int omp_get_max_task_priority(void) |
priority 節で指定可能な最大値を返します。 |
int omp_in_explicit_task(void) |
明示的なタスク領域内で呼ばれた場合、TRUE を返します。そうでない場合は、FALSE を返します。 |
int omp_in_final(void) |
final タスク領域内で呼ばれた場合、TRUE を返します。そうでない場合は、FALSE を返します。 |
これらのルーチンは、OpenMP* ランタイムが使用したリソースを解放します。これらのルーチンはホストデバイス上でのみ有効です。
関数 | 説明 |
---|---|
int omp_pause_resource(omp_pause_resource_t kind, int device_num) |
ランタイムが、指定されたデバイスで OpenMP* が使用したリソースを解放することを許可します。ランタイムは、成功した場合は 0 を返し、そうでない場合は非ゼロを返します。 |
int omp_pause_resource_all(omp_pause_resource_t kind) |
ランタイムが、すべてのデバイスで OpenMP* が使用したリソースを解放することを許可します。ランタイムは、成功した場合は 0 を返し、そうでない場合は非ゼロを返します。 |
これらのルーチンは、OpenMP* プログラムからアクセス可能なデバイスのセットに関連するものです。
関数 | 説明 |
---|---|
int omp_get_num_procs(void) |
プログラムで利用できるプロセッサー数を決定します。 |
void omp_set_default_device(int device_number) |
デフォルトのデバイス番号を設定します。 |
int omp_get_default_device(void) |
デフォルトのデバイス番号を返します。 |
int omp_get_num_devices(void) |
ターゲットデバイス数を返します。 |
int omp_get_device_num(void) |
呼び出しスレッドが実行しているデバイスのデバイス番号を返します。 |
int omp_is_initial_device(void) |
現在のタスクがホストデバイスで実行している場合は TRUE を返します。そうでない場合は、FALSE を返します。 |
int omp_get_initial_device(void) |
ホストデバイスのデバイス番号を返します。デバイス番号は実装定義に依存します。0 から omp_get_num_devices() - 1 の範囲の場合、すべてのデバイス構造/ルーチンで有効です。そうでない場合、デバイス・メモリー・ルーチンでのみ有効で、device 節では無効です。 |
これらのルーチンは、ターゲットデバイスのデータ環境でメモリーの割り当てとポインターの管理をサポートします。
ルーチン | 説明 |
---|---|
void *omp_target_alloc(size_t size, int device_num) |
デバイスデータ環境にメモリーを割り当てて、メモリーへのデバイスポインターを返します。 |
void omp_target_free(void *device_ptr, int device_num) |
omp_target_alloc によって割り当てられたデバイスメモリーを解放します。 |
int omp_target_is_present(const void *ptr, int device_num) |
device_num がホストデバイスを参照する場合、または ptr が device_num のデバイスデータ環境に対応するストレージがあるストレージを参照する場合、TRUE を返します。そうでない場合は FALSE を返します。 |
int omp_target_is_accessible(const void *ptr, size_t size, int device_num) |
ptr で指定されたアドレスから始まる size バイトのストレージがデバイス device_num からアクセス可能な場合、TRUE を返します。そうでない場合は FALSE を返します。 |
int omp_target_memcpy(void *dst, const void *src, size_t length, size_t dst_offset, size_t src_offset, int dst_device_num, int src_device_num) |
デバイス src_device_num のデバイスデータ環境のメモリー位置 src + オフセット src_offset から、デバイス dst_device_num のデバイスデータ環境のメモリー位置 dst + オフセット dst_offset へ length バイトをコピーします。成功した場合はゼロを返し、失敗した場合は非ゼロを返します。omp_get_initial_device を使用して、ホストデバイスとホスト・デバイス・データ環境の参照に使用できるデバイス番号を取得できます。このルーチンには、タスク・スケジュール・ポイントが含まれます。 ターゲット領域から呼び出された場合、このルーチンの動作は不定です。 |
int omp_target_memcpy_rect(void *dst, const void *src, size_t element_size, int num_dims, const size_t *volume, const size_t *dst_offsets, const size_t *src_offsets, const size_t *dst_dimensions, const size_t *src_dimensions, int dst_device_num, int src_device_num) |
デバイス src_device_num のデバイスデータ環境の src の矩形 subvolume を、デバイス dst_device_num のデバイスデータ環境の dst へコピーします。volume は、要素サイズ、次元数、長さ num_dims の定数配列で指定します。サポートされる最大次元数は 3 以上です。volume 配列は、各次元で src から dst へコピーする長さ (要素数) を指定します。dst_offsets と src_offsets 引数は、dst と src の開始位置からの要素数を指定します。dst_dimensions と src_dimensions 引数は、dst と src の各次元の長さを指定します。このルーチンは、成功した場合ゼロを返します。そうでない場合、非ゼロを返します。dst と src がどちらも NULL ポインターの場合、このルーチンは、指定されたデバイス数に対して実装でサポートされている次元数を返します。omp_get_initial_device によって返されたデバイス番号を使用して、ホストデバイスとホスト・デバイス・データ環境を参照できます。このルーチンには、タスク・スケジュール・ポイントが含まれます。 ターゲット領域から呼び出された場合、このルーチンの動作は不定です。 |
int omp_target_associate_ptr(const void *host_ptr, const void *device_ptr, size_t size, size_t device_offset, int device_num) |
デバイスポインター (omp_target_alloc によって返されたものなど) をホストポインターにマップします。 |
int omp_target_disassociate_ptr(const void *ptr, int device_num) |
ホストポインターから指定されたデバイスの関連ポインターを削除します。 |
void *omp_get_mapped_ptr(const void *ptr, int device_num) |
指定されたデバイスのホストポインターに関連付けられているデバイスポインターを返します。 |
ロックルーチンを使用して OpenMP* ロックを操作します。
関数 |
説明 |
---|---|
void omp_init_lock(omp_lock_t *lock) |
ロックを解除状態に初期化します。 |
void omp_init_nest_lock(omp_nest_lock_t *lock) |
入れ子されたロックを解除状態に初期化します。入れ子されたロックの入れ子カウントはゼロに設定されます。 |
void omp_init_lock_with_hint(omp_lock_t *lock, omp_sync_hint_t hint) |
ロックを解除状態に初期化します。オプションで hint を基に特定のロック実装を選択できます。利用可能な hints については、OpenMP* 仕様を参照してください。 |
void omp_init_nest_lock_with_hint(omp_nest_lock_t *lock, omp_sync_hint_t hint) |
入れ子されたロックを解除状態に初期化します。オプションで hint を基に特定のロック実装を選択できます。入れ子されたロックの入れ子カウントはゼロに設定されます。利用可能な hints については、OpenMP* 仕様を参照してください。 |
void omp_destroy_lock(omp_lock_t *lock) |
ロックの状態を未初期化に変更します。 |
void omp_destroy_nest_lock(omp_nest_lock_t *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) |
ロックの設定を試みます。成功した場合は、TRUE を返します。そうでない場合は、FALSE を返します。 |
int omp_test_nest_lock(omp_nest_lock_t *lock) |
入れ子されたロックの設定を試みます。成功した場合は入れ子カウント数を返し、失敗した場合は 0 を返します。 |
関数 |
説明 |
---|---|
double omp_get_wtime(void) |
任意の参照時間から経過したウォールクロック時間 (秒) に等しい倍精度値を返します。参照時間は、プログラム実行中には変更されません。 |
double omp_get_wtick(void) |
連続するクロック刻みの間隔の秒数に等しい倍精度値を返します。 |
関数 |
説明 |
---|---|
void omp_fulfill_event(omp_event_handle_t event) |
イベントハンドル event に関連付けられているイベントを処理してイベントを破棄します。 |
関数 | 説明 |
---|---|
int omp_get_num_interop_properties(const omp_interop_t interop) |
相互運用可能な実装定義のプロパティーの数を返します。相互運用可能なプロパティーの合計数は、戻り値から omp_ipr_first を引いた値です。 |
omp_intptr_t omp_get_interop_int(const omp_interop_t interop, omp_interop_property_t property_id, int *ret_code) |
要求された整数プロパティーがある場合はそれを返し、エラーが発生した場合や値がない場合はゼロを返します。 |
void *omp_get_interop_ptr(const omp_interop_t interop, omp_interop_property_t property_id, int *ret_code) |
要求されたポインター・プロパティーがある場合はそれを返し、エラーが発生した場合や値がない場合は NULL を返します。 |
const char *omp_get_interop_str(const omp_interop_t interop, omp_interop_property_t property_id, int *ret_code) |
要求された文字列プロパティーがある場合はそれを C 文字列として返し、エラーが発生した場合や値がない場合は NULL を返します。 |
const char *omp_get_interop_name(const omp_interop_t interop, omp_interop_property_t property_id) |
property_id で識別されたプロパティー名を C 文字列として返します。 |
const char *omp_get_interop_type_desc(const omp_interop_t interop, omp_interop_property_t property_id) |
property_id で識別されたプロパティー・タイプを、人間が読める形式で表した C 文字列を返します。 |
const char *omp_get_interop_rc_desc(const omp_interop_t interop, omp_interop_rc_t ret_code) |
リターンコード ret_code を、人間が読める形式で表した C 文字列を返します。 |
関数 | 説明 |
---|---|
omp_allocator_handle_t omp_init_allocator(omp_memspace_handle_t memspace, int ntraits, const omp_alloctrait_t traits[]) |
memspace メモリー空間に関連する新しいアロケーターを作成して、そのハンドルを返します。 |
void omp_destroy_allocator(omp_allocator_handle_t allocator) |
アロケーター・ハンドルの実装に使用されたすべてのリソースを解放します。 |
void omp_set_default_allocator(omp_allocator_handle_t allocator) |
アロケーターが指定されていない割り当ての呼び出し、ディレクティブ、節で使用されるデフォルトのメモリー・アロケーターを設定します。 |
omp_allocator_handle_t omp_get_default_allocator(void) |
アロケーターが指定されていない割り当ての呼び出し、ディレクティブ、節で使用されるメモリー・アロケーターのハンドルを返します。 |
void *omp_alloc(size_t size, omp_allocator_handle_t allocator) |
指定されたメモリー・アロケーターに size バイトのメモリー割り当てを要求します。 |
void *omp_aligned_alloc(size_t alignment, size_t size, omp_allocator_handle_t allocator) |
指定されたメモリー・アロケーターに size バイトのメモリー割り当てを要求します。omp_aligned_alloc で割り当てられるメモリーは、少なくとも malloc で要求されるアライメント、アロケーターのアライメント特性、alignment 引数の値の最大値でバイト境界でアライメントされます。 |
void omp_free(void *ptr, omp_allocator_handle_t allocator) |
ptr が指すメモリーを解放します。ptr 引数は OpenMP* 割り当てルーチンによって返されたものでなければなりません。 |
void *omp_calloc(size_t nmemb, size_t size, omp_allocator_handle_t allocator) |
指定されたメモリー・アロケーターに、nmemb 要素で、各要素が size バイトの配列のメモリー割り当てを要求します。 |
void *omp_aligned_calloc(size_t alignment, size_t nmemb, size_t size, omp_allocator_handle_t allocator) |
指定されたメモリー・アロケーターに、nmemb 要素で、各要素が size バイトの配列のメモリー割り当てを要求します。omp_aligned_calloc で割り当てられるメモリーは、少なくとも malloc で要求されるアライメント、アロケーターのアライメント特性、alignment 引数の値の最大値でバイト境界でアライメントされます。 |
void *omp_realloc(void *ptr, size_t size, omp_allocator_handle_t allocator, omp_allocator_handle_t free_allocator) |
ptr が指すメモリーを解放して、指定されたメモリー・アロケーターに size バイトの新しいメモリー割り当てを要求します。成功すると割り当てメモリーへのポインターを返し、新しいメモリー・オブジェクトの内容は、古いオブジェクトの割り当てサイズか size のいずれか小さいほうまで、解放前の古いオブジェクトの内容と同じになります。 |
関数 |
説明 |
---|---|
int omp_control_tool(int command, int modifier, void *arg) |
プログラムがアクティブなツールにコマンドを渡せるようにします。 |
関数 |
説明 |
---|---|
void omp_display_env(int verbose) |
OpenMP* バージョン番号と環境変数に関連する ICV の初期値を表示します。 |