2012-03-12 3 views
4

device_vectorの各要素から定数値を減らすためにthrust::transformを使用しようとしています。ご覧のとおり、最後の行は不完全です。私はすべての要素から定数fLowestValを減らそうとしていますが、正確には分かりません。device_vectorの各要素を定数でデクリメントする方法は?

thrust::device_ptr<float> pWrapper(p); 
thrust::device_vector<float> dVector(pWrapper, pWrapper + MAXX * MAXY); 
float fLowestVal = *thrust::min_element(dVector.begin(), dVector.end(),thrust::minimum<float>()); 

// XXX What goes here? 
thrust::transform(...); 

別の質問:私はdevice_vectorの私の変更を行うしたら、変更がp配列にも適用されますか?

ありがとうございます!

答えて

5

プレースホルダ式でfor_eachを組み合わせることによってdevice_vectorの各要素から一定の値をデクリメントすることができる:

#include <thrust/functional.h> 
... 
using thrust::placeholders; 
thrust::for_each(vec.begin(), vec.end(), _1 -= val); 

珍しい_1 -= val構文は、そのジョブが最初の引数をデクリメントすることである名前ファンクタを作成する手段とval_1using thrust::placeholdersディレクティブを介してアクセスできるネームスペースthrust::placeholdersに存在します。

for_eachまたはtransformを自分で設定したカスタムファンクタと組み合わせることもできますが、もっと冗長です。

+0

私はそれが私が探していたものです! for_each関数の実行形式について詳しく説明できますか? –

+1

@igalkこれらの機能は帯域幅に制限があります。パフォーマンスは、「できるだけ早く読み書きできる」ものでなければなりません。 –

関連する問題