OpenMP* 5.2 仕様の概略

この記事は openmp.org で公開されている「OpenMP Application Programming Interface Version 5.2 November 2021」の抜粋日本語参考訳です。


B.1 廃止された機能

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

  • linear 節に引数と linear-modifierlinear-modifier(リスト) として指定する構文は非推奨となりました。
  • reduction 節のマイナス (-) オペレーターは非推奨となりました。
  • map 節のカンマで区切られていない修飾子の構文は非推奨となりました。
  • ——————- Fortran ——————-

  • 関連する ALLOCATE 文での 1 つ以上の allocate ディレクティブの使用は非推奨となりました。
  • ——————- Fortran ——————-

  • uses_allocators 節の引数を、allocator[(traits)] 形式の節-引数-指定でカンマで区切ったリストとして指定する引数は非推奨となりました。
  • metadirective の default 節は非推奨となりました。
  • ——————- C/C++ ——————-

  • declare target ディレクティブのの区切り形式は非推奨となりました。
  • ——————- C/C++ ——————-

  • declare target ディレクティブの to 節は非推奨となりました。
  • 引数を持たない destroy 構造の depobj 節構文は非推奨となりました。
  • キーワード sourcesink をタスク依存タイプの修飾子として使用する depend 節の関連構文は非推奨となりました。
  • interop 構造の init 節は、修飾子リストのどこでも interop_type を受け入れるようになりました。
  • num-procs-varthread-num-varfinal-task-varimplicit-task-var および team-size-var の各 ICV が、ompd- プリフィクス付きで利用できなければならない要件は廃止されました。

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

  • implicit-task-var ICV が explicit-task-var ICV に置き換わり、反対の意味とセマンティクスを持ちます (2 章を参照)。コード領域が明示的なタスク領域から実行されていることを確認するため、omp_in_explicit_task ルーチンが追加されました (18.5.2 節を参照)。
  • OpenMP* 構文の仕様の質を向上し、制限事項とその表現の一貫性を高めるため、大幅な再編成と変更が行われました。
  • これらの変更により、前バージョンの OpenMP* 仕様との違和感が生じることがあるでしょう。それらの違いのほとんどは曖昧さを解消するものですが、既存の実装やプログラムに影響する可能性があります。
  • OpenMP* ディレクティブでは omp センチネルが予約され (3.1 節3.1.1 節、および 3.1.2 節)、OpenMP* ディレクティブを拡張する実装定義のディレクティブでは、C/C++ および自由形式の Fortran の ompx センチネルが予約され (3.1 節3.1.2 節)、固定形式の Fortran では omx センチネルが文字位置の要件に対応しています (3.1.1 節)。OpenMP* ディレクティブの実装定義節向けに ompx_ プリフィクスで始まる節名が予約されています (3.2 節)。omp_ および ompx_ プリフィクスで始まる基本言語での予約名と、OpenMP* ランタイム API および API に対する実装定義の拡張 (4 章) 向けに ompompx 名前空間 (18 章) が予約されています。
  • ペアの end ディレクティブで指定できるすべての節はディレクティブで指定できるようになりました (3.1 節)。これには、copyprivate 節 (5.7.2 節) と Fortran の nowait 節 (15.6 節) が含まれます。
  • 節の他の定義の構文と一貫性を保つため、引数を持たない depobj 構造の destroy 節の構文は非推奨となりました (3.5 節)。
  • 他の節の構文と一貫性を保つため、引数と linear 修飾子 を linear 修飾子(list) ととして指定する linear 節の構文は非推奨となり、リニアステップを指定するため step 修飾子が追加されました (5.4.6 節)。
  • リダクションのマイナス (-) 演算子は非推奨となりました (5.5.5 節)。
  • map 節のカンマで区切られていない修飾子の構文は非推奨となりました (5.8.3 節)。
  • ユーザー定義マッパーを完全にサポートし、map 節の一貫性を向上するため、declare mapper ディレクティブが拡張され、iterator 修飾子と present マップタイプ修飾子を受け入れるようになりました (5.8.3 節5.8.8 節)。
  • マッピングされたリスト項目と一致するデータ環境が見つからない場合、ポインターは firstprivate セマンティクス (5.8.6 節) に従って元の値を保持します。
  • enter 節は declare target ディレクティブの to 節として追加され、対応する to 節は文法の曖昧性を軽減するため非推奨となりました (5.8.4 節7.8 節)。
  • ——————- Fortran ——————-

  • metadirectives (7.4 節)、仮定ディレクティブ (8.3 節)、nothing ディレクティブ (8.4 節)、error ディレクティブ (8.5 節) およびループ変換構造 (9 章) が、純粋なプロシージャー (3 章) で許可されるディレクティブのリストに追加されました。
  • allocators 構造が Fortran の ALLOCATE 文で割り当てられた変数に OpenMP* アロケーターを使用するのをサポートするために追加され、ALLOCATE 文に allocate ディレクティブを使用することは非推奨となりました (6.7 節)。
  • 基本言語コードが関連付けられている他の構造との一貫性を保つため、dispatch 構造が拡張され、オプションのペアの end ディレクティブを指定できるようになりました (7.6 節)。
  • ——————- Fortran ——————-

  • アロケーターの全範囲をサポートし、他の節との構文の一貫性を向上するため、uses_allocators の引数をカンマで区切って指定し、そのリスト項目を allocator[(traits)] 形式の節-引数で指定する引数は非推奨となりました (6.8 節)。
  • この仕様では、コードを明確にして曖昧性を軽減するため、metadirective の default 節の同義語として otherwise 節が追加され、対応する default 節の構文は非推奨となりました (7.4.2 節)。
  • ——————- C/C++ ——————-

  • 構文全体の一貫性を高め、冗長性を減らすため、declare target ディレクティブのカンマで区切りの指定は非推奨となりました (7.8.2 節)。
  • ——————- C/C++ ——————-

  • concurrent パラメーターの order 節の動作は、修飾子が明示的に指定される場合にのみループのスケジュールの再現性に影響を与えるように変更されました (10.3 節)。
  • scope ディレクティブで allocate 節と firstprivate 節がサポートされるようになりました (11.2 節)。
  • ワークシェア・ループ用の ompt_callback_work コールバック・ワーク・タイプが追加されました (11.5 節)。
  • 使い方を容易にするため、target enter data または target exit data 構造の map 節では、デフォルトのマップタイプが定義され、それぞれ tofrom マップタイプと同じ動作をします (13.6 節13.7 節)。
  • コードの明確性を高めて解釈の曖昧さを軽減するため、depend 節の同義語として doacross 節が追加され、依存関係タイプ として source および sink キーワードが追加され、対応する depend 節の構文は非推奨となりました。 現在の論理反復を参照する反復ベクトルを表す omp_cur_iteration キーワードが追加されました (15.9.6 節)。

関連記事