如何解决使用 CUDA/thrust
我在 GPU 上有一个相当标准的 float4 类和一个上述 float4s 的数组。每个 float4 代表一个 (x,y,z,rgba) 点,我想使用推力将数组中每个 float4 的 rgba 值设置为特定值。似乎推力::填充()可以与自定义迭代器一起使用,但我不知道如何编写推力迭代器。关于如何做到这一点的任何想法?
(x1,y1,z1,c1),(x2,y2,z2,c2),.... --> (x1,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);
上面的所有代码显然是在浏览器中编写的,并且从未接近过编译器。使用风险自负。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。