我有一个相当标准的float4类和在GPU上所说的float4数组。每个float4代表一个(x,y,z,rgba)点,我想使用推力将数组中每个float4的rgba值设置为一个特定值。似乎推力:: fill()可能与自定义迭代器一起使用,但是我不知道如何编写推力迭代器。有关如何执行此操作的任何想法?
(x1, y1, z1, c1), (x2, y2, z2, c2), .... --> (x1, y1, z1, value), (x2, y2, z2, value), ....
似乎
thrust::fill()
可以与自定义迭代器一起使用
不会的 fill
是简单的任务。无法读取目标迭代器,因此无法对其进行修改。您不想在迭代器范围内进行分配,而是想修改现有的迭代器范围。transform
将是正确的算法。
编写一个仿函数,类似于:
struct set_c
{
float y;
__host__ __device__
set_c(const float val) : y(val) {};
__host__ __device__
myfloat4 operator()(const myfloat4& x)
{
myfloat4 val = x;
val.c = y;
return val;
}
};
然后通过原位变换将该仿函数应用于您的数据:
thrust::device_vector<myfloat4> data(bigconstant);
// something ...
set_c op(5.f); // set each myfloat4.c = 5.f
thrust::transform(data.begin(), data.end(), data.begin(), op);
上面所有代码显然都写在浏览器中,而且从来没有靠近编译器。使用风险自负。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句