yohhoyの日記

技術的メモをしていきたい日記

OpenMP 5.0仕様リリース

2018年11月 OpenMP 5.0仕様リリース記事 OpenMP 5.0 Is A Major Leap Forward より抄訳。

OpenMP仕様バージョン5.0はOpenMP ARB、主要なコンピュータハードウェア/ソフトウェアベンダのグループ、そしてOpenMPコミュニティのユーザによって共同開発されました。いくつかの小さな改善に加えて、改訂仕様は下記の主要な機能追加を含みます:

  • アクセラレータデバイスのフルサポート。ホストシステムとコプロセッサバイス間の統合共有メモリ(unified shared memory)を必要とする機構、デバイス固有の機能実装を利用する能力、暗黙的データマッピングのより良い制御、実行時にデバイスオフロードを優先する能力を含むことで、OpenMPアクセラレータデバイスを完全にサポートします。さらに、オフロードの反転、暗黙の関数生成、オブジェクト指向データ構造を簡単にコピーする能力もサポートします。
  • デバッグ改善とパフォーマンス解析。新しい2種類のツールインタフェースにより、直感的なデバッグと深いパフォーマンス解析をサポートするサードパーティ製ツール開発が可能となります。
  • 最新のC, C++, Fortranバージョンサポート。いまやOpenMPFortran 2008、C11、C++17の重要な機能をサポートします。
  • 完全に記述的なloopコンストラクトのサポート。loopコンストラクトは、特定の処理系を強制することなく、コンパイラによるループ最適化を促します。このコンストラクトはコンパイラに対して、他のOpenMPディレクティブよりも特定ターゲット向けに良い実装を選択する自由度を与えます。*1
  • マルチレベル・メモリシステム。帯域幅メモリのように、データを異なる種類のメモリ上に配置するメモリ確保機構を利用できます。新しいOpenMP機能によって、NUMA的なモダンHPCシステムの扱いが容易になります。*2
  • ポータビリティの改善。declare variantディレクティブや新しいメタ・ディレクティブにより、プログラマコンパイル時にOpenMPプラグマとユーザコードを合わせることで、パフォーマンス・ポータビリティの向上が可能になります。*3

関連URL

*1:loopコンストラクト:OpenMP5.0で追加された汎用ループ並列化指示構文。

*2:ヘテロジニアス・メニーコアシステム向けのメモリ確保・解放関数が追加される。OpenMP標準規格では5種類のメモリ空間(デフォルト/大容量/定数プール/広帯域幅/低遅延)が事前定義される。

*3:特定のOpenMPコンテキスト(CPU/GPU/FPGAの別/アーキテクチャ/ベンダ情報など)向けに、実装を切り替える機能。