| 開発者 | OpenACC 組織 |
|---|---|
| 安定リリース | 3.2 / 2021年11月 |
| 書かれた | C、C++、Fortran |
| オペレーティング·システム | クロスプラットフォーム |
| プラットフォーム | クロスプラットフォーム |
| タイプ | 翻訳 |
| Webサイト | オープンアック |
OpenACC(オープンアクセラレータ)は、 Cray、CAPS、Nvidia、PGIによって開発された並列コンピューティングのプログラミング標準です。この標準は、異種CPU / GPUシステムの並列プログラミングを簡素化するように設計されています。[1]
OpenMPと同様に、プログラマーはC、C++、Fortranの ソースコードに注釈を付けて、コンパイラーディレクティブと追加関数を使用して高速化する必要がある領域を特定できます。[2] OpenMP 4.0以降と同様に、OpenACCはCPUとGPUの両方のアーキテクチャを対象とし、それらの上で計算コードを起動できます。
OpenACCのメンバーは、OpenMP標準グループのメンバーとして、OpenMPの将来のリリースでアクセラレータをサポートするためにOpenMPを拡張する共通仕様を作成するためにOpenMP仕様に統合する作業を行ってきました。[3] [4]これらの取り組みの結果、コメントと議論のための技術レポート[5]が作成され、毎年恒例のスーパーコンピューティングカンファレンス(2012年11月、ソルトレイクシティ)に合わせて、OpenMPに参加しているハードウェアベンダーからの意見を取り入れながらNvidia以外のアクセラレータのサポートに対処しました。[6]
ISC'12では、OpenACCがNvidia、AMD、Intelのアクセラレータで動作することがパフォーマンスデータなしで実証されました。[7]
2012年11月12日、SC12会議でOpenACCバージョン2.0仕様の草案が発表されました。[8]提案された新しい機能には、データ移動に対する新しい制御(非構造化データの処理の改善や非連続メモリのサポートの改善など)、明示的な関数呼び出しと個別のコンパイルのサポート(高速化されたコードのライブラリの作成と再利用を可能にする)が含まれます。OpenACC 2.0は2013年6月に正式にリリースされました。[9]
仕様のバージョン2.5は2015年10月にリリースされ、[10]バージョン2.6は2017年11月にリリースされました。 [ 11]その後、バージョン2.7は2018年11月にリリースされました。[12]
最新バージョンはバージョン3.2で、2021年11月にリリースされました。[13]
コンパイラサポート
OpenACCのサポートは、PGI(バージョン12.6以降)およびCray(Crayハードウェアのみ)の商用コンパイラで利用できます。[7] [14]
OpenUH [15]は、ヒューストン大学のHPCToolsグループによって開発された、CとFORTRANをサポートするOpen64ベースのオープンソースOpenACCコンパイラです。
OpenARC [16]は、オークリッジ国立研究所で開発されたオープンソースのCコンパイラであり、OpenACC 1.0仕様のすべての機能をサポートしています。実験的な[17]オープンソースコンパイラaccULLは、ララグーナ大学で開発されています(C言語のみ)。[18]
Omni Compiler [19] [20]は、筑波大学HPCS研究室で開発されたオープンソースコンパイラです。理化学研究所計算科学研究センタープログラミング環境研究チームは、OpenACC、XcalableMP [ ja 、およびXcalableMPとOpenACCを組み合わせたXcalableACC をサポートしました。
IPMACC [21]はビクトリア大学が開発したオープンソースのCコンパイラで、OpenACCをCUDA、OpenCL、ISPCに変換します。現在はdata、kernels、loop、cacheディレクティブのみがサポートされています。
GCCの OpenACC サポートは遅々として進まなかった。[22] Samsung による GPU ターゲット実装は 2013 年 9 月に発表された。これは OpenACC 1.1 注釈付きコードをOpenCLに変換したものだ。[17] 2 か月後には NVIDIA による「本物の」実装の発表があり、OpenACC 2.0 がベースとなった。[23]この実装は NVIDIA 独自のPTXアセンブリ言語のみを対象としており、オープンソースのアセンブラやランタイムは利用できなかったため、論争を巻き起こした。[24] [25] OpenACC/PTX の実験的なサポートは、バージョン 5.1 の時点で GCC に導入された。GCC6 および GCC7 リリース シリーズには、OpenACC 2.0a 仕様の大幅に改善された実装が含まれている。[26] [27] GCC 9.1 はほぼ完全な OpenACC 2.5 サポートを提供している。[28]
使用法
同種システム上のOpenMP 3.xや以前のOpenHMPPと同様に、OpenACCにおけるプログラミングの主なモードはディレクティブです。[29]仕様には、いくつかのサポート関数を定義するランタイムライブラリも含まれています。それらを利用するには、ユーザーはCで「openacc.h」、Fortranで「openacc_lib.h」をインクルードする必要があります。[30]次にacc_init()関数を呼び出します。
指令
OpenACCは、プラグマ(ディレクティブ)の広範なリストを定義しています。[31]たとえば、次のようになります。
#pragma acc 並列
#pragma acc カーネル
どちらも、異なるセマンティクスを使用して、アクセラレータ上で実行される並列計算カーネルを定義するために使用されます[32] [33]
#pragma acc データ
アクセラレータとの間でデータを定義およびコピーするための主なディレクティブです。
#pragma acc ループ
parallelまたは領域内の並列処理のタイプを定義するために使用されますkernels。
#pragma acc キャッシュ
#pragma acc 更新
#pragma acc 宣言
#pragma acc 待機
ランタイム 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 は一般にターゲット デバイスの作業編成を担当しますが、ギャングとワーカーの使用によってこれをオーバーライドできます。ギャングはワーカーで構成され、複数の処理要素 (OpenCL のワークグループと同様) で動作します。
参照
参考文献
- ^ 「Nvidia、Cray、PGI、CAPSが並列コンピューティング向けプログラミング標準「OpenACC」を発表」The Inquirer 2011年11月4日。2011年11月17日時点のオリジナルよりアーカイブ。
{{cite web}}: CS1 メンテナンス: 不適切 URL (リンク) - ^ 「OpenACC 標準バージョン 2.5」(PDF) . OpenACC.org . 2017 年6 月 2 日閲覧。
- ^ 「OpenACC API は OpenMP API とどのように関係していますか?」OpenACC.org 。2014年1 月 14 日閲覧。
- ^ 「OpenACC 仕様はどのようにして生まれたのか?」OpenACC.org 。2014 年1 月 14 日閲覧。
- ^ 「OpenMPコンソーシアムが最初の技術レポートを発表」OpenMP.org 2012年11月5日2014年1月14日閲覧。
- ^ 「SC12でのOpenMP」OpenMP.org 2012年8月29日2014年1月14日閲覧。
- ^ ab 「OpenACC グループ、アクセラレータ プログラミング標準のサポート拡大を報告」HPCwire 2012 年 6 月 20 日。2012 年 6 月 23 日時点のオリジナルよりアーカイブ。2014年1 月 14 日閲覧。
- ^ 「OpenACC バージョン 2.0 がコメント募集中」OpenACC.org 2012 年 11 月 12 日2014 年1 月 14 日閲覧。
- ^ "OpenACC 2.0 Spec | www.openacc.org". www.openacc.org . 2016年4月4日時点のオリジナルよりアーカイブ。2016年3月23日閲覧。
- ^ 「OpenACC Standards Group が 2.5 仕様のリリースを発表。メンバーベンダーが ARM および x86 を並列デバイスとしてサポート | www.openacc.org」。www.openacc.org。2016年 7 月 26 日時点のオリジナルよりアーカイブ。2016 年 3 月 22 日閲覧。
- ^ 「OpenACC 2.6 の新機能 | OpenACC」www.openacc.org . 2018 年 5 月 1 日閲覧。
- ^ 「OpenACC 2.7の新機能 | OpenACC」www.openacc.org . 2019年1月7日閲覧。
- ^ 「OpenACC©アプリケーションプログラミングインターフェース」(PDF) 。OpenACC。 2021年9月。 2022年12月29日時点のオリジナルよりアーカイブ(PDF) 。 2023年12月13日閲覧。
- ^ 「OpenACC 標準により開発者は GPU コンピューティング アクセラレータを活用できるようになる」Xbit ラボラトリーズ2011 年 11 月 16 日。2014 年 1 月 16 日時点のオリジナルよりアーカイブ。2014年1 月 14 日閲覧。
- ^ “OpenUH Compiler”. 2014年1月25日時点のオリジナルよりアーカイブ。2014年3月4日閲覧。
- ^ 「OpenARC コンパイラ」 。2014年11 月 4 日閲覧。
- ^ ab Larabel, Michael (2013 年 9 月 30 日). 「GPU 上の OpenACC に対する GCC サポートが公開されました」. Phoronix .
- ^ 「accULL OpenACC 研究実装」 。2014年1 月 14 日閲覧。
- ^ 「Omni Compiler」. omni-compiler.org . 2019年11月18日閲覧。
- ^ XcalableMP および OpenACC ディレクティブを使用した C および Fortran プログラム用の Omni コンパイラ: omni-compiler/omni-compiler、omni-compiler、2019-10-17、2019-11-17取得
- ^ 「IPMACC コンパイラ」。GitHub。2017年1 月 31 日閲覧。
- ^ Larabel, Michael (2012 年 12 月 4 日)。「OpenACC は依然としてオープン コンパイラに好かれていない」。Phoronix。
- ^ Larabel, Michael (2013 年 11 月 14 日). 「GPU サポートを備えた OpenACC 2.0 が GCC に登場」. Phoronix .
- ^ Larabel, Michael (2013 年 11 月 15 日). 「NVIDIA、Mentor Graphics が GCC に悪影響を及ぼす可能性」. Phoronix .
- ^ Larabel, Michael (2013 年 11 月 21 日). 「GCC における OpenACC をめぐる内紛が続く」. Phoronix .
- ^ 「OpenACC - GCC Wiki」。
- ^ Schwinge, Thomas (2015 年 1 月 15 日). 「gomp-4_0-branch からの OpenACC の変更の現在のセットをマージ」。gcc (メーリング リスト) 。2015 年1 月 15 日閲覧。
{{cite mailing list}}:不明なパラメータ|agency=は無視されました (ヘルプ) - ^ Jelinek, Jakub (2019 年 5 月 3 日). 「GCC 9.1 リリース」. LWN.net .
- ^ 「OpenACC による簡単な GPU 並列処理」。Dr.Dobb 's。2012 年 6 月 11 日。2014 年1 月 14 日閲覧。
- ^ 「 OpenACC API クイックリファレンス カード、バージョン 1.0」(PDF)。NVidia。2011年 11 月。2014 年1 月 14 日閲覧。
- ^ 「OpenACC 標準バージョン 2.0」(PDF) . OpenACC.org . 2014 年1 月 14 日閲覧。
- ^ 「OpenACC カーネルと並列コンストラクト」。PGIインサイダー。2012 年 8 月。2014 年1 月 14 日閲覧。
- ^ 「OpenACC 並列セクション VS カーネル」。CAPS entreprise ナレッジベース。2013 年 1 月 3 日。2014 年 1 月 16 日時点のオリジナルよりアーカイブ。2014年1 月 14 日閲覧。
外部リンク
- ホームページ | OpenACC
- Nvidia の使用例: パート 1、パート 2
- OpenACC-standard.org: OpenACC プログラミングおよびベスト プラクティス ガイド (2015 年 6 月)
- Nvidia: PGI コンパイラとツール OpenACC 入門ガイド (2018)。
- Stéphane Ethier: OpenACC を使用した GPU プログラミング入門、Research Computing Bootcamp (2019 年 11 月 1 日)
- OpenACC-standard.org: OpenACC 完全ガイド (2021 年 5 月)
- Olga Abramkina、Rémy Dubois、Thibaut Véry: GPU 向け OpenACC: 入門 (2023 年 6 月 2 日)
