OpenMP* 5.1 の機能概要

同カテゴリーの次の記事

ベータ版インテル® C++ コンパイラーおよびベータ版インテル® Fortran コンパイラー向けの GPU への OpenMP* オフロード導入

2020 年 8 月に OpenMP* 5.1 TR9 のドラフト仕様が公開されました。iSUS では https://www.openmp.org (英語) で公開されている『OpenMP Technical Report 9: Version 5.1 Public Comment Draft』 (英語) の「B Features History」の「B.1 Deprecated Features」と「B.2 Version 5.0 to 5.1 Differences」の日本語参考訳を公開します。

詳細については、「OpenMP Technical Report 9: Version 5.1 Public Comment Draft」 (英語) をご覧ください。


B.1 廃止された機能

次の機能はバージョン 5.1 では廃止されました。

  • master アフィニティー・ポリシーは廃止されました。
  • master 構造と master 構造を含むすべての結合構造および複合構造は、廃止されました。
  • Cray* ポインターのサポートは廃止されました。
  • 定数 omp_atv_sequential は廃止されました。
  • 列挙型 ompt_sync_region_t の列挙値 ompt_sync_region_barrierompt_sync_region_barrier_implicit は廃止されました。
  • 列挙型 ompt_state_t の列挙値 ompt_state_wait_barrierompt_state_wait_barrier_implicit は廃止されました。
  • Fortran では、use_device_ptr または is_device_ptr 節で C_PTR 型以外のリスト項目の指定は廃止されました。
  • 特性として使用される requires ディレクティブで利用可能な節は廃止されました。

次の機能はバージョン 5.0 で廃止されました。

  • nest-var ICV、OMP_NESTED 環境変数、および omp_set_nestedomp_get_nested ルーチンは廃止されました。
  • lock ヒントは synchronization ヒントに名称が変更されました。次の lock ヒントタイプと構造は廃止されました。
    • C/C++ の omp_lock_hint_t タイプと、Fortran の omp_lock_hint_kind
    • 定数 omp_lock_hint_noneomp_lock_hint_uncontendedomp_lock_hint_contendedomp_lock_hint_nonspeculative、および omp_lock_hint_speculative

