6

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

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

ありがとう!

4

2 に答える 2

6

プレースホルダー式とdevice_vector組み合わせることで、 a の各要素から定数値を減らすことができます。for_each

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

通常とは異なる_1 -= val構文は、名前のないファンクターを作成することを意味し、その仕事は最初の引数を だけ減らすことvalです。 ディレクティブを介してアクセスできる_1名前空間に存在します。thrust::placeholdersusing thrust::placeholders

for_eachこれは、自分で用意したカスタム ファンクターと組み合わせたり、使用したりすることもできますtransformが、より冗長になります。

于 2012-03-13T02:01:19.483 に答える
0

幅広いコンテキストで役立つオプションの 1 つは、Thrust のファンシー イテレータの 1 つを の引数として使用することですthrust::transformthrust::minusここでは、次のように二項関数オブジェクトと一緒に行います。

#include <thrust/transform.h>
#include <thrust/iterator/constant_iterator.h>
#include <thrust/functional.h>
...
thrust::transform(vec.begin(),
                  vec.end(),
                  thrust::make_constant_iterator(value),
                  vec.begin(),
                  thrust::minus<float>());

ファンシー イテレータのドキュメントは、ここにあります。

于 2019-10-24T02:11:29.507 に答える