6

私は、CPUだけでなくGPUアクセラレーションの新しいプログラミング標準であるOpenACCを初めて使用します。私の知る限り、OpenACCはコンパイラ指令である言語であるため、コード全体を変更することなく、コードをどこでも直接高速化できます。このプログラミング標準は、OpenMPとは異なりGPUでも機能します。

今、私の疑問がここに浮かび上がります。

アクセラレーション用のOpenCL、現在はOpenACC(コンパイラのヒントを与えるだけで非常に使いやすい)があります。ホストプログラムのアクセラレーションの場合、コンパイラ指令を簡単に配置できます。カーネルがある場合はどうでしょうか。つまり、GPU(c-language)のコードを書きたいのですが、どうすればよいですか?OpenCLのように、example.cとexample.clを書く必要がありますか?次に、OpenACCコンパイラ指令を追加する必要がありますか?または他の方法で?もしそうなら、ここでのOpenACCの使用法は何ですか?*。cファイルと* .clファイルの両方を書き込んでいます(すべてのメモリ制約とOpenCLを書き込むためのすべてをチェックする必要があります。これは大変な作業です)。

4

4 に答える 4

8

実際、OpenACCはOpenMPによく似ていますが、GPUなどのアクセラレーションデバイスを対象としています。#pragma parallel forマルチスレッドCPUのループを並列化するOpenMPを使用する代わりに、OpenACC#pragma acc kernelsは、含まれているループをGPUで実行されるカーネル関数に変換します。現在手動で行わなければならないことの多く(たとえば、デバイスとの間でデータを転送すること)は、コンパイラーによって隠されています。したがって、2つの別個のコンパイルユニットはありません。

これがOpenACCの問題であり、なぜ今採用されているのかという私の答えは非常に低いです。GCCやClangからのサポートはありません。もちろん、PGIとCAPSからの商用ソリューションがありますが、これらの他のコンパイラがないと、多くのユーザーを遠ざけることになります。

于 2013-01-31T11:02:30.470 に答える
3

更新:gcc6の一部が機能するようになりました:

「GCC6リリースシリーズには、OpenACC2.0a仕様の大幅に改善された実装が含まれています。」

https://gcc.gnu.org/wiki/OpenACCを参照してください

于 2017-01-11T15:58:28.090 に答える
3

更新(2020年8月):

于 2020-08-09T03:46:32.277 に答える
2

更新:GCC6+7はOpenACC仕様を積極的に統合しています

https://gcc.gnu.org/wiki/OpenACCを参照してください

于 2017-08-23T09:28:46.017 に答える