我正在尝试使用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
数组?
谢谢!
答案 0 :(得分:6)
您可以通过将device_vector
与占位符表达式组合来减少for_each
的每个元素的常量值:
#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_each
或transform
与您自己提供的自定义仿函数相结合,但它更详细。
答案 1 :(得分: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(),
vec.begin(),
thrust::make_constant_iterator(value),
thrust::minus<float>());
有关花式迭代器的文档,请参见here。