6

我正在尝试thrust::transform从 a 的每个元素中减少一个常量值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您可以通过结合for_each占位符表达式从 a 的每个元素中减少一个常量值:

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

不寻常的_1 -= val语法意味着创建一个未命名的仿函数,其工作是将其第一个参数递减val. _1位于命名空间thrust::placeholders中,我们可以通过using thrust::placeholders指令访问它。

您也可以通过组合for_eachtransform与您自己提供的自定义仿函数来做到这一点,但它更冗长。

于 2012-03-13T02:01:19.483 回答
0

在广泛的上下文中可能有用的一个选项是使用 Thrust 的花哨迭代器之一作为thrust::transform. 在这里,您将与thrust::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 回答