OpenMP* 5.0 TR7 の仕様抜粋訳

同カテゴリーの次の記事

プログラミング、リファクタリング、そしてすべてにおける究極の疑問: No. 21

2018 年 7 月 12 日に OpenMP* Technical Report 7 (TR7) が一般公開されました。このドキュメントの付録 D に記載される、「バージョン 4.5 と 5.0 の違い」の参考訳をお届けします。記事中の [ ] 内の番号は、「OpenMP* Technical Report 7: Version 5.0 Public Comment Draft」 (英語) の章と節番号です。2017 年 11 月に公開された TR6: OpenMP* Version 5.0 Preview 2 (英語) にいくつかの追加が行われています。

インテル® コンパイラーのバージョン 19.0 がこの仕様の大部分をサポートしますが、現在 iSUS では動作を検証していますので、今後の記事やセミナーにご期待ください。OpenMP* 5.0 仕様は 2018 年 11 月に公開される予定です。

  • ランタイム・ライブラリー・ルーチンのスタブ (以前の付録 A) は、別のドキュメントに移動されました。

  • インターフェイス宣言 (以前の付録 B) は、別のドキュメントに移動されました。

  • 指定されたフラッシュ特性に従って異なるタイプのフラッシュ操作を区別するためメモリーモデルが拡張され [1.4.4]、同期フラッシュ操作の前に行われるように定義されました。[1.4.5]

  • C11、C++11、C++14、C++17 および Fortran 2008 の初期サポートを提供するため仕様全体を通してさまざまな変更が行われました。[1.7]

  • Fortran 2003 のいくつかの機能のサポートが追加されました。[未サポートの機能については 1.7 を参照]

  • タスク生成構文の depend 節に指定できるリスト項目 (C/C++ のすべての lvalue 表現を含む) が拡張されました。[2.1、2.20.11]

  • 実装固有の機能を必要とするアプリケーションをサポートするため、requires ディレクティブが追加されました。[2.3]

  • デバイス構文の実行をランタイム制御するため、target-offload-var 内部制御変数 (ICV) [2.4] と OMP_TARGET_OFFLOAD 環境変数 [5.17] が追加されました。

  • nest-var ICV のデフォルト値が、false から実装定義に変更されました。[2.4.2] nest-var ICV [2.4.1]、OMP_NESTED 環境変数 [5.6]、および omp_set_nested/omp_get_nested ランタイムは廃止となりました。[3.2.10、3.2.11]

  • C と C++ の非ユニットストライドの配列形状 [2.5] と配列セクション [2.6] が追加され、不連続なストレージの指定が容易になり、target update 構文 [2.15.6] と depend 節 [2.20.11] で形状オペレーター [2.5] が使用できるように拡張されました。さらに、target update 構文 [2.15.6] が不連続なストレージを指定する配列セクションを許可するように変更されました。

  • リスト表現が複数の式に拡張される可能性を表現できるようイテレーターが追加されました。[2.7]

  • teams 構文 [2.10] は、target 構文 [2.15.5] で囲むことなくホストデバイスでの実行をサポートするように拡張されました。

  • declare variant ディレクティブ [2.8.4] と metadirective メタ・ディレクティブ [2.8.5] は、コンテンツ範囲のコンパイル時の特性に基づいて、それぞれコールサイトや異形ディレクティブで宣言された選択のサポートが追加されました。

  • 正規表現ループ形式が Fortran 向けに定義され、すべての基本言語で非矩形ループの入れ子が可能となるように拡張されました。 [2.12.1]

  • C/C++ の正規表現ループ形式の relational-op が != を含むように拡張されました。[2.12.1]

  • 不完全な入れ子ループに関連する collapse が、ワークシェア・ループ [2.12.2]、simd [2.12.3.1]、taskloop [2.13.2]、distribute [2.12.4.2] 構文で定義されました。

  • SIMD 構文 [2.12.3] 内で atomic 構文が使用できるよう拡張されました。[2.12.3]

  • SIMD 構文に if 節と nontemporal 節が追加されました。[2.12.3.1]

  • インクルーシブとエクスクルーシブなスキャン操作をサポートするため、scan ディレクティブ [1.12.6] と reduction 節 [2.22.5.4] に inscan 修飾子が追加されました。

  • 同時実行を含む、任意の順番で実行されるループ反復をコンパイラーが最適化および並列化できるよう loop 構文が追加されました。[2.12.5]

  • task リダクションをサポートするため、task 構文 [2.13.1] と target 構文 [2.15.5] が in_reduction 節 [2.22.5.6] を、そして taskgroup 構文 [2.20.6] が task_reduction 節を受け入れるように拡張され、reduction 節 [2.22.5.4] に task 修飾子が追加されました。

  • 明示的なタスクの実行優先順位に関するヒントの指定をサポートするため、task 構文に affinity 節が追加されました。[2.13.1]

  • taskloop リダクションをサポートするため、taskloop 構文 [2.13.2] と taskloop simd 構文 [2.13.3] が reduction 節 [2.22.5.4] と in_reduction 節 [2.22.5.6] を受け入れるように拡張されました。

  • 排他的な inout セットをサポートするため、depend 節 [2.13.6、2.20.11] に mutexinoutset 依存関係タイプが追加されました。

  • 事前定義メモリー空間 [2.14.1]、事前定義メモリー・アロケーターと割り当て特性 [2.14.2]、およびディレクティブ、節 [2.14]、および API ルーチン [3.7] が、異なる種類のメモリーで使用できるようにサポートが追加されました。

  • リバースオフロードをサポートするため、target 構文 [2.15.5] の device 節に ancestor 修飾子が追加されました。

  • プログラマーの負担を軽減するため、いくつかの関数 (C、C++、Fortran) とサブルーチン (Fortran) で暗黙の declare target ディレクティブが追加されました。[2.15.5、2.15.7]

  • 入れ子になった declare target ディレクティブのサポートが追加されました。[2.15.7]

  • デバイス固有の関数実装をサポートするため、declare target ディレクティブに implements 節が追加されました。[2.15.7]

  • 複雑なデータ型のマッピングをサポートするため、declare mapper ディレクティブが追加されました。[2.15.8]

  • taskwait 構文に depend 節が追加されました。[2.20.5]

  • 弱いメモリー順序付けのメモリー要求と解放セマンティクスをサポートするため、atomic 構文 [2.20.7] と flush 構文 [2.20.8] に acq_relacquire、および release 節が追加されました。

  • atomic 構文に hint 節が拡張されました。[2.20.7]

  • depend 節 [2.20.11] がイテレーターをサポートし、新しい depobj 構文で作成される depend オブジェクトをサポートするように拡張されました。

  • ロックヒント (Lock hint) の名称が同期ヒント (synchronization hint) に変更されました。古い名称は廃止予定です。[2.20.12]

  • lastprivate 変数に条件付きの割り当てをサポートするため、lastprivate 節に conditional 修飾子が追加されました。[2.22.4.5]

  • 構造体メンバーのマッピングを明確にするため、map 節の説明が変更されました。[2.22.7.1]

  • 配列セクションへのマップで、ポインター変数へのマップ (C/C++) とデバイスメモリーのアドレス割り当てが追加されました。[2.22.7.1]

  • defaultmap 句 [2.22.7.2] を拡張して、スカラー、集約、ポインター、または割り当て可能なクラスのデータマッピングやデータ共有属性を領域ごとに選択できるようにしました。構文が明示的にまたはプライベートとしてマップする必要がある、すべての変数参照の要求をサポートするため、none パラメーターを許容するように拡張されました。

  • OpenMP* スレッド・アフィニティーの情報を提供するため、ランタイムルーチン [3.2.29、3.2.30、3.2.31、3.2.32] と環境変数 [5.13、5.14] が追加されました。

  • スレッドがどのデバイスで実行されているかを特定するため、omp_get_device_num ランタイムルーチン [3.2.36] が追加されました。

  • ファーストパーティーのツール・インターフェイス (OMPT) [4.2] が追加されました。

  • サードパーティーのツール・インターフェイス (OMPD) [4.3] のサポートが追加されました。

  • オフロード動作の制御をサポートするため、OMP_TARGET_OFFLOAD 環境変数が追加されました。[5.17]

