假设我们有两个输入,第一个是数组,第二个是位图
thrust::device_vector<point_t> points;
Bitset bits; // Imagine this can be accessed within the kernel.
字符串
我想做的是将有效点复制到输出向量。
thrust::device<point_t> output;
型
要访问Bitset
,我需要给予一个正好是points数组索引的数字。
逻辑是这样的:
for(size_t i = 0; i < points.size(); i++) {
if (bits.is_active(i)) {
output.push_back(points[i]);
}
}
型
我相信这可以通过copy_if
、make_transform_iterator
、make_zip_iterator
等的组合来实现。但是我需要copy_if
的 predicate 在转换之前访问该值。我该怎么做?
auto get_point =
[] __device__(const thrust::tuple<size_t, point_t>& t) {
return thrust::get<1>(t);
};
auto it1 = thrust::make_transform_iterator(
thrust::make_zip_iterator(thrust::make_tuple(
thrust::counting_iterator<size_t>(0), points.begin())),
get_point);
auto it2 = thrust::make_transform_iterator(
thrust::make_zip_iterator(thrust::make_tuple(
thrust::counting_iterator<size_t>(points.size()), points.end())),
get_point);
thrust::copy_if(
thrust::cuda::par.on(stream), it1, it2,
output.begin(),
[=] __device__(const thrust::tuple<size_t, point_t>& t) {
auto index = thrust::get<0>(t);
return bits.is_active(index);
});
型
1条答案
按热度按时间p5cysglq1#
多亏了Abator,他的解决方案奏效了。
字符串