問題タブ [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++ - clock_gettime()CUDAでのタイミングの問題
アプリケーションを高速化するためにCUDAが提供する利点を直接確認できるCUDAコードを書きたかったのです。
これが私がThrustを使って書いたCUDAコードです(http://code.google.com/p/thrust/)
簡単に言うと、コードが行うのは、2つの2 ^ 23の長さの整数ベクトルを作成することです。1つはホスト上に、もう1つはデバイス上に互いに同一であり、それらを並べ替えます。また、それぞれの時間を測定します(試みます)。
ホストベクトルでは、を使用しますstd::sort
。デバイスベクトルでは、を使用しますthrust::sort
。
コンパイルには使用しました
nvcc sortcompare.cu -lrt
端末でのプログラムの出力は次のとおりです。
デスクトップ:./ a.out
かかったホスト時間は19です。224622882秒
デバイスの所要時間は19です。321644143秒
デスクトップ:
最初のstd::coutステートメントは、前述のように19.224秒後に生成されます。ただし、2番目のstd :: coutステートメントは(19.32秒と表示されていても)最初のstd::coutステートメントの直後に生成されます。clock_gettime()の測定に異なるtime_stampsを使用したことに注意してください。つまり、ts_hostとts_deviceです。
私はCuda4.0とNVIDIAGTX570コンピューティング機能2.0を使用しています
c - Thrust の使用中にタイミングカーネルが CUDA で起動する
CUDA でのカーネルの起動は一般に非同期です。これは、(私が理解しているように) CUDA カーネルが起動されるとすぐに制御が CPU に戻ることを意味します。cudaThreadsynchronize()
またはを使用して CPU を強制的に停止させない限り、GPU が数値計算でビジー状態の間、CPU はいくつかの有用な作業を続けcudaMemcpy()
ます。
CUDA 用のThrustライブラリを使い始めたところです。Thrust の関数呼び出しは同期ですか、それとも非同期ですか?
言い換えれば、thrust::sort(D.begin(),D.end());
D がデバイス ベクトルである場合、次を使用して並べ替え時間を測定することは理にかなっていますか?
関数呼び出しが非同期の場合、どのベクトルでも diff は 0 秒になりますが (これはタイミングのジャンクです)、同期の場合は実際にリアルタイムのパフォーマンスが得られます。
algorithm - この関数をCUDAにどのように実装しますか?(ソートされた整数ベクトルのオフセット)
デバイスにソートされた整数配列があります。例:
そして、別の配列の各要素へのオフセットが必要です。
(最初の0は位置0にあり、最初の1は位置3にあるなど)、事前にいくつの異なる要素があるかを知っています。これをCUDAでどのように効率的に実装しますか?私はコードを求めていませんが、この変換を計算するために実装するアルゴリズムの高レベルの説明を求めています。推力名前空間のさまざまな関数を見るのはすでに嫌いですが、これを実現するための推力関数の組み合わせは考えられませんでした。また、この変換には広く受け入れられている名前がありますか?
c++ - maxCUDAを使用した絶対差
次のシリアルCコードが動作しています
2つのベクトルa[]とb[]:
このコードをCUDAとcublasに移植する方法を教えてください。
cuda - Cuda Thrustを備えた複数のGPU?
複数のGPUでThrustを使用するにはどうすればよいですか?それは単にcudaSetDevice(deviceId)を使用してから、関連するThrustコードを実行するだけの問題ですか?
sorting - CUDAスラストを使用して多くのアレイを同時にソートする
20+
すでにGPU上にある、それぞれ同じ長さの配列を同じキーで並べ替える必要があります。キーもソートされるため、直接使用することはできませんsort_by_key()
(次の配列をソートするのにキーが役に立たなくなります)。これが私が代わりに試したことです:
gather()
これは、入力とは異なる出力の配列を想定しているため、機能していないようです。つまり、これは機能します。
20+
ただし、このタスクに余分な配列を割り当てたくないのです。ここに似た、thrust :: tuple、thrust :: zip_iterator、thrust :: sort_by_keys()を使用した解決策があることを私は知っています。10
ただし、タプル内の配列までしか組み合わせることができません。キーベクトルを再度複製する必要があります。このタスクにどのように取り組みますか?
algorithm - CUDA ストリーム圧縮: 概念の理解
CUDA/Thrust/CUDPP を使用しています。私が理解しているように、ストリーム圧縮では、配列内の特定の項目が無効としてマークされ、「削除」されます。
では、ここでの「削除」とは実際には何を意味するのでしょうか。元の配列のA
長さが 6 であると仮定します。2 つの要素が無効である場合 (どのような条件を指定しても)、次のようになります。
システムは GPU メモリにサイズ 4の新しい配列を作成し、有効な要素を格納して最終結果を取得しますか?
または、メモリから無効な要素を物理的に削除し、有効な要素のみを保持して元の配列 A をサイズ 4 に縮小しますか?
どちらの場合も、内部で動的メモリ割り当てが行われているということではないでしょうか? しかし、CUDA の世界では動的メモリ割り当てができないと聞いていました。
cuda - スラストでインターリーブされたデータを操作する
スラストでインターリーブされたデータを操作する最良の方法は何ですか。たとえば、インターリーブ長が 3 の値を追加したいとします。
与えるだろう
またはデータのインターリーブを解除するため、
与えるだろう
ありがとう
cuda - タイプ uint2 の推力ベクトル:「メンバー x がありません」コンパイラ エラー?
Thrust ライブラリを使い始めたばかりです。デバイスで長さ 5 のベクトルを作成しようとしています。彼女は最初の要素のメンバーを設定していますvec[0]
ただし、上記のコードではエラーが発生します
どこが間違っていますか?uint2
with.x
やなどのネイティブ CUDA ベクトル データ型のメンバーにアクセスするの.y
が正しい方法だと思いました。
cuda - ユーザー定義の構造体の Thrust::device_vector で排他的スキャンを実行します。コンパイラ エラー
CUDAで提供されているThrustライブラリをいじっています。ユーザー定義の構造体のデバイス ベクトルに対して包括的スキャンと排他的スキャンを実行しようとしました。これがコードです。
包括的実行を行う上記のコードは完全に実行され、望ましい結果が得られます。
上記のコードでは、排他的スキャンをコメントアウトしています。包括的スキャンの代わりにこれを実行しようとすると、次のコンパイラ エラーが発生します。
私は何をすべきか?参考までに、排他的スキャンの結果は