2017-02-13 3 views
0

私はvector<uint2> results (size)の値を持っています。ただresults.yの値だけをvector<int> count (size)にコピーしたいのです。 thrust::transform機能を使用してこれを行うにはどうすればよいですか?推力で1つのベクトルにuint2から値をコピーする方法は?

+0

ようこそ!質問を編集して[これまでに試したこと](http://whathaveyoutried.com)を表示してください。問題のあるコードの[mcve]を含める必要があります。次に、特定の問題を解決するために役立つことができます。 [ask]も読んでください。 –

答えて

1

あなたは(それがuint2から2番目の要素を選択するかUnaryFunctionまたはBinaryFunctionことができる関数オブジェクトのいくつかの種類を宣言する必要がありますが、NVCCで--expt-extended-lambdaを有効にする場合は、ラムダを使用することができます。

auto selector = [&] __device__ (const uint2& pair) { return pair.y; };

あなたは代わりに関数オブジェクトを使用することができます。その後、

struct Selector 
{ 
    __host__ __device__ unsigned int operator()(const uint2& pair) 
    { 
     return pair.y; 
    } 
}; 

そしてthrust::transformでそれを使用します。

スタックオーバーフローへ

thrust::transform(results.begin(), results.end(), count.begin(), selector);

または

Selector selectorObject; 
thrust::transform(results.begin(), results.end(), count.begin(), selectorObject); 
+0

あなたがこのサイトの初心者であるように@Anbu - 私があなたを助けた場合、私の答えを解決策としてマークしてください。 – pSoLT

+0

ありがとうございます。しかしもう一つ明確化が必要です。結果ベクトルがデバイス内にある場合、uint2 results = NULL; cudaMalloc((void *)&results、sizeof(uint2)* size);符号なしカウント= NULL; cudaMalloc((void **)&count、sizeof(unsigned)* size);この変換関数がここで 'count'にどのようにコピーされるのですか? @pSoLT – Anbu

関連する問題