問題タブ [dynamic-parallelism]

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.

0 投票する
2 に答える
1164 参照

cuda - OpenACC のネストされたディレクティブ

OpenACC のネストされた機能を使用して、GPU カードの動的並列処理をアクティブにしようとしています。私は Tesla 40c を使用しており、OpenACC コンパイラは PGI バージョン 15.7 です。

私のコードはとてもシンプルです。次のコードをコンパイルしようとすると、コンパイラからこれらのメッセージが返されます

私のコード構造:

また、ルーチン ディレクティブを使用するようにコードを変更しようとしました。しかし、私は再びコンパイルできませんでした

もちろん、内部の並列ループディレクティブを使用せずにルーチン (seq、worker、gang) でのみ試しました。コンパイラはされていますが、動的並列処理は有効化されていません。

OpenACC で動的並列処理を使用するにはどうすればよいですか?

0 投票する
1 に答える
127 参照

cuda - 子カーネルで CUDA 組み込み変数にアクセスする

アプリケーションの 1 つに Kepler の動的並列処理を使用しようとしています。子カーネルには、子カーネルを起動する (親カーネル内の) スレッドのグローバル インデックスが必要です。つまり、子カーネルにある親の組み込み座標変数にアクセスしたいのです。

それを行う標準的な方法はありますか?または、(threadIdx.x などの組み込み変数を使用して) 親スレッドのグローバル インデックスを計算し、それを子カーネルの 1 つの引数に渡す必要がありますか?

0 投票する
1 に答える
779 参照

c++ - GPU (できれば CUDA) 上の 2 つのデータ コンテナーでリレーショナル結合を実行する方法は?

私がやろうとしていること:

GPU では、リレーショナル代数の SQL でテーブルの結合 (内部結合、外部結合、クロス結合など) を実行するために使用される規則を模倣しようとしています。以下のコードでは、内部結合を実行したいと考えています。一方のテーブルが親/マスター テーブルで、もう一方が子テーブルである 2 つのテーブル (コンテナー) を想像してください。親と子の結合関係は 1 対多 (または、Parent_IDs の要素と一致する Child_ParentIDs に要素がない場合は 1 対なし) です。

入力データの例:

SQL クエリとしての操作:

操作説明:

Child_ParentID を Parent_ID に結合して、対応する Parent_Value にアクセスします。対応する Parent_Values を使用して、対応する Child_Permanences に対して乗算し、各操作の結果を Child_Values に配置します。

予想される出力 (Child_Values は操作中に変更される唯一のベクトルです):

説明(意味をなさない場合):

2226 の値は、106 と 21 を乗算することによって得られます。10439 は、143 と 73 を乗算した結果です。また、すべてのエントリが子ベクトルに保持されていることに注意してください (Child_Values の個々の要素が更新されているにもかかわらず、7 つの要素はすべて出力に存在します)。親ベクトルは出力に保持されません (ベクトルのリストに ParentID 4 がなく、そのための「ダミー」プレースホルダーがないことに注意してください)。これが「内部結合」の動作です。

私がうまくいかなかったエレガントなソリューションのアイデア:

-CUDA の動的並列処理の利用。おそらく、インターネット全体で私が見つけた唯一の解決策は、私がやろうとしていることを正確に実行するのはhere-part 1here-part 2です。

-CUDPP のハッシュ操作を使用する。

-アレンカDB。

最後に、私の質問は次のように繰り返されます。

純粋に GPU の観点から (できれば CUDA を使用しますが、OpenCL も機能します)、データの 2 つの別個のコンテナーでリレーショナル結合を実行して、データを検索し、要素を並列に更新できるようにするための有効なソリューションはありますか?

EDIT
Parent_IDs は常にシーケンスになるとは限りません。実行時に、親ベクトルの要素が削除される可能性があります。新しく挿入された親要素には、最後の要素の ID からシードされた ID が常に追加されます。そうは言っても、これは子要素が孤立する可能性があることを意味すると理解していますが、ここではその解決策には触れていません。

0 投票する
1 に答える
211 参照

cuda - 動的並列処理を含む CUDA コードのコンパイル/実行の問題

CUDA で動的並列処理を使用しようとしていますが、コンパイル手順を実行できません。

Compute Capability 3.5 と CUDA バージョン 7.5 を搭載した GPU に取り組んでいます。

使用するコンパイル コマンドのスイッチに応じて、さまざまなエラー メッセージが表示されますが、ドキュメントを使用すると、

  • コンパイルが成功する 1 行にたどり着きました。

    しかし、プログラムを起動すると、すべてのプログラムが失敗します。CUDA-memcheck を使用すると、API 関数を呼び出すたびに、同じエラー メッセージが表示されます。

    /li>
  • この行も試しました(CUDA動的サンプルmakefileから取得):

    しかし、実行すると、次のようになります。

    /li>

これまでに試した他のすべてのコンパイル行が失敗したため、CUDA 動的コードを正しくコンパイルする方法を理解したいと思います。

0 投票する
1 に答える
465 参照

cuda - CUBLAS がカーネルに存在する場合、最初の cudaMalloc で「不明なエラー」が発生する

次の最小限の.cuファイルがあります

ご覧のとおり、testカーネルは呼び出されていませんが、(不明なエラー)がcudaMalloc返されます。30このファイルは、分離可能なコンパイル (動的並列処理に必要) と計算機能 5.2 (3.5 と 5.0 も試しましたが、何も変更されませんでした) でコンパイルされています。への呼び出しを削除するとcublasCreatecudaMalloc戻り0ます (エラーなし)。

原因は何ですか?どうすれば修正できますか?理論的にサポートされている動的並列処理を使用してカーネルから CUBLAS を呼び出す必要があるため、「呼び出しを削除するだけ」はオプションではありません。

対応するものは次のCMakeLists.txtとおりです。

以下は、理論的に類似したコンパイル コマンドのセットです (結果は少なくとも同じです)。

0 投票する
1 に答える
798 参照

cuda - cuda コードのコンパイル中の「device-function-maxrregcount」メッセージ

カーネル内で複数のベクトル内積を実行するコードを作成しようとしています。ベクトル内積を実行するために、 cublasライブラリのcublasSdot関数を使用しています。これは私のコードです:

cublas_v2 ライブラリを含め、次のコマンドを使用してコードをコンパイルしました。

しかし、次のメッセージが表示されました。

このメッセージに関して私がすべきことを誰か教えてください。