gpt4 book ai didi

c++ - 如何知道推力::partition_copy的结果中有多少个元素

转载 作者:行者123 更新时间:2023-12-02 09:50:21 24 4
gpt4 key购买 nike

我正在尝试使用推力库的partition_copy函数对数组进行分区。

我已经看到了传递指针的示例,但是我需要知道每个分区中有多少个元素。

我尝试过的是将设备 vector 作为OutputIterator参数传递,如下所示:

#include <thrust/device_vector.h>
#include <thrust/device_ptr.h>
#include <thrust/partition.h>

struct is_even {
__host__ __device__ bool operator()(const int &x) {
return (x % 2) == 0;
}
};

int N;
int *d_data;
cudaMalloc(&d_data, N*sizeof(int));

//... Some data is put in the d_data array

thrust::device_ptr<int> dptr_data(d_data);

thrust::device_vector<int> out_true(N);
thrust::device_vector<int> out_false(N);

thrust::partition_copy(dptr_data, dptr_data + N, out_true, out_false, is_even());

当我尝试编译时,出现此错误:
error: class "thrust::iterator_system<thrust::device_vector<int, thrust::device_allocator<int>>>" has no member "type"
detected during instantiation of "thrust::pair<OutputIterator1, OutputIterator2> thrust::partition_copy(InputIterator, InputIterator, OutputIterator1, OutputIterator2, Predicate) [with InputIterator=thrust::device_ptr<int>, OutputIterator1=thrust::device_vector<int, thrust::device_allocator<int>>, OutputIterator2=thrust::device_vector<int, thrust::device_allocator<int>>, Predicate=leq]"

因此,我的问题是:如何使用推力:::分区或推力::分区复制并知道每个分区中最终包含多少个元素?

最佳答案

您的编译错误是由于您在此处传递 vector 而不是迭代器而导致的:

thrust::partition_copy(dptr_data, dptr_data + N, out_true, out_false, is_even());
^^^^^^^^^^^^^^^^^^^

相反,您应该基于这些容器传递迭代器:
thrust::partition_copy(dptr_data, dptr_data + N, out_true.begin(), out_false.begin(), is_even());

为了获得结果的长度,我们必须使用 return value of thrust::partition copy():

Returns A pair p such that p.first is the end of the output range beginning at out_true and p.second is the end of the output range beginning at out_false.



像这样:
auto r = thrust::partition_copy(dptr_data, dptr_data + N, out_true.begin(), out_false.begin(), is_even());
int length_true = r.first - out_true.begin();
int length_false = r.second - out_false.begin();

关于c++ - 如何知道推力::partition_copy的结果中有多少个元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60207167/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com