問題タブ [thrust]
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.
c++ - CUDA の Thrust ライブラリを使用して配列を削減する
スラストを使用して配列 c の合計を見つけていますが、「エラー: 式にはクラス型が必要です」というコンパイラ エラーが発生し続けます。
これは機能していないコード行です。c は float 配列であり、他の 2 つの配列の要素の合計です。
乾杯
cuda - ポインターを含む構造体の推力ベクトル
次のデータ構造があります。
ホストから渡された GPU 上のそのような構造の配列が必要です。それを行う簡単な方法は
難しいのは、メモリを割り当てるptr
方法とそこにデータをコピーする方法です。何か提案はありますか?
c++ - スラスト: 別の配列によってインデックス付けされた配列の要素を合計する [Matlab の構文 sum(x(indices))]
Thrust ライブラリを使用して、別の配列によってインデックス付けされた配列の要素を合計しようとしていますが、例が見つかりませんでした。つまり、Matlab の構文を実装したい
これは、私が達成したいことを指摘しようとするガイドラインコードです。
また、ホスト コードから、global_array[N]をcudaMemcpyFromSymbolでコピーせずに使用できますか?
すべてのコメント/回答は大歓迎です:)
ありがとう
exception - find_ifで呼び出されたnvidiacudaスラストabort()
Thrustクイックスタートガイドのサンプルコードを実行しようとしています。下に貼り付けます。私を殺しているのは、それを実行しているときに、find_ifを押すたびに、「R6010 -abort()が呼び出されました)という例外がスローされることです。
4.1ランタイムと4.2ランタイムの両方を使用してこれを試しました。これは、最新のNSightリリース候補(2012年5月4日ダウンロード)を使用してVisual Studio2010Ultimateで構築しています。私のグラフィックカードはNVidiaNVS3100mです。
新しいVSプロジェクト(Thrustを使用しない)で生成されたベクトル追加サンプルを実行でき、問題なく動作します。ただし、スラストを追加すると、この奇妙さが増します。
任意の提案をいただければ幸いです。
mj
編集1
もう1つの情報。私はこれをさらに深く掘り下げており、cudaThreadSynchronize()中にエラーがキャッチされていることを確認しています。メッセージは「launch_closure_by_value」です。
cuda - ベクトルとイテレータを使用したNVidiaスラストプログラミング-基本的な質問
NVidia CUDA / Thrustを学習するために、簡単なプログラムを作成しようとしています。私は完全な初心者です。私がやろうとしているのは、カスタム述語でfind_ifを使用することです。今のところ私の述語はすべてに対してtrueを返すだけなので、すべての入力を取得しようとしています。最終的に文字列を検索し、ファンクターを文字列Xで初期化してから、GPUが一致するすべての文字列を見つけられるようにします。
ここでいくつかの点で混乱しています。
文字列へのポインタでいっぱいのdevice_vectorを埋めてから、MemCmp述語に対して実行しようとしています。
まず、device_vectorは文字列をメインメモリからGPUメモリにコピーすることを「知っている」のでしょうか、それともポインタ値をコピーするだけでしょうか。
次に、「count = d_inputVector.end()--iter;」の行で これは、find_ifの結果であるイテレータ内のアイテムの数である12を返します。これは間違っていませんか?iterを試してみると、d_inputVector.begin()はゼロを返し、どこにも到達しません。
最後に、私の小さなプログラムの結果を得る私の方法は正しいですか?私はthrust::copyを使用してメモリをhost_vectorにコピーしますか?結果を表示するには、最後のようなループで十分ですか?
どんな提案でも大歓迎です。ありがとう、
mj
cuda - 等しくない入力/出力タイプで推力削減が機能しない
Thrust を使用して値の配列の最小値と最大値を削減しようとしていますが、行き詰まっているようです。フロートの配列が与えられた場合、最小値と最大値を 1 回のパスで減らしたいのですが、スラストの reduce メソッドを使用すると、代わりにすべてのテンプレート コンパイル エラーの母 (または少なくともおばさん) が得られます。
私の元のコードには、削減したい 2 つの float4 配列にまたがる 5 つの値のリストが含まれていますが、この短い例に要約しました。
代わりに2つの削減に分割すると、もちろん機能します。私の質問は次のとおりです。スラストを使用して1回のパスで最小値と最大値の両方を減らすことは可能ですか? そうでない場合、上記の削減を達成する最も効率的な方法は何ですか? 変換イテレータは役に立ちますか (もしそうなら、リダクションはワンパスリダクションになりますか?)
いくつかの追加情報: 私は Thrust 1.5 (CUDA 4.2.7 で提供) を使用しています。私の実際のコードは、reduce だけでなく reduce_by_key を使用しています。この質問を書いているときに transform_reduce を見つけましたが、キーは考慮されていません。
cuda - 多数の文字配列を GPU に転送するにはどうすればよいですか?
私はCUDAが初めてで、多数の配列を処理しようとしています。各配列は約 1000 文字の配列 (文字列ではなく、単に文字として格納されます) であり、最大 100 万個まで存在する可能性があるため、約 1 GB のデータが転送されます。このデータはすでにすべてメモリにロードされており、各配列へのポインタがありますが、すべてのデータがメモリ内で連続しているとは思えないため、1 回の呼び出しですべてを転送することはできません。
私は現在、推力で最初に取り組み、このメッセージに基づいてソリューション を作成しました...すべてのメモリを割り当てる静的呼び出しで構造体を作成し、個々のコンストラクターがその配列をコピーしました。デバイス配列へのポインターを持つ構造体を取り込む変換呼び出し。
私の問題は、各配列が個別にコピーされるため、これが明らかに非常に遅いことです。このデータをより速く転送する方法を考えています。
この質問(質問はほとんど関係ありませんが、ユーザーは似たようなことをしようとしていると思います) で、talonmies は zip イテレーターを試して使用することを提案していますが、それが多数の配列の転送にどのように役立つかわかりません。
この質問を書いているときに cudaMemcpy2DToArray と cudaMemcpy2D についても知ったので、おそらくそれらが答えですが、どちらもポインターへのポインターを入力として受け取らないように見えるため、これらがどのように機能するかはすぐにはわかりません...
どんな提案も大歓迎です...
cuda - CUDA Thrustを使用してインデックスリストで行列から行を収集する方法
これは一見単純な問題ですが、CUDA Thrust でこれを行うエレガントな方法がわかりません。
2 次元行列 NxM と、すべての行のサブセット (つまり、L < N) であり、規則的ではないサイズ L の目的の行インデックスのベクトルがあります (基本的に、7,11,13,205 のような不規則なリストです...等。)。行列は、推力デバイス ベクトルの行ごとに格納されます。インデックスの配列もデバイス ベクトルです。ここに私の2つの質問があります:
- 新しい行列 LxM を形成する元の NxM 行列から目的の行をコピーする最も効率的な方法は何ですか?
- 目的の行に属する要素のみを逆参照する元の NxM 行列の反復子を作成することは可能ですか?
ご助力ありがとうございます。
c - cuda c への移植と openMp プログラム: 正しい grid_size/block_size と削減
openMP プログラムを cuda c に変換したい。
Web と SDK で自分の道を見つけようとしています。しかし、素材は私のレベルを超えています。
私のCプログラムはインデックスをループしn=2^30
、各インデックスの重みを追加します。
1) 正しい grid_size と block_size は?
私の推測では、openMP を複製して実行することです。
2) cuda で openMP リダクションを実装するにはどうすればよいですか?
a を試してcudaMemcpy
から、標準の c で配列を減らしましたが、遅いようです。
私はthrust
図書館とそのreduce
運営者を見ます。しかし、それを現在のコードに統合する方法がわかりません。
program.c
program.cu
私のGPUカード