(Translated by https://www.hiragana.jp/)
OpenACC - Wikipedia コンテンツにスキップ

OpenACC

出典しゅってん: フリー百科ひゃっか事典じてん『ウィキペディア(Wikipedia)』
OpenACC
最新さいしんばん
3.3 / 2022ねん11月 (1ねんまえ) (2022-11)[1]
プログラミング
言語げんご
C, C++, Fortran
対応たいおうOS クロスプラットフォーム
プラットフォーム クロスプラットフォーム
種別しゅべつ API
公式こうしきサイト www.openacc.org
テンプレートを表示ひょうじ

OpenACC (open acceleratorsりゃく) は、クレイ、CAPS、NVIDIA、そしてPGIによって開発かいはつされた並列へいれつコンピューティングのための標準ひょうじゅんひとつである。この標準ひょうじゅんは、ヘテロジニアスCPU/GPUシステムの並列へいれつプログラミングを単純たんじゅんするために設計せっけいされた[2]

位置付いちづけとしては、CUDAOpenCLをさらに抽象ちゅうしょうしたものであり、OpenMP存在そんざいである。

OpenMPのようにプログラマーは、ディレクティブ追加ついか関数かんすう使つかって高速こうそくされるべき箇所かしょ識別しきべつするようにC言語げんごC++、そしてFORTRANソースコードえれば[3]。OpenMP 4.0 とよりあたらしいバージョンのようにOpenACCはCPUとGPUの両方りょうほう対象たいしょうにすることができ、それらのうえ計算けいさんコードを起動きどうすることができる。

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

2012ねん国際こくさいスーパーコンピューティング会議かいぎ(ISC’12)において、OpenACCは、NVIDIAAMD そして Intel のアクセラレーターじょう動作どうさすることを証明しょうめいしたが、性能せいのうデータは公表こうひょうされなかった[8]

2012ねん11月12にち、SC12(2012ねんスーパーコンピューティング会議かいぎ)において、OpenACCバージョン2.0の草案そうあん発表はっぴょうされた[9]あたらしく提案ていあんされた機能きのうは、データ移動いどうにおけるあたらしい制御せいぎょ構造こうぞうデータのあつかいの改善かいぜん不連続ふれんぞくメモリ対応たいおう改善かいぜんのような)、明示めいじてき関数かんすうし、そして分割ぶんかつコンパイル(高速こうそくコードライブラリの作成さくせいさい利用りよう可能かのうにする)という機能きのうふくんでいる。OpenACC 2.0は2013ねん1がつ公式こうしきにリリースされた[10]

仕様しようバージョン2.5は、2015ねん10がつにリリースされた[11]。バージョン2.6は、2017ねん11月にリリースされた[12] 。バージョン2.7は、2018ねん11月にリリースされた[13]

2019ねん4がつ3にちにジョン・レベック(クレイ中核ちゅうかく研究けんきゅう拠点きょてんクレイスーパーコンピューティングセンターの所長しょちょう)は、「クレイはCCE/9.0におけるOpenACCのサポートを終了しゅうりょうする」と発表はっぴょうした [14]

コンパイラのサポート

[編集へんしゅう]

OpenACCは、商用しょうようコンパイラとして利用りよう可能かのうである。PGI(コンパイラバージョン12.6から)とクレイ(同社どうしゃのハードウェアのみ)がサポートをおこなっている[8][15]

OpenUH[16]は、CとFORTRANをサポートしているOpen64英語えいごばん基盤きばんにしたオープンソースのOpenACCコンパイラである。ヒューストン大学だいがくのHPCToolsグループによって開発かいはつされた。

OpenARC[17]は、OpenACC 1.0仕様しようすべての機能きのうをサポートするためにオークリッジ国立こくりつ研究所けんきゅうじょ開発かいはつされたオープンソースのCコンパイラである。実験じっけんてき[18]オープンソースコンパイラaccULは、ラ・ラグーナ大学だいがくによって開発かいはつされている[19]

Omni Compiler[20][21]は、筑波大学つくばだいがくHPCS研究けんきゅうしつ理化学研究所りかがくけんきゅうしょ計算けいさん科学かがく研究けんきゅうセンターが共同きょうどう研究けんきゅうしているオープンソースのコンパイラである。OpenACCのほかXcalableMPおよびXcalableMPをOpenACCとわせたXcalableACCをサポートしている。

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