B.2 バージョン 5.0 と 5.1 の違い

  • C11、C++11、C++14、C++17、および Fortran 2008 が完全にサポートされました (1.7 節 – ページ 33)。
  • Fortran 2018 の初期サポートを提供するため仕様全体を通してさまざまな変更が行われました (1.7 節 – ページ 33)。
  • OpenMP* ディレクティブ構文が、C++ 属性指定子を含むことができるように拡張されました (2.1 節 – ページ 38)。
  • omp_all_memory 予約ロケーターが追加され (2.1 節 – ページ 38)、depend 節で使用できるように拡張されました (2.18.11 節 – ページ 287)。
  • target_device 特性セットが OpenMP* コンテキストに追加され (2.3.1 節 – ページ 53)、target_device セレクターセットが variant マッチのコンテキスト・セレクターに追加されました (2.3.2 節 – ページ 55)。
  • C/C++ では、プリプロセスされたコードの省略をサポートし、指定された関数定義をバリアント関数として解釈できるように declare variant ディレクティブが拡張されました (2.3.5 節 – ページ 62)。
  • declare variant ディレクティブが、元の関数とバリアント間のインターフェイスの調整をサポートする節 (adjust_argsappend_args) で拡張されました (2.3.5 節 – ページ 62)。
  • dispatch 構造が追加され、ユーザーがバリアント置換が発生するタイミングを制御し、関数バリアントに引数として渡す追加情報を定義できるようになりました (2.3.6 節 – ページ 67)。
  • ユーザーが不定条件を指定できるように assume ディレクティブが追加されました (2.5.2 節 – ページ 85)。
  • デバイス固有の ICV 設定をサポートするため、環境変数の構文が拡張されデバイス固有の変数がサポートされました (2.4.2 節 – ページ 73)。
  • metadirective を明確にするため nothing ディレクティブが追加されました (2.5.3 節 – ページ 88)。
  • ユーザーがコンパイルとランタイム時のエラーアクションを制御できるように error ディレクティブが追加されました (2.5.4 節 – ページ 89)。
  • prallel またはワークシェア領域外でリダクションをサポートするため、scope ディレクティブが追加されました (2.8 節 – ページ 107)。
  • ループ変換構造が追加されました (2.10.9 節 – ページ 159)。
  • taskloop 構造の grainsizenum_task 節が、タスクへの論理反復の決定論的な分散を保証する strict 修飾子で拡張されました (2.11.2 節 – ページ 167)。
  • 生成された競合グループ内のスレッド数の上限を制御するため、target 構造に thread_limit 節が追加されました (2.13.5 節 – ページ 199)。
  • target 構造に has_device_addr 節が追加され、デバイスアドレスを持つ変数や配列セクションにアクセスできるようになりました (2.13.5 節 – ページ 199)。
  • イテレーターを定義して、target update ディレクティブの motion 節 (2.13.6 節 – ページ 207) または、map 節 (2.20.7.1 節 – ページ 348) で使用できるようになりました。
  • target 領域でプロシージャーや関数のデバイス・バージョンの呼び出しが可能になりました (2.13.7 節 – ページ 212)。
  • OpenMP* の実装に使用される外部実行コンテキストとの移植性のある相互運用性を可能にするため interop ディレクティブが追加されました (2.5.5 節 – ページ 91)。さらに、omp_interop_t オブジェクトを容易に使用できるランタイムルーチンが追加されました (3.7 節 – ページ 447)。
  • 実行を特定のスレッドに制限することを可能にする masked 構造が追加されました (2.17 節 – ページ 252)。
  • タスクの依存関係グラフへの非ブロッキングなジョイン操作の挿入をサポートするため、taskwait ディレクティブに nowait 節が追加されました (2.18.5 節 – ページ 260)。
  • 比較と交換 (compare-and-swap) と (C/C++ の) compare 節で最小 (min) および最大 (max) アトミック操作ができるようになりました。失敗したアトミック操作と fail 節に適用できるメモリーの順序付けがサポートされました (2.18.7 節 – ページ 265)。
  • flush 構造で seq_cst 節を明示的に指定できるようになりました。これは、リストや節を持たない flush 構造と同様の意味を持ちます (2.18.8 節 – ページ 274)。
  • inout セットをサポートするため、depend 節に inoutset 依存関係タイプが追加されました (2.18.11 節 – ページ 287)。
  • C および C++ の default 節の引数として privatefirstprivate が追加されました (2.20.4.1 節 – ページ 315)。
  • 新しい defaultmap 暗黙動作タイプが追加されました (2.20.7.3 節 – ページ 358)。
  • allocate ディレクティブの align 節と allocate 節で allocator 修飾子と align 修飾子がサポートされました (2.12 節 – ページ 178)。
  • ICV および環境変数に関する情報を表示するため、omp_display_env ランタイムルーチンが導入されました (3.2.31 節 – ページ 397)。
  • teams 構造のチーム数とサイズを制御するため、omp_set_num_teamsomp_set_teams_thread_limit ランタイムルーチンが追加されました (3.2.46 節 – ページ 412 および 3.2.48 節 – ページ 414)。さらに、omp_get_max_teamsomp_get_teams_thread_limit ランタイムルーチンが追加され、次の teams 構造で使用される値を取得できます (3.2.47 節 – ページ 413 および 3.2.49 節 – ページ 415)。
  • 非同期デバイスのメモリー管理をサポートするため、omp_target_memcpy_asyncomp_target_memcpy_rect_async ランタイムルーチンが追加されました (3.6.7 節 – ページ 438 および 3.6.8 節 – ページ 440)。
  • omp_target_associate_ptr によって作成されたポインターを取得できるようになりました (3.6.10 節 – ページ 444)。
  • 定数 omp_atv_serialized が導入され、omp_atv_default 定数の値が変更されました (3.8.1 節 – ページ 453)。
  • omp_callocomp_reallocomp_aligned_alloc、および omp_aligned_calloc API ルーチンが追加されました (3.8 節 – ページ 453)。
  • スコープの開始と終了を示すため、列挙値 ompt_scope_beginend が列挙型 ompt_scope_endpoint_t に追加されました (4.4.4.11 節 – ページ 492)。
  • 列挙型 ompt_sync_region_t に、列挙値 ompt_sync_region_barrier_implicit_workshareompt_sync_region_barrier_implicit_parallel、および ompt_sync_region_barrier_teams が追加されました (4.4.4.13 節 – ページ 493)。
  • 列挙型 ompt_target_data_op_t が非同期データ転送用の列挙値で拡張されました (4.4.4.14 節 – ページ 493)。
  • 列挙型 ompt_state_t に、列挙値 ompt_state_wait_barrier_teams および ompt_state_wait_barrier_implementation が追加されました (4.4.4.27 節 – ページ 500)。
  • 外部モニター・インターフェイスをサポートするため、OMPT コールバック ompt_callback_target_data_op_emi_t が追加されました (4.5.2.25 節 – ページ 534)。
  • 外部モニター・インターフェイスをサポートするため、OMPT コールバック ompt_callback_target_emi_t が追加されました (4.5.2.26 節 – ページ 536)。
  • 外部モニター・インターフェイスをサポートするため、OMPT コールバック ompt_callback_target_map_emi_t および ompt_callback_target_submit_emi_t が追加されました (4.5.2.27 節 – ページ 538 および 4.5.2.28 節 – ページ 540)。
  • OMPT コールバックタイプ ompt_callback_error_t が追加されました (4.5.2.30 節 – ページ 543)。
  • OMP_PLACES 環境変数値が変更され、place 構文が拡張されました (6.5 節 – ページ 645)。
  • teams 構造のチーム数とサイズを制御するため、OMP_NUM_TEAMSOMP_TEAMS_THREAD_LIMIT 環境変数が追加されました (6.23 節 – ページ 659 および 6.24 節 – ページ 659)。

 

関連記事