1

CUDAデバイス上の配列の最小値または最大値を見つけるために、並列削減を実行する必要があります。これに適したThrustというライブラリを見つけました。ホストメモリ内のアレイに対してのみ並列削減を実行できるようです。私のデータはデバイスメモリにあります。デバイスメモリ内のデータを削減することはできますか?これを行う方法がわかりません。Thrustのドキュメントは次のとおりです:http ://code.google.com/p/thrust/wiki/QuickStartGuide#Reductions 。みなさん、ありがとうございました。

4

2 に答える 2

7

すでにデバイスメモリにあるアレイの推力を減らすことができます。thrust::device_pointerリンクしたWikiに示されているように、デバイスポインターをコンテナー内にラップし、削減手順の1つを呼び出すだけです。

// assume this is a valid device allocation holding N words of data
int * dmem;

// Wrap raw device pointer 
thrust::device_ptr<int> dptr(dmem);

// use max_element for reduction
thrust::device_ptr<int> dresptr = thrust::max_element(dptr, dptr+N);

// retrieve result from device (if required)
int max_value = dresptr[0];

戻り値もであるdevice_ptrため、次を使用して他のカーネルで直接使用できることに注意してthrust::raw_pointer_castください。

int * dres = thrust::raw_pointer_cast(dresptr); 
于 2012-04-12T13:59:05.290 に答える
2

推力または他のライブラリがそのようなサービスを提供しない場合でも、そのカーネルを自分で作成できます。

Mark Harrisは、並列削減とcudaでの最適化に関する優れたチュートリアルを持っています。彼のスライドに続いて、あなたのニーズに合わせてそれを実装して変更することはそれほど難しくありません。

于 2012-04-12T13:49:59.797 に答える