問題タブ [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.
openacc - 同じ配列の異なるサブパーツを持つネストされたデータ環境
これがopenaccに関する私の質問です。API (v1 および v2) を読みましたが、同じ配列の異なるサブパートを持つネストされたデータ環境の動作がわかりません。
コード例:
私の理解では、これは機能するはずです(または少なくとも2つのaccデータ部分):
- 最初のプラグマは、a[0,20] がアクセラレータ上にあるかどうかをチェックします
- NO -> データはデバイスに割り当てられ、転送されます
- 2 番目のプラグマは、a[100,120] がアクセラレータ上にあるかどうかをチェックします
- ポインタ a はアクセラレータ上にありますが、a[100,120] からのデータではありません
- データはデバイスに割り当てられ、転送されます
この種のことを CAPS コンパイラ (テスト マシンで現在のみ利用可能な v3.3.0) で試しましたが、2 番目の pragma acc data がエラーを返しました (2 番目のサブ配列の形状が正しくありません)。したがって、私のテストで何が起こるか (おそらく) は、ポインター "a" がアクセラレーターで見つかりましたが、それに関連付けられた形状 ([0:20]) は、2 番目のプラグマ ([100:20]) と同じではありません。 )。
これは API で計画されている通常の動作ですか、それとも私の例は機能するはずですか?
さらに、これが機能する場合、同じ配列のサブパーツ間に何らかの一貫性がありますか (どういうわけか、それらはホストのように配置され、a[i] += a[100+ を配置できます) i]私のカーネルで)?
cublas - CUBLAS を OpenACC で使用することはできますか?
OpenACC ディレクティブを使用して、CUDA-C に既にある関数を実装する必要があります (比較を行う必要があります)。元のコードには cubasSgemv 呼び出しがありますが、openacc で cublas ライブラリを使用する方法はありますか?
gpu - open ACC : PGIコンパイラで出力なし
インターンシップでオープンACCを勉強している学部生です。
PGI ワークステーション コンパイラ (バージョン 14.1) が正常に動作することをテストするために、基本的なサンプル コードを自分で作成しました。コマンド ライン命令 'pgcc -acc lab04.c -Minfo' で動作しました。
しかし、私には奇妙な問題があります。@@ どこにも出力がありません!! @@
コンパイラはうまく機能し、カーネルもうまく機能すると確信しています。しかし、私が推測するエラーがあるに違いありません。
みんな私を助けてくれませんか?
コード全体を掲載します。
fortran - 割り当て可能な配列を含む派生型は、既存の OpenACC コンパイラでサポートされていますか?
割り当て可能な配列を含む派生型を GPU との間でコピーし、高速化されたコードでそれらを使用することをサポートする OpenAcc コンパイラはありますか?
OpenACC 仕様 (v2.0) にはこれが可能であると記載されていますが、コンパイラに実装されている場所はどこにもありません。PGI コンパイラは派生型をサポートしていますが、割り当て可能な配列を含むものはサポートしていないようです ( PGI フォーラムのこのページを参照してください)。これはその後変更された可能性がありますが、(まあ) どこにも公表されていないようです。
c - OpenACC 対応 CAPS コンパイラの制限事項
私は現在、コンパイラレベルでの自動並列化技術の状況に関するレポートを書いています。OpenACC 標準に関しては、PGI コンパイラ、CAPS、または CRAY コンパイラなど、いくつかのコンパイラが利用可能です。ただし、CAPS コンパイラに特定の制限があるかどうか疑問に思っていましたが、これは OpenACC 標準では文書化されていません。この標準はまだ完全に実装されていないため、2.0a にはおそらく制限があることは承知していますが、注意すべき落とし穴はありますか?
cuda - FortranでOpenACCをcublasDgetrfBatchedとインターフェースする方法は?
ADI前提条件付きのBiCG反復ソルバーの一部として、cuBLASバッチLUおよびcuSPARSEバッチ三重対角ソルバーを使用するFortranコードに取り組んできました。計算機能3.5およびCUDA 5.5のKepler K20Xを使用しています。PGI の CUDA Fortran を使用せずにこれを行っているため、独自のインターフェイスを作成しています。
cudaHostAlloc を使用してホストに固定メモリを割り当て、マトリックス用のデバイス メモリとマトリックスへのデバイス ポインターを含むデバイス配列を割り当て、各マトリックスをデバイスに非同期にコピーし、操作を実行してから、分解されたマトリックスとピボットを非同期にコピーします。ホストに戻り、単一の右辺で後方置換を実行します。
この最後のステップを実行する必要はありませんが、cublasDtrsmBatched ルーチンは行列のサイズを 32 に制限しており、私のサイズは 80 です (バッチ化された Dtrsv の方が優れていますが、これは存在しません)。複数の個々の cublasDtrsv カーネルを起動するコストにより、デバイスで back-sub を実行できなくなります。
cublasDgetrfBatched と cusparseDgtsvStridedBatch への呼び出しの間に実行する必要がある他の操作があります。現在、これらのほとんどはホスト上で実行されており、バッチ レベルでループを並列化するために OpenMP が使用されています。たとえば、分解される各行列の行列ベクトル乗算などの演算の一部は、OpenACC を使用してデバイスで計算されます。
OpenACC を使用して GPU にもっと多くの計算を配置したいのですが、そのためには 2 つをインターフェースできる必要があります。次のようなもの:
ほとんどの場合、host_device 句を含む host_data コンストラクトが適切であることはわかっていますが、デバイス上のマトリックスへのポインターを含むデバイス配列を実際に cuBLAS に渡す必要があるため、どうすればよいかわかりません。
誰でも洞察を提供できますか?
ありがとう
performance - OpenACC は通常の GPU レンダリングから離れますか?
通常の CPU シリアル実行呼び出しの代わりに OpenACC を使用できるかどうかを調べています。通常、私のプログラミングはすべて 3D プログラミングに関するものであるか、通常何らかの方法で GPU を使用します。IE 画像処理、またはシェーダーの使用を必要とするその他のタイプのレンダリング。このライブラリが私に利益をもたらすかどうかを理解しようとしています。
私がこれを尋ねる理由は、3D グラフィックスを (できるだけ速く) レンダリングすると、そのプロセスが遅くなるからですか? または、(理論的には)「高フレームレート」を維持できるかどうか。
もしそうなら、トレードオフは何ですか?CPU でシリアルに実行できる操作を強化するために、3D グラフィックス (表示) のパフォーマンスを犠牲にするつもりはありません。
編集: これは C++ コンテキストです。