yohhoyの日記

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

OpenMP 4.5仕様リリース

2015年11月 OpenMP 4.5仕様リリース記事 OpenMP 4.5 Specs Released より抄訳。

たくさんの新機能

  • バイスサポートの大幅な改善。OpenMPは非構造化データマッピングと非同期実行のメカニズム、またデバイスメモリ管理のための実行ルーチンを提供するようになりました。これらのルーチンによりメモリ確保、メモリコピーやメモリ解放が可能になります。
  • doacrossループのサポート。構造的な依存性をもつループを並列化するメカニズムが提供されます。*1
  • 新しいtaskloopコンストラクト。ループからタスクへの分割をサポートし、全てのスレッドでループを実行する要件を回避します。*2
  • C/C++配列のリダクション演算。配列セクション(array section)のサポートにより、要望が多かった機能がついに有効になりました。*3
  • 新しいヒント・メカニズム。ヒント・メカニズムにより、タスクの相対優先度や同期方式の好ましい実装ガイダンス*4を提供できるようになりました。
  • スレッド・アフィニティのサポート。スレッド・アフィニティ節の効果を決定する実行時関数が使えるようになりました。
  • Fortran 2003サポートの改善。ユーザは多くのFortran 2003プログラムを並列化できるようになりました。
  • SIMD拡張。厳密なSIMD幅や追加のデータ共有属性を指定できる拡張を含みます。

関連URL

*1:doacrossループ: ループ運搬依存を含むループ。あるイテレーションでの処理が、他のイテレーションでの演算結果に依存するようなループのこと。

*2:従来のループ・コンストラクト(for)はワークシェアリング・コンストラクトの一種であり、OpenMPタスク(task)スケジューラとの親和性があまり良くなかった?

*3:array section: 一部のOpenMPコンストラクトでのみ使える、部分配列を表現する言語拡張。配列型 a に対して a[1:5], a[1:], a[:5], a[:] といった拡張構文が追加される。(この例では下限インデクスに1を、部分配列長に5を指定している)

*4:critical コンストラクトとロック omp_lock_t, omp_nest_lock_t の実装に対してヒントを指定する。OpenMP 4.5現在はロック競合頻度(uncontended/contended)、投機的ロック(nonspeculative/speculative)に関するヒントを指定できる。後者はハードウェアサポートによるトランザクショナル・メモリ実装を想定している(→id:yohhoy:20140702