関連記事

  • 現在と将来の OpenMP* API 仕様現在と将来の OpenMP* API 仕様 この記事は、インテルの The Parallel Universe Magazine 27 号に収録されている、OpenMP* 5.0 の機能を初めて紹介した章を抜粋翻訳したものです。 OpenMP* API には 20 […]
  • OpenMP 4.x による新しいレベルの並列化 2015年 12月に東京で開催されたインテル® ソフトウェア・カンファレンス Day 1 で、iSUS 編集長 すがわら きよふみが講演した内容を基に、2部にわけて「OpenMP* 4.x による新しいレベルの並列化」についてお届けします。Part 1 では、複数レベルの並列性を活用するための Code […]
  • ヘテロジニアス・コンピューティングのパイプライン化ヘテロジニアス・コンピューティングのパイプライン化 この記事は、インテル® デベロッパー・ゾーンに公開されている「Heterogeneous Computing Pipelining」の日本語参考訳です。 目次 はじめに インテル® Core™ プロセッサー・ファミリーおよびインテル® Atom™ […]
  • インテル® C++/Fortran コンパイラーによる OpenMP* 3.1 仕様のサポートインテル® C++/Fortran コンパイラーによる OpenMP* 3.1 仕様のサポート この記事は、インテル® ソフトウェア・ネットワークに掲載されている「Intel® C++ and Fortran Compilers now support the OpenMP* 3.1 Specification」の日本語参考訳です。 2011 年 7 月に OpenMP* 3.1 仕様 (英語) […]
  • インテル Parallel Universe 27 号日本語版の公開インテル Parallel Universe 27 号日本語版の公開 インテル Parallel Universe マガジンの最新号が公開されました。この号では、20 周年を迎える OpenMP* について取り上げます。また、新しいインテル® AVX-512 命令セットにより以前は不可能だったベクトル化を行う方法について紹介します。新しいインテル® Advisor […]