問題タブ [openacc]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
kernel - OpenCL上でOpenACCを使用しますか?
私は、CPUだけでなくGPUアクセラレーションの新しいプログラミング標準であるOpenACCを初めて使用します。私の知る限り、OpenACCはコンパイラ指令である言語であるため、コード全体を変更することなく、コードをどこでも直接高速化できます。このプログラミング標準は、OpenMPとは異なりGPUでも機能します。
今、私の疑問がここに浮かび上がります。
アクセラレーション用のOpenCL、現在はOpenACC(コンパイラのヒントを与えるだけで非常に使いやすい)があります。ホストプログラムのアクセラレーションの場合、コンパイラ指令を簡単に配置できます。カーネルがある場合はどうでしょうか。つまり、GPU(c-language)のコードを書きたいのですが、どうすればよいですか?OpenCLのように、example.cとexample.clを書く必要がありますか?次に、OpenACCコンパイラ指令を追加する必要がありますか?または他の方法で?もしそうなら、ここでのOpenACCの使用法は何ですか?*。cファイルと* .clファイルの両方を書き込んでいます(すべてのメモリ制約とOpenCLを書き込むためのすべてをチェックする必要があります。これは大変な作業です)。
openacc - create 句と pcreate 句にホスト データを割り当てる必要がありますか?
私は現在 を研究していopenacc API
ます。ホスト上に対応する割り当て配列がなくても、デバイス上に配列を作成できるかどうか疑問に思っていました。
cuda kernel
古いを使いたいとしましょうopenacc API
。 . デバイスでのみ使用される 256 要素の配列が必要です。割り当てなしでホスト上でポインターのみを宣言すると、それらは連続したアドレスを持つ可能性があります。
present_or_create
サイズが 256 要素のこれらのポインターに句を使用した場合、デバイス上で個別の配列で終了しますか? または、ホスト上の連続するアドレスは、配列の長さと相まって、同じ配列の一部と見なされますか?
次に例を示します。ポインタ A のアドレスは 0、ポインタ B のアドレスは 4 です。
と で2 つ実行pcreate
するA[0:256]
とB[0:256]
、ホスト上のデータの範囲は と[0 , 1024]
になるため[4 , 1028]
、256 要素の 2 つの異なる配列を持つデバイスになりますか、それとも range を持つ 1 つの配列だけになります[0 , 1028]
か?
2 つの異なる配列を確保するために、最初に 2 つの配列をホストに割り当てる必要がありますか?それとも、この方法で問題なく動作するはずですか?
openmp - openAcc : openMP に THREADPRIVATE に対応するディレクティブはありますか
openMp プログラムを openAcc プログラムに変換しようとしています。
parallel-processing - OpenAcc : 関数呼び出しを並列化する方法
私はプロジェクトに取り組んでおり、アプリケーションを並列化しようとしています。並列化しようとしている関数がいくつかありますが、問題は、これらの関数が他の関数を頻繁に呼び出すことです。ループは計算専用であり、1 つの関数本体に多くのループがあります。私は OpenACC がそのディレクティブ内で関数呼び出し (インライン呼び出しのみ) をサポートしていないことを知っています。そのままにしておくだけです)(すべての関数本体でこれを行います)b)または、呼び出された関数本体を呼び出し元の関数内に配置すると、acc ディレクティブに入るときにスレッド作成のオーバーヘッドが複数回最小化されます( 1 つのブロックに多数のループを含む)。
そのようなシナリオを処理する方法がわかりません。
要約すると、OpenACC で関数呼び出しを並列化する効率的な方法を見つける必要があります。
gpu - OpenACC は math.h ライブラリを使用します
こんにちは、CAPS OpenACC コンパイラを使用していましたが、コンパイラは関数を標準の math.h にリンクできないようです。
実際、私の場合、加速ループ内のコードで sqrt 関数が使用されています。コードをコンパイルすると、以下のエラーがスローされます。
誰かがいくつかの解決策を得ますか?
ありがとう!
gpu - openAccプロファイリング方法
こんにちは私はCAPSOpenACCコンパイラを使用していましたが、予備的なプロファイル結果を取得しようとすると、何か問題が発生します。
最初に、HMPPRT_LOG_LEVEL = "info"を宣言してコードを実行しました。これにより、タイムスタンプ付きのプロファイル結果が生成されます。
したがって、カーネルの実行時間は2.614367-2.613485=0.000882秒として計算されると思います。
しかし、CUDA_PROFILE = 1を宣言すると、以下のプロファイルが表示されます
だから私はこれらの2つの結果についてかなり混乱しています、それは本当ですか?
誰かがいくつかの解決策を手に入れますか?
ありがとう!
openacc - 作成後の pcopyin
ネストされたデータ環境でのこれら 2 つの句の動作を明確にするために、この質問をお願いします。
初めて openACC API を読んだとき、次のコードがあればと思いました。
最初の句で必要なメモリがアクセラレータに割り当てられ、次にpcopyin
句でデータがホストからアクセラレータに (割り当てなしで) コピーされました。
th API の v2 のドラフトを読んでいるとpcopyin
、データがアクセラレータに既に割り当てられているため、2 番目の句はまったく何もしないことがわかります。また、データはアクセラレータに既に存在するため、割り当ても転送も行われません。 . そうですか?
この種の例で CAPS コンパイラをテストしたところ、期待どおりの動作が得られたと思います。API のあいまいさが原因でしたか? v2 で、このようなことをしたい場合、copyin 句を更新で置き換える必要がありますか?
cuda - openACC: メモリ管理
caps openacc コンパイラを使用しています。自分でメモリを管理できるのだろうか?
たとえば、CUDA を使用した通常の openacc コードは次のとおりです。
こんな風に変化してほしい