Cuda 如何将设备_向量的每个元素递减一个常数?

Cuda 如何将设备_向量的每个元素递减一个常数?,cuda,thrust,Cuda,Thrust,我正试图使用推力::变换从设备向量的每个元素中减去一个常量值。如您所见,最后一行是不完整的。我试图从所有元素中递减常量fLowestVal,但不知道具体是如何递减的 thrust::device_ptr<float> pWrapper(p); thrust::device_vector<float> dVector(pWrapper, pWrapper + MAXX * MAXY); float fLowestVal = *thrust::min_element(dVec

我正试图使用
推力::变换
设备向量
的每个元素中减去一个常量值。如您所见,最后一行是不完整的。我试图从所有元素中递减常量
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(...);
推力:装置ptr压水堆振打器(p); 推力:装置矢量驱动器(pWrapper,pWrapper+MAXX*MAXY); float-fLowestVal=*推力::最小元素(dVector.begin(),dVector.end(),推力::最小值()); //这里有什么? 推力::变换(…); 另一个问题:一旦我对
设备\u向量
进行了更改,这些更改是否也会应用于
p
数组


谢谢

通过将
for_each
与占位符表达式组合,可以从
设备_向量的每个元素中减量一个常量值:

#include <thrust/functional.h>
...
using thrust::placeholders;
thrust::for_each(vec.begin(), vec.end(), _1 -= val);
#包括
...
使用推力::占位符;
推力::对于每一个(vec.begin(),vec.end(),_1-=val);
不寻常的
\u 1-=val
语法意味着创建一个未命名的函子,其任务是通过
val
减少其第一个参数<代码>\u 1
位于命名空间
推力::占位符
,我们可以通过
使用推力::占位符
指令访问该命名空间


您也可以通过将
for_each
transform
与您自己提供的自定义functor相结合来实现这一点,但它更为详细。

在广泛的上下文中可能有用的一个选项是使用一个推力的奇特迭代器作为
推力::transform
的参数。在这里,您可以使用
推力::减号
二进制函数对象执行此操作,如下所示:

#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>());
#包括
#包括
#包括
...
推力::变换(vec.begin(),
vec.end(),
推力::使_恒定_迭代器(值),
vec.begin(),
推力::负();

可以找到奇特迭代器的文档。

WOW jared这就是我要找的!你能详细介绍一下for_每个函数的性能吗?@igalk这样的函数是带宽有限的。性能应该是“尽可能快地读写”,这要感谢eesweng指出了之前在参数排序中的错误。