OpenACC

出典: フリー百科事典『ウィキペディア(Wikipedia)』
ナビゲーションに移動 検索に移動
OpenACC
最新版 2.7 / November 2018
プログラミング言語 C, C++, and Fortran
対応OS クロスプラットフォーム
プラットフォーム クロスプラットフォーム
種別 API
公式サイト www.openacc.org
テンプレートを表示

OpenACC (open acceleratorsの略) は、クレイ、CAPS、NVIDIA、そしてPGIによって開発された並列コンピューティングのための標準の一つである。この標準は、ヘテロジニアスCPU/GPUシステムの並列プログラミングを単純化するために設計された[1]

位置付けとしては、CUDAOpenCLをさらに抽象化したものであり、OpenMPと似た存在である。

OpenMPのようにプログラマーは、ディレクティブと追加関数を使って高速化されるべき箇所を識別するようにC言語C++、そしてFORTRANソースコードを書き換えれば良い[2]。OpenMP 4.0 とより新しいバージョンのようにOpenACCはCPUGPUの両方を対象にすることができ、それらの上で計算コードを起動することができる。

OpenACCの会員は、OpenMPの将来のリリースで動作する予定のアクセラレーター(GPUやコプロセッサなど)に対応したり、OpenMPを拡張する共通仕様を作成したり、OpenMPの仕様に合わせるためにOpenMP標準化グループの会員として働いてきた[3][4]。これらの活動は、ある技術報告書としてまとめられている[5]。この報告書のコメントと議論は、年次スーパーコンピューティング会議(2012年11月、ソルトレイクシティ)に時期を合わせるだけでなく、Nvidia以外のアクセラレーターがOpenMPに参加しているハードウェアベンダーの意見をサポートするという表明にも時期を合わせている[6]

2012年の国際スーパーコンピューティング会議(ISC’12)において、OpenACCは、NvidiaAMD そして Intel のアクセラレーター上で動作することを証明したが、性能データは公表されなかった[7]

2012年11月12日、SC12(2012年のスーパーコンピューティング会議)において、OpenACCバージョン2.0の草案が発表された[8] 。 新しく提案された機能は、データ移動における新しい制御(非構造化データの取り扱いの改善と不連続メモリ対応の改善のような)、明示的な関数呼び出し、そして分割コンパイル(高速化コードライブラリの作成と再利用を可能にする)という機能を含んでいる。OpenACC 2.0は2013年1月に公式にリリースされた[9]

仕様バージョン2.5は、2015年10月にリリースされた[10]。バージョン2.6は、2017年11月にリリースされた[11] 。最新仕様バージョン2.7は、2018年11月にリリースされた[12]

2019年4月3日にジョン・レベック(クレイの中核研究拠点クレイスーパーコンピューティングセンターの所長)は、「クレイはCCE/9.0におけるOpenACCのサポートを終了する」と発表した [13]

コンパイラのサポート[編集]

OpenACCは、商用コンパイラとして利用可能である。PGI(コンパイラバージョン12.6から)とクレイ(同社のハードウェアのみ)がサポートを行っている[7][14]

OpenUH[15]は、CとFORTRANをサポートしているOpen64英語版を基盤にしたオープンソースのOpenACCコンパイラである。ヒューストン大学のHPCToolsグループによって開発された。

OpenARC[16]は、OpenACC 1.0仕様の全ての機能をサポートするためにオークリッジ国立研究所で開発されたオープンソースのCコンパイラである。実験的な[17]オープンソースコンパイラaccULは、ラ・ラグーナ大学によって開発されている[18]

IPMACC[19]は、ビクトリア大学 (カナダ)によって開発されたオープンソースのCコンパイラである。IPMACCは、OpenACCをCUDA、OpenCL、そしてISPCへ変換する。現在のところ、次のディレクティブのみがサポートされている。つまり、data, kernels, loop, そして cache である。

OpenACCに対するGCCのサポートは、進捗が遅かった[20]。サムスンによるGPUを対象にした実装は、2013年9月に発表された。この実装は、OpenACC 1.1のコードをOpenCLへ変換する[17]。2ヵ月後、「真」の実装の発表があった。今回はNVIDIAによるものであり、OpenACC 2.0に基づいたものであった[21]。このことがいくつかの論争を引き起こした。OpenACC 2.0の実装がNVIDIA独自のPTXアセンブリ言語だけを対象にしており、PTXのために利用できるオープンソースのアセンブラあるいはランタイムは存在しなかった[22][23] 。OpenACC/PTXに対する実験的サポートは、GCCのバージョン5.1の時点で終了した。GCC6とGCC7は、OpenACC 2.0a仕様のより改良された実装を搭載している[24][25]。GCC 9.1は、OpenACC 2.5のサポートはほぼ完成していると発表した[26]

使用方法[編集]

対称型並列システムにおけるOpenMP 3.x あるいは初期のOpenHMPP英語版に似た使用方法であり、OpenACCにおけるプログラミングの主要な手段はディレクティブである[27]。その仕様は、いくつかのサポート関数を定義するランタイムライブラリも含んでいる。それらを利用するために利用者は、C言語で"openacc.h"、あるいはFortranで"openacc_lib.h"をインクルードしなければならない[28]。そして、acc_init()関数を呼び出す。

ディレクティブ[編集]

OpenACCは、プラグマ(ディレクティブ)の幅広いリストを定義している[29]。例えば、

 #pragma acc parallel
 #pragma acc kernels