OpenACCにたいするGCCのサポートは、進捗しんちょくおそかった[23]。サムスンによるGPUを対象たいしょうにした実装じっそうは、2013ねん9がつ発表はっぴょうされた。この実装じっそうは、OpenACC 1.1のコードをOpenCL変換へんかんする[18]。2ヵ月かげつ、「しん」の実装じっそう発表はっぴょうがあった。今回こんかいはNVIDIAによるものであり、OpenACC 2.0にもとづいたものであった[24]。このことがいくつかの論争ろんそうこした。OpenACC 2.0の実装じっそうがNVIDIA独自どくじPTXアセンブリ言語げんごだけを対象たいしょうにしており、PTXのために利用りようできるオープンソースのアセンブラあるいはランタイムは存在そんざいしなかった[25][26] 。OpenACC/PTXにたいする実験じっけんてきサポートは、GCCのバージョン5.1の時点じてん終了しゅうりょうした。GCC6とGCC7は、OpenACC 2.0a仕様しようのより改良かいりょうされた実装じっそう搭載とうさいしている[27][28]。GCC 9.1は、OpenACC 2.5のサポートはほぼ完成かんせいしていると発表はっぴょうした[29]

使用しよう方法ほうほう

[編集へんしゅう]

対称たいしょうがた並列へいれつシステムにおけるOpenMP 3.x あるいは初期しょきOpenHMPP英語えいごばん使用しよう方法ほうほうであり、OpenACCにおけるプログラミングの主要しゅよう手段しゅだんはディレクティブである[30]。その仕様しようは、いくつかのサポート関数かんすう定義ていぎするランタイムライブラリふくんでいる。それらを利用りようするために利用りようしゃは、C言語げんごで"openacc.h"、あるいはFortranで"openacc_lib.h"をインクルードしなければならない[31]。そして、acc_init()関数かんすうす。

ディレクティブ

[編集へんしゅう]

OpenACCは、プラグマ(ディレクティブ)の幅広はばひろいリストを定義ていぎしている[32]たとえば、

 #pragma acc parallel
 #pragma acc kernels

別個べっこのセマンティクス(意味いみろん)をもちいて、うえの2ぎょうはアクセラレーターじょう実行じっこうされる並列へいれつ計算けいさんカーネル(ここでうカーネルはOSの中心ちゅうしんではなくて、アクセラレーターじょう実行じっこうされる計算けいさんプログラムのこと)を定義ていぎするために使つかわれる[33][34]

 #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. ^ The OpenACC® Application Programming Interface Version 3.3 | OpenACC-Standard.org
  2. ^ "Nvidia, Cray, PGI, and CAPS launch 'OpenACC' programming standard for parallel computing". The Inquirer. 4 November 2011. {{cite web}}: Cite webテンプレートでは|access-date=引数ひきすう必須ひっすです。 (説明せつめい)
  3. ^ "OpenACC standard version 2.5" (PDF). OpenACC.org. 2017ねん6がつ2にち閲覧えつらん
  4. ^ "How does the OpenACC API relate to the OpenMP API?". OpenACC.org. 2014ねん1がつ14にち閲覧えつらん
  5. ^ "How did the OpenACC specifications originate?". OpenACC.org. 2014ねん1がつ14にち閲覧えつらん
  6. ^ "The OpenMP Consortium Releases First Technical Report". OpenMP.org. 5 November 2012. 2014ねん1がつ14にち閲覧えつらん
  7. ^ "OpenMP at SC12". OpenMP.org. 29 August 2012. 2014ねん1がつ14にち閲覧えつらん
  8. ^ a b "OpenACC Group Reports Expanding Support for Accelerator Programming Standard". HPCwire. 20 June 2012. 2012ねん6がつ23にち時点じてんオリジナルよりアーカイブ。2014ねん1がつ14にち閲覧えつらん
  9. ^ "OpenACC Version 2.0 Posted for Comment". OpenACC.org. 12 November 2012. 2014ねん1がつ14にち閲覧えつらん
  10. ^ "OpenACC 2.0 Spec | www.openacc.org". www.openacc.org. 2016ねん4がつ4にち時点じてんオリジナルよりアーカイブ。2016ねん3がつ23にち閲覧えつらん
  11. ^ "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. 2016ねん7がつ26にち時点じてんオリジナルよりアーカイブ。2016ねん3がつ22にち閲覧えつらん
  12. ^ "What's new in OpenACC 2.6? | OpenACC". www.openacc.org (英語えいご). 2018ねん5がつ1にち閲覧えつらん
  13. ^ "What's new in OpenACC 2.7! | OpenACC". www.openacc.org (英語えいご). 2019ねん1がつ7にち閲覧えつらん
  14. ^ "Cray's views on #OpenACC vs #OpenMP". 2019ねん5がつ14にち閲覧えつらん
  15. ^ "OpenACC Standard to Help Developers to Take Advantage of GPU Compute Accelerators". Xbit laboratories. 16 November 2011. 2014ねん1がつ16にち時点じてんオリジナルよりアーカイブ。2014ねん1がつ14にち閲覧えつらん
  16. ^ "OpenUH Compiler". 2014ねん1がつ25にち時点じてんオリジナルよりアーカイブ。2014ねん3がつ4にち閲覧えつらん
  17. ^ "OpenARC Compiler". 2014ねん11月4にち閲覧えつらん
  18. ^ a b Larabel, Michael (30 September 2013). "GCC Support Published For OpenACC On The GPU". Phoronix. {{cite web}}: Cite webテンプレートでは|access-date=引数ひきすう必須ひっすです。 (説明せつめい)
  19. ^ "accULL The OpenACC research implementation". 2014ねん1がつ14にち閲覧えつらん
  20. ^ Omni Compiler”. omni-compiler.org. 2019ねん11月18にち閲覧えつらん
  21. ^ Omni Compiler for C and Fortran programs with XcalableMP and OpenACC directives: omni-compiler/omni-compiler, omni-compiler, (2019-10-17), https://github.com/omni-compiler/omni-compiler 2019ねん11月17にち閲覧えつらん 
  22. ^ "IPMACC Compiler". 2017ねん1がつ31にち閲覧えつらん
  23. ^ Larabel, Michael (4 December 2012). "OpenACC Still Not Loved By Open Compilers". Phoronix. {{cite web}}: Cite webテンプレートでは|access-date=引数ひきすう必須ひっすです。 (説明せつめい)
  24. ^ Larabel, Michael (14 November 2013). "OpenACC 2.0 With GPU Support Coming To GCC". Phoronix. {{cite web}}: Cite webテンプレートでは|access-date=引数ひきすう必須ひっすです。 (説明せつめい)
  25. ^ Larabel, Michael (15 November 2013). "NVIDIA, Mentor Graphics May Harm GCC". Phoronix. {{cite web}}: Cite webテンプレートでは|access-date=引数ひきすう必須ひっすです。 (説明せつめい)
  26. ^ Larabel, Michael (21 November 2013). "In-Fighting Continues Over OpenACC In GCC". Phoronix. {{cite web}}: Cite webテンプレートでは|access-date=引数ひきすう必須ひっすです。 (説明せつめい)
  27. ^ https://gcc.gnu.org/wiki/OpenACC
  28. ^ Schwinge, Thomas (15 January 2015). "Merge current set of OpenACC changes from gomp-4_0-branch". gcc (Mailing list). gcc.gnu.org. 2015ねん1がつ15にち閲覧えつらん
  29. ^ Jelinek, Jakub (3 May 2019). "GCC 9.1 Released". LWN. {{cite web}}: Cite webテンプレートでは|access-date=引数ひきすう必須ひっすです。 (説明せつめい)
  30. ^ "Easy GPU Parallelism with OpenACC". Dr.Dobb's. 11 June 2012. 2014ねん1がつ14にち閲覧えつらん
  31. ^ "OpenACC API QuickReference Card, version 1.0" (PDF). NVidia. November 2011. 2014ねん1がつ14にち閲覧えつらん
  32. ^ "OpenACC standard version 2.0" (PDF). OpenACC.org. 2014ねん1がつ14にち閲覧えつらん
  33. ^ "OpenACC Kernels and Parallel Constructs". PGI insider. August 2012. 2014ねん1がつ14にち閲覧えつらん
  34. ^ "OpenACC parallel section VS kernels". CAPS entreprise Knowledge Base. 3 January 2013. 2014ねん1がつ16にち時点じてんオリジナルよりアーカイブ。2014ねん1がつ14にち閲覧えつらん

外部がいぶリンク

[編集へんしゅう]