thrust remove_if using the thrust::zip_iterator,如何分隔pred?
thrust remove_if using the thrust::zip_iterator,how to delimit pred?
这是我的代码
zip 迭代器的定义
`using namespace std;
typedef thrust::device_vector<unsigned int>::iterator IntIterator;
typedef thrust::device_vector<float>::iterator FloatIterator;
typedef thrust::tuple<IntIterator, FloatIterator> IteratorTuple;
typedef thrust::zip_iterator<IteratorTuple> ZipIterator;`
pred 的定义
struct is_less_than_zero_zip
{
__host__ __device__
bool operator()(ZipIterator & x)
{
return thrust::get<0>(x[0]) <= 5.0;
}
};
主函数开始
int main(void)
{
const int N=10;
向量定义
thrust::host_vector<unsigned int> h_values;
h_values = thrust::host_vector<unsigned int>(N);
thrust::sequence(h_values.begin(), h_values.end());
thrust::device_vector<unsigned int> d_values;
d_values = h_values;
thrust::device_vector<float> d_keys;
d_keys=h_keys;
ZipIterator iter(thrust::make_tuple(d_values.begin(), d_keys.begin()));
问题是如何划定我的pred
is_less_than_zero_zip pred;
thrust::remove_if(iter,iter+N,pred);
return 0;
}
谢谢
我不确定我是否完全理解您的问题,但如果我理解正确,那么您正试图让您的自定义谓词正常工作。以下是您应该进行的更改。 (顺便说一下,我不知道 5.0 是从哪里来的,因为你把你的结构命名为 "is_less_than_zero.")
struct is_less_than_zero_zip
{
__host__ __device__
bool operator()(const thrust::tuple<int, float>& x)
{
return thrust::get<0>(x) <= 0; // get<0> instead of x[0]
}
};
这是我的代码
zip 迭代器的定义
`using namespace std;
typedef thrust::device_vector<unsigned int>::iterator IntIterator;
typedef thrust::device_vector<float>::iterator FloatIterator;
typedef thrust::tuple<IntIterator, FloatIterator> IteratorTuple;
typedef thrust::zip_iterator<IteratorTuple> ZipIterator;`
pred 的定义
struct is_less_than_zero_zip
{
__host__ __device__
bool operator()(ZipIterator & x)
{
return thrust::get<0>(x[0]) <= 5.0;
}
};
主函数开始
int main(void)
{
const int N=10;
向量定义
thrust::host_vector<unsigned int> h_values;
h_values = thrust::host_vector<unsigned int>(N);
thrust::sequence(h_values.begin(), h_values.end());
thrust::device_vector<unsigned int> d_values;
d_values = h_values;
thrust::device_vector<float> d_keys;
d_keys=h_keys;
ZipIterator iter(thrust::make_tuple(d_values.begin(), d_keys.begin()));
问题是如何划定我的pred
is_less_than_zero_zip pred;
thrust::remove_if(iter,iter+N,pred);
return 0;
}
谢谢
我不确定我是否完全理解您的问题,但如果我理解正确,那么您正试图让您的自定义谓词正常工作。以下是您应该进行的更改。 (顺便说一下,我不知道 5.0 是从哪里来的,因为你把你的结构命名为 "is_less_than_zero.")
struct is_less_than_zero_zip
{
__host__ __device__
bool operator()(const thrust::tuple<int, float>& x)
{
return thrust::get<0>(x) <= 0; // get<0> instead of x[0]
}
};