別個のセマンティクス(意味論)を用いて、上の2行はアクセラレーター上で実行される並列な計算カーネル(ここで言うカーネルはOSの中心部ではなくて、アクセラレーター上で実行される計算プログラムのこと)を定義するために使われる[30][31]

 #pragma acc data

上はアクセラレーターと行き来するデータを定義したり、コピーしたりするための主要なディレクティブである。

 #pragma acc loop

上は parallel あるいは kernels の領域において並列性の形式を定義するために使われる。

 #pragma acc cache
 #pragma acc update
 #pragma acc declare
 #pragma acc wait

ランタイム API[編集]

いくつかのランタイムAPI関数も定義されている。つまり、acc_get_num_devices(), acc_set_device_type(), acc_get_device_type(), acc_set_device_num(), acc_get_device_num(), acc_async_test(), acc_async_test_all(), acc_async_wait(), acc_async_wait_all(), acc_init(), acc_shutdown(), acc_on_device(), acc_malloc(), acc_free() のことである。

通常、OpenACCは、ターゲットデバイスのために作業組織を処理するが、作業組織はgangとworkerを使って再定義されることもある。gangは複数のworkerから構成され、多くの処理要素を操作する(OpenCLのworkgroupに相当)。

関連項目[編集]

出典[編集]

  1. ^ "Nvidia, Cray, PGI, and CAPS launch 'OpenACC' programming standard for parallel computing". The Inquirer. 4 November 2011.
  2. ^ "OpenACC standard version 2.5" (PDF). OpenACC.org. Retrieved 2 June 2017.
  3. ^ "How does the OpenACC API relate to the OpenMP API?". OpenACC.org. Retrieved 14 January 2014.
  4. ^ "How did the OpenACC specifications originate?". OpenACC.org. Retrieved 14 January 2014.
  5. ^ "The OpenMP Consortium Releases First Technical Report". OpenMP.org. 5 November 2012. Retrieved 14 January 2014.
  6. ^ "OpenMP at SC12". OpenMP.org. 29 August 2012. Retrieved 14 January 2014.
  7. ^ a b "OpenACC Group Reports Expanding Support for Accelerator Programming Standard". HPCwire. 20 June 2012. Archived from the original on 23 June 2012. Retrieved 14 January 2014.
  8. ^ "OpenACC Version 2.0 Posted for Comment". OpenACC.org. 12 November 2012. Retrieved 14 January 2014.
  9. ^ "OpenACC 2.0 Spec | www.openacc.org". www.openacc.org. Archived from the original on 2016-04-04. Retrieved 2016-03-23.
  10. ^ "OpenACC Standards Group Announces Release of the 2.5 Specification; Member Vendors Add Support for ARM & x86 as Parallel Devices | www.openacc.org". www.openacc.org. Archived from the original on 2016-07-26. Retrieved 2016-03-22. line feed character in |title= at position 69 (help)
  11. ^ "What's new in OpenACC 2.6? | OpenACC". www.openacc.org (in English). Retrieved 2018-05-01.
  12. ^ "What's new in OpenACC 2.7! | OpenACC". www.openacc.org (in English). Retrieved 2019-01-07.
  13. ^ "Cray's views on #OpenACC vs #OpenMP". Retrieved 14 May 2019.
  14. ^ "OpenACC Standard to Help Developers to Take Advantage of GPU Compute Accelerators". Xbit laboratories. 16 November 2011. Archived from the original on 16 January 2014. Retrieved 14 January 2014.
  15. ^ "OpenUH Compiler". Archived from the original on 25 January 2014. Retrieved 4 March 2014.
  16. ^ "OpenARC Compiler". Retrieved 4 November 2014.
  17. ^ a b Larabel, Michael (30 September 2013). "GCC Support Published For OpenACC On The GPU". Phoronix.
  18. ^ "accULL The OpenACC research implementation". Retrieved 14 January 2014.
  19. ^ "IPMACC Compiler". Retrieved 31 January 2017.
  20. ^ Larabel, Michael (4 December 2012). "OpenACC Still Not Loved By Open Compilers". Phoronix.
  21. ^ Larabel, Michael (14 November 2013). "OpenACC 2.0 With GPU Support Coming To GCC". Phoronix.
  22. ^ Larabel, Michael (15 November 2013). "NVIDIA, Mentor Graphics May Harm GCC". Phoronix.
  23. ^ Larabel, Michael (21 November 2013). "In-Fighting Continues Over OpenACC In GCC". Phoronix.
  24. ^ https://gcc.gnu.org/wiki/OpenACC
  25. ^ Schwinge, Thomas (2015年1月15日). “Merge current set of OpenACC changes from gomp-4_0-branch”. gcc mailing list.. https://gcc.gnu.org/ml/gcc-patches/2015-01/msg01258.html 2015年1月15日閲覧。 
  26. ^ Jelinek, Jakub (3 May 2019). "GCC 9.1 Released". LWN.
  27. ^ "Easy GPU Parallelism with OpenACC". Dr.Dobb's. 11 June 2012. Retrieved 14 January 2014.
  28. ^ "OpenACC API QuickReference Card, version 1.0" (PDF). NVidia. November 2011. Retrieved 14 January 2014.
  29. ^ "OpenACC standard version 2.0" (PDF). OpenACC.org. Retrieved 14 January 2014.
  30. ^ "OpenACC Kernels and Parallel Constructs". PGI insider. August 2012. Retrieved 14 January 2014.
  31. ^ "OpenACC parallel section VS kernels". CAPS entreprise Knowledge Base. 3 January 2013. Archived from the original on 16 January 2014. Retrieved 14 January 2014.

外部リンク[編集]