問題タブ [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.
cuda - k 番目に小さい要素を見つけるための Thrust/cudpp のアルゴリズム
私は、thrust/cudapp で k 番目に小さい要素アルゴリズムの実装を探しています。私はそれをグーグルで検索しましたが、見つからないようです。そのようなアルゴリズムが存在するかどうかを知っている人はいますか?
並べ替えがあることがわかりましたが、k番目に小さいとは言いません。
cuda - 推力::device_referenceはprintfでは使用できませんか?
推力分割関数を使用して、配列を偶数と奇数に分割しています。ただし、デバイスベクトルを表示しようとすると、ランダムな値が表示されます。エラーがどこにあるか教えてください。私はすべてを正しく行ったと思います。
cuda - ホスト上でデバイスベクトル要素に直接アクセスする最速の方法
次のページhttp://code.google.com/p/thrust/wiki/QuickStartGuide#Vectorsを参照してください。それが言うところの2番目の段落を見てください
また、device_vectorの個々の要素には、標準の角かっこ表記を使用してアクセスできることに注意してください。ただし、これらの各アクセスにはcudaMemcpyの呼び出しが必要なため、慎重に使用する必要があります。より効率的な手法については後で説明します。
ドキュメント全体を検索しましたが、より効率的な手法を見つけることができませんでした。誰かがこれを行うための最速の方法を知っていますか?つまり、ホスト上のデバイスベクトル/デバイスポインタに最速でアクセスする方法は?
cuda - CUDA Thrustによるキーの出現回数とキーの最初の出現位置の検索
キーのベクトルがあるとします
4
このベクトルには個別のキー値があることを事前に知っています。2 つのデバイス配列
pidx[4]
とpnum[4]
.
この
pidx
配列は、キー ベクトル内の個別の各キーの最初の位置、つまり---->
上記のコード スニペットで でマークされた位置を示します。したがって、この例では、pidx[4] = {0, 2, 5, 7}
.この
pnum
配列は、各キーの出現回数を示しています。したがって、この例では、pnum[4] = {2, 3, 2, 3}
.
上記の操作を CUDA Thrust でどのように実行しますか?
c++ - CUDA でカスタム メモリ管理と Thrust を混在させる
私のプロジェクトでは、カスタム メモリ アロケータを実装してcudaMalloc
、アプリケーションが「ウォームアップ」した後の不要な呼び出しを回避しました。Thrust
さらに、基本的な配列の充填、配列間の算術演算などにカスタム カーネルを使用しており、これらのカーネルを使用して削除することでコードを簡素化したいと考えています。device_vector
デバイス上のすべての配列は、(今のところ) raw ポインターを介して作成およびアクセスされます。これらのオブジェクトに対してメソッドとs メソッドを使用したいと考えてい Thrust
ますが、raw ポインターとdevice_ptr<>
常に変換しているため、コードがやや雑然としています。
私の漠然とした質問: カスタム メモリ管理、Thrust
配列メソッド、およびカスタム カーネルの呼び出しの使用法を最も読みやすい方法でどのように整理しますか?
cuda - 高速 CUDA スラスト カスタム比較演算子
私はCUDAを評価しており、現在Thrustライブラリを使用して数値をソートしています。
スラスト::ソート用の独自の比較子を作成したいのですが、劇的に遅くなります! Functional.hからコードをコピーするだけで、独自の少ない実装を作成しました。ただし、他の方法でコンパイルされているようで、動作が非常に遅いです。
- デフォルトの比較子: Thrust::less() - 94ミリ秒
- 私自身の比較子: less() - 906ミリ秒
Visual Studio 2010 を使用しています。オプション 1 と同じパフォーマンスを得るにはどうすればよいですか?
完全なコード:
cuda - 推力::min_elementで推力::device_vector(CUDA推力)でクラッシュ
次のCUDAスラストプログラムがクラッシュします。
私が得る例外は次のとおりです。
を追加#include <thrust/sort.h>
して置き換えるmin_element
とsort
、クラッシュしません。
Windows 7 64ビット、compute_20、sm_20(Fermi)、デバッグビルドでCUDA4.1を使用しています。リリースビルドでは、クラッシュが発生せず、min_elementが正しい要素を見つけます。
私は何か間違ったことをしていますか、それともスラストにバグがありますか?
c++ - 要素の配列、サブリストへのオフセット、およびサブリストの長さを指定した場合の効率的な部分削減
私のアプリケーションでは、一連のオブジェクト(たとえば、int
s)を処理する必要があります。これらのオブジェクトは、後で分割され、小さなバケットに並べ替えられます。この目的のために、要素を単一の連続配列に格納します
バケット(サブリスト)に関する情報は、それぞれのバケットの最初の要素へのオフセットとサブリストの長さによって提供されます。
だから、例えば、与えられた
次の分割が発生します。
私が探しているのは、カスタムカーネルまたはthrust
ライブラリのいずれかのみを使用して、バケットで削減などのアルゴリズムを実行するための、いくぶん一般的で効率的な方法です。バケットを合計すると、次のようになります。
私が思いついたもの:
オプション1:カスタムカーネルには、かなりの調整、共有メモリへのコピー、ブロックとグリッドサイズの適切な選択、スキャン、リデュースなどのアルゴリズムの独自の実装が必要です。また、すべての操作には独自のカスタムが必要です。カーネル。一般的に、これを行う方法は明らかですが
thrust
、ここ数日間使用した後、よりスマートな方法があるかもしれないという印象を持っていますオプション2:オフセット(
{0,0,0,1,1,1,1,1,2,2,3,...}
上記の例)からキーの配列を生成し、を使用しますthrust::reduce_by_key
。ただし、余分なリストの生成は好きではありません。オプション3:
thrust::transform_iterator
と一緒に使用しthrust::counting_iterator
て、上記のキーリストをその場で生成します。残念ながら、デバイスのオフセットリストへのインデックスの増分を必要とせず、並列処理を無効にする実装を思い付くことができません。
これを実装するための最も正しい方法は何でしょうか?
cuda - 1 回の Thrust 関数呼び出しで複数の GPU を使用する
可能な場合、Thrust 関数で複数の GPU を使用して計算を行うことはできますか? 単一の GPU で問題なく動作するこの Thrust コードを作成しました。(Tesla C2050) しかし、計算に使用したい他の 3 つの Tesla C2050 カードがマシンに接続されています。
マシンに複数の GPU が接続されている場合、GPU ごとに 1 つの CUDA カーネルを並行して実行できることを知っています。つまり、デバイス 0 でカーネル 0、デバイス 1 でカーネル 1 などです。しかし、私の場合はすべてを使用したいと思います。スラスト::ソートなどの単一のスラスト関数呼び出しで 4 つの GPU を使用します。これは可能ですか?
cuda - 推力の比較述語を作成できません::cudamin_element()関数
私はここに迷惑なメッセージを受け取り、何が間違っているのかよくわかりません。
および述語:
エラーメッセージ:
1> c:\ program files \ nvidia gpu Computing toolkit \ cuda \ v4.0 \ include \ thrust \ detail \ device \ generic \ extrema.inl(104):エラー:関数 "equalOperator :: operator()"を呼び出すことができません与えられた引数リストで
ありがとう!