この記事は、openmp.org の OpenMP API 6.0 Specification (英語) で公開されている PDF (英語) の付録 (Appendices) の B Feature History の一部を iSUS で翻訳した日本語参考訳です。説明中に示されるセクション番号と章番号は、この PDF のセクションと章を示しています。原文は更新される可能性があります。原文と翻訳文の内容が異なる場合は原文を優先してください。
この付録では、OpenMP API バージョン 5.2 と 6.0 の主な機能変更をまとめています。
B.1 廃止された機能
次の機能はバージョン 6.0 で廃止されました。
Fortran
- 自由ソース形式および固定ソース形式のディレクティブ名で、隣接するキーワードを区切るオプションの空白を省略することは非推奨です(セクション 5.1.1 およびセクション 5.1.2 を参照)。
- ディレクティブ引数で結合式を指定する declare_reduction ディレクティブ構文は非推奨になりました (セクション 7.6.14 を参照)。
- Fortran のインクルード・ファイル omp_lib.h は非推奨になりました(第 20 章を参照)。
- コールバック OMPT タイプの target、target_data_op、target_submit、target_map の値と、関連するトレースレコード OMPT タイプ名は非推奨になりました(セクション 33.6 を参照)。
- target_data_op OMPT 型の ompt_target_data_transfer_to_device、ompt_target_data_transfer_from_device、ompt_target_data_transfer_to_device_async、および ompt_target_data_transfer_from_device_async の値は非推奨になりました (セクション 33.35 を参照)。
- target_data_op、target、target_map、target_submit コールバックおよび関連するトレースレコード OMPT タイプ名は非推奨となりました (セクション 35.7、セクション 35.8、セクション 35.9、セクション 35.10 を参照)。
B.2 バージョン 5.2 と 6.0 の違い
- バージョン 5.0、5.1、5.2 で非推奨となった機能はすべて削除されました。
- C23、C++23、および Fortran 2023 の完全なサポートが追加されました(セクション 1.6 を参照)。
- Fortran 2018 の完全なサポートが完了しました(セクション 1.6 を参照)。
- 環境変数の構文が拡張され、単一の環境変数でホストデバイスと非ホストデバイスの ICV を初期化できるようになりました(セクション 3.2 および第 4 章を参照)。
- nthreads-var ICV の処理が更新され (セクション 3.4 を参照)、内部並列処理のコンテキスト固有の予約をサポートするため、num_threads 節の nthreads 引数がリストに変更されました (セクション 12.1.2 を参照)。
- OMP_NUM_THREADS、OMP_THREAD_LIMIT、および OMP_TEAMS_THREAD_LIMIT 環境変数には、数値の抽象名値を使用できるようになりました(セクション 4.1.3、セクション 4.1.4、およびセクション 4.2.2 を参照)。
- 環境変数 OMP_PLACES は、抽象名からプレースリストを作成する際に、連続する場所の増分をサポートするように拡張されました (セクション 4.1.6 を参照)。
- 環境変数 OMP_AVAILABLE_DEVICES が追加され、環境変数 OMP_DEFAULT_DEVICE が拡張され、特性によるデバイス選択がサポートされるようになりました (セクション 4.3.7 およびセクション 4.3.8 を参照)。
- uid 特性が、環境変数 OMP_AVAILABLE_DEVICES および OMP_DEFAULT_DEVICE の許可された特性、およびターゲットデバイス特性セットに追加されました (セクション 4.3.7、セクション 4.3.8、およびセクション 9.2 を参照)。
- 構造化スレッドとフリーエージェント・スレッドの数を予約するため、環境変数 OMP_THREADS_RESERVE が追加されました (セクション 4.3.10 を参照)。
C++
- 宣言型ディレクティブの属性構文を改善するため、decl 属性が追加されました(セクション 5.1 を参照)。
C
- OpenMP ディレクティブ構文が、C++ 属性指定子を含むことができるように拡張されました (セクション 5.1 節参照)。
Fortran
- DO CONCURRENT 構文で pure プロパティーを持つディレクティブのサポートが追加されました(セクション 5.1 を参照)。
- 節形式の一貫性を向上させるため、すべての不可侵節はオプションの引数を取るように拡張され、デフォルト値は既存の不可侵の意味論と同等の意味論を持ちます(セクション 5.2 を参照)。
- adjust_args 節が、引数の位置指定をサポートするように拡張されました(セクション 5.2.1 およびセクション 9.6.2 を参照)。
Fortran
- ロケーターリスト項目と割り当て可能な OpenMP 型の定義が拡張され、データポインターの結果を持つ関数参照が含まれるようになりました(セクション 5.2.1 を参照)。
C / C++
- 配列セクションの定義が拡張され、明示的に許可されている場合は、配列次元のサイズが不明な場合に長さを省略できるようになりました(セクション 5.2.5 を参照)。
- 複合構造の具体性を高めるため、すべての節は、節が適用される構成ディレクティブを識別するディレクティブ名修飾子を受け入れるように拡張されました(セクション 5.4 を参照)。
- init 節のすべての修飾子を指定できるように、append_args 節の相互運用操作に拡張機能が追加されました(セクション 5.6 およびセクション 9.6.3 を参照)。
- depobj 構造に init 節が追加され、この構造で init、update、destroy 節が繰り返し使用できるようになりました (セクション 5.6 およびセクション 17.9.3 を参照)。
- depobj 構造の destroy 節の引数を省略する構文は非推奨ではなくなりました (セクション 5.7 を参照)。
Fortran
- アトミック構造化ブロックは、BLOCK 構造、ポインター割り当て、および列挙と列挙型の 2 つの組み込み関数を可能にするように拡張されました (セクション 6.3.3 を参照)。
- 条件付き更新文は、多くの形式と比較できるように拡張されました(セクション 6.3.3 を参照)。
- 正規ループシーケンスの概念と looprange 節が定義されました(セクション 6.4.2 およびセクション 6.4.7 を参照)。
Fortran
- ポリモーフィック型のデータ共有属性節とデータマッピング属性節に関する制限が変更され、動作が明確化されました(第 7 章を参照)。
- タスク生成構造のシーケンスの記録と効率的な再生をサポートするため、saved 修飾子、replayable 節、および taskgraph 構造が追加されました(セクション 7.2、セクション 14.6、およびセクション 14.3 を参照)。
- target ディレクティブで default 節が許可されるようになり、defaultmap 節と同様に、変数カテゴリー修飾子を受け入れるようになりました(セクション 7.5.1 を参照)。
- target_data 構造の use_device_ptr と use_device_addr 節は、デバイスのデータ環境内での参照に対応するオブジェクトに対し、領域への入口と出口で参照カウントを更新するように変更されました (セクション 7.5.8 およびセクション 7.5.10 を参照)。
- インダクション演算のサポートは、induction 節(セクション 7.6.13 を参照)と、ユーザー定義のインダクションをサポートする declare_induction ディレクティブ(セクション 7.6.17 を参照)によって追加されました(セクション 7.6 を参照)。
- reduction 節のプライベート変数に対するリダクションのサポートが追加されました(セクション 7.6 を参照)。
C++
- クラス型の変数に対して暗黙的に宣言されたリダクション識別子がサポートされる状況が明確になりました(セクション 7.6.3 およびセクション 7.6.6 を参照)。
- scan ディレクティブは、init_complete 節を受け入れるように拡張され、囲んでいる simd 構造またはワークシェア・ループ構造 (またはそれらを組み合わせた複合構造) の最終ループ本体内の初期化フェーズを識別できるようになりました (セクション 7.7 およびセクション 7.7.3 を参照)。
- storage 修飾子は、マッピング操作がターゲットデバイス上のストレージの割り当てや解放のみを行う場合に優先されるマップタイプとして追加されました(セクション 7.9.1 を参照)。
- ref 修飾子は、C++ 参照または Fortran ポインター/割り当て可能変数であるリスト項目に対する節の影響をより詳細に制御するため、map 節に追加されました(セクション 7.9.5 およびセクション 7.9.6 を参照)。
- マップタイプ修飾子のプロパティーがデフォルトに変更されたため、他の修飾子が使用されている場合でも、自由に配置および省略できるようになりました(セクション 7.9.6 を参照)。
- map 節に self マップタイプ修飾子が追加され、defaultmap 節に self の暗黙の動作が追加され、対応するリスト項目が元のリスト項目と同じオブジェクトを参照するように明示的に要求されました(セクション 7.9.6 およびセクション 7.9.9 を参照)。
- map 節は、想定サイズの配列のマッピングを可能にするように拡張されました(セクション 7.9.6 を参照)。
- map 節の delete キーワードは、delete 修飾子に再定式化されました(セクション 7.9.6 を参照)。
Fortran
- automap 修飾子は、Fortran の割り当て可能変数がそれぞれ割り当てられたときと、割り当てが解除されたときに自動的にマッピングおよびアンマッピングをサポートするため、enter 節に追加されました(セクション 7.9.7 を参照)。
- groupprivate ディレクティブは、変数が競合グループに関してプライベート化されることを指定するため追加されました(セクション 7.13 を参照)。
- declare_target ディレクティブに local 節を追加することで、変数を各デバイスごとにローカルに複製するように指定できます (セクション 7.14 を参照)。
- アロケーター特性 omp_atk_part_size が、omp_atv_interleaved アロケーター・パーティションのサイズを指定するために追加されました (セクション 8.2 を参照)。
- omp_atk_pin_device、omp_atk_preferred_device、および omp_atk_target_access メモリー割り当て特性は、複数のデバイスからアクセス可能なメモリー割り当てを制御するために定義されました(セクション 8.2 を参照)。
- access アロケーター特性の device 値は、デフォルトの access アロケーター特性として定義され、この特性を持つアロケーターが、特定のデバイス上のすべてのスレッドがアクセスできるメモリーに対応するセマンティクスを提供します。all 値を持つアロケーターのセマンティクスは、システム内のすべてのスレッドがアクセスできるメモリーに対応するように更新されました (セクション 8.2 を参照)。
- omp_atv_partitioner の値は、アドホックなユーザー・パーティションを可能にするため、omp_atk_partition アロケーター特性の設定値に追加されました (セクション 8.2 を参照)。
- 複数の節引数指定を許可するように、uses_allocators 節が拡張されました(セクション 8.8 を参照)。
- 参照渡しされる引数の調整をサポートするため、adjust_args 節に need_device_addr 修飾子が追加されました(セクション 9.6.2 を参照)。
- dispatch 構造は、呼び出しサイトに固有の引数を追加できるように、interop 節によって拡張されました(セクション 9.7 およびセクション 9.7.1 を参照)。
C / C++
- リスト項目を指定する declare_target ディレクティブは、それらのリスト項目の宣言と同じスコープに配置する必要があり、ディレクティブがリスト項目を指定しない場合は、宣言に関連付けられたものとして扱われます (セクション 9.9.1 を参照)。
- ディレクティブに関連付けられたエラー終了のカスタマイズをサポートするため、parallel ディレクティブに message と severity 節が追加されました(セクション 10.3、セクション 10.4、およびセクション 12.1 を参照)。
- self_maps 要件節は、すべてのマッピング操作が自己マップであることを要求するために追加されました(セクション 10.5.1.6 を参照)。
- 構造が存在しない領域を識別するため、no_openmp_constructs 節に assumption 節グループが拡張されました(セクション 10.6.1 およびセクション 10.6.1.5 を参照)。
- ループ変換構造の制約に、生成されるループは doacross の影響を受けるループであってはならないという項目が追加されました。これは、アンロール係数が 1 の unroll 構造において、単独の ordered ディレクティブが非準拠となることを意味します(第 11 章、セクション 11.9 およびセクション 17.10.1 を参照)。
- ループ変換構造のより柔軟な構成を可能にするため、apply 節が追加されました(セクション 11.1 を参照)。
- sizes 節が更新され、非定数のリスト項目を許可できるようになりました(セクション 11.2 を参照)。
- 標準的なループシーケンス内の 2 つ以上のループを融合するため、fuse 構造が追加されました(セクション 11.3 を参照)。
- ネストされたループの順序を入れ替えるために、interchange 構造が追加されました(セクション 11.4 を参照)。
- ループの反復順序を反転するため、reverse 構造が追加されました(セクション 11.5 を参照)。
- インデックス・セット分割を標準ループネストに適用するため、split ループ変換構造が追加されました(セクション 11.6 を参照)。
- 標準的なループネストにストライプを適用するため、stripe ループ変換構造が追加されました(セクション 11.7 を参照)。
- グリッドループとタイルループが同じ構造の影響を受けるように、tile 構造が拡張されました(セクション 11.8 を参照)。
- num_threads 節に規範性修飾子が追加され、その節に対して strict セマンティクスが定義されました(セクション 12.1.2 を参照)。
- どの同期スレッドが最終的に進行することが保証されるか制御するため、並列構造の safesync 節 (セクション 12.1.5 を参照)、omp_curr_progress_width 識別子 (セクション 20.1 を参照)、および omp_get_max_progress_width ルーチン (セクション 24.6 を参照) が追加されました。
- loop 構造や、concurrent 順序付けで order 節を指定するその他の構造を使いやすくするため、領域内のプロシージャーへの呼び出しに特定の OpenMP ディレクティブを含めることができるようになりました (セクション 12.3 を参照)。
- 幅広い同期オプションをサポートするため、atomic 構造が、concurrent を指定する order 節を持つ構造に対応する領域内で遭遇する可能性のある構造に追加されました(セクション 12.3 を参照)。
- concurrent 順序付けで order 節が指定されている構造に対応する領域の実行中に遭遇する可能性のある構造は、対応する領域が厳密にネストされた領域でない場合、制限されません(セクション 12.3 を参照)。
Fortran
- teams 構造における Fortran 配列式をサポートするため、workdistribute ディレクティブが追加されました (セクション 13.5 を参照)。
- loop 構造は、DO CONCURRENT ループを縮約ループとして使用できるよう拡張されました(セクション 13.8 を参照)。
- taskloop 構造には、補助ディレクティブとして task_iteration が含まれるようになりました。これにより、taskloop が生成するタスクに、affinity 節と depend 節のセマンティクスを含めることができます (セクション 14.2、セクション 14.2.3、セクション 14.10、およびセクション 17.9.5 を参照)。
- 生成されたタスクがバインドするスレッドセットを指定するため、タスク生成構造に threadset 節が追加されました(セクション 14.8 を参照)。
- target_enter_data、target_exit_data、target_data、target、target_update ディレクティブに priority 節が追加されました(セクション 14.9、セクション 15.5、セクション 15.6、セクション 15.7、セクション 15.8、セクション 15.9 を参照)。
- target 構造に現れる可能性のある節に、device_type 節が追加されました(セクション 15.1 およびセクション 15.8 を参照)。
- target 構造に、ancestor デバイス修飾子とともに device 節が指定されている場合、nowait 節も指定できるようになりました(セクション 15.2、セクション 15.8、およびセクション 17.6 を参照)。
- target_data ディレクティブの説明が更新され、複合構造となり、taskgroup 領域が含まれるようになり、現れる可能性のある節が、構成要素と taskgroup 領域を反映するようになりました(セクション 15.7 を参照)。
- init 節の prefer 型修飾子が更新され、外部ランタイム識別子以外の優先度も指定できるようになりました(セクション 16.1.3 を参照)。
- nowait 節(第 17.6 節参照)および nogroup 節(第 17.7 節参照)の do_not_synchronize 引数が更新され、定数以外の式も使用できるようになりました。
- バインドするスレッドセットが複数のデバイスに適用されるようにするため、atomic および flush 構造に memscope 節が追加されました(セクション 17.8.4、セクション 17.8.5、およびセクション 17.8.6 を参照)。
- 複数世代のタスク依存グラフをサポートするため、transparent 節が追加されました(セクション 17.9.6 を参照)。
- cancel 構造は、イベント変数を通じてまだ完了していないタスクを完了するように拡張され、omp_fulfill_event ルーチンは、バリアを超えて実行を続行する前にイベントハンドルが満たされるように制限されました(セクション 18.2 およびセクション 23.2.1 を参照)。
- 複合ディレクティブ名のルールが、直感的になり、隣接する構造の有効な組み合わせをより多くするため簡略化されました(セクション 19.1 を参照)。
- omp_is_free_agent および omp_ancestor_is_free_agent ルーチンが、遭遇したスレッドまたは祖先スレッドがフリーエージェント・スレッドであるかテストするために追加されました (セクション 23.1.4 およびセクション 23.1.5 を参照)。
- omp_get_device_from_uid および omp_get_uid_from_device ルーチンが、デバイスの一意の識別子とデバイス番号の間で変換を行うために追加されました (セクション 24.7 およびセクション 24.8 を参照)。
- omp_get_device_num_teams、omp_set_device_num_teams、omp_get_device_teams_thread_limit、および omp_set_device_teams_thread_limit ルーチンは、特定のデバイスの nteams-var および teams-thread-limit-var ICV を取得および設定するために追加されました(セクション 24.11、セクション 24.12、セクション 24.13、およびセクション 24.14 を参照)。
- omp_target_memset および omp_target_memset_async ルーチンは、デバイスのデバイスデータ環境のメモリーを埋めるために追加されました (セクション 25.8.1 およびセクション 25.8.2 を参照)。
Fortran
- 相互運用オブジェクトを操作するランタイムルーチンの Fortran 版が追加されました(第 26 章を参照)。
- メモリー空間を取得する新しいルーチンと、リモートメモリーおよび共有メモリーを割り当てるメモリー割り当てルーチンが追加されました(第 27 章を参照)。
- メモリー空間で使用可能なリソース数を照会するため、omp_get_memspace_num_resources ルーチンが追加されました(セクション 27.2 を参照)。
- 指定されたメモリー空間でサポートされるページサイズを取得するため、omp_get_memspace_pagesize ルーチンが追加されました(セクション 27.3 を参照)。
- 元のストレージリソースのサブセットを持つメモリー空間を取得するため、omp_get_submemspace ルーチンが追加されました(セクション 27.4 を参照)。
- mempartitioner および mempartition オブジェクトを操作するため、omp_init_mempartitioner、omp_destroy_mempartitioner、omp_init_mempartition、omp_destroy_mempartition、omp_mempartition_set_part、omp_mempartition_get_user_data ルーチンが追加されました (セクション 27.5 を参照)。
- set_callback が ompt_set_always を返すコールバックのセットには、非推奨となった target_data_op、target、target_map、target_submit コールバックは含まれなくなりました (セクション 32.2.4、セクション 35.7、セクション 35.8、セクション 35.9、セクション 35.10 を参照)。
- より一般的な値 ompt_target_data_transfer と ompt_target_data_transfer_async が target_data_op_OMPT タイプに追加され、ompt_target_data_transfer_to_device、ompt_target_data_transfer_from_device、ompt_target_data_transfer_to_device_async、および ompt_target_data_transfer_from_device_async の値が置き換えられました (セクション 33.35 を参照)。置き換えられた値は非推奨となりました。
- get_buffer_limits エントリーポイントが、OMPT デバイスのトレース・インターフェースに追加され、ファーストパーティー・ツールが実装に提供すべきトレースバッファーのサイズの上限を取得できるようになりました(セクション 37.6 を参照)。

