是否有可能克服 `thrust::zip_iterator` 中迭代器的最大数量?

问题描述 投票:0回答:1

我在工作中使用 Thrust 来完成一些任务,并发现在构造

zip_iterator
时似乎存在最大数量的迭代器。

例如

#include <thrust/iterator/zip_iterator.h>
#include <thrust/device_vector.h>

int main() {

  thrust::device_vector<int> A(10),B(10),C(10);

  auto zitor = thrust::make_zip_iterator(A.begin(),A.begin(),
                                         B.begin(),B.begin(),
                                         B.begin(),B.begin(),
                                         B.begin(),B.begin(),
                                         C.begin(),C.begin());

}

这段代码编译成功。但是如果我在初始化列表中再添加一个迭代器,就会出现错误:

multizip.cu(8): error: no instance of overloaded function "thrust::make_zip_iterator" matches the argument list
            argument types are: (thrust::detail::normal_iterator<thrust::device_ptr<int>>, thrust::detail::normal_iterator<thrust::device_ptr<int>>, thrust::detail::normal_iterator<thrust::device_ptr<int>>, thrust::detail::normal_iterator<thrust::device_ptr<int>>, thrust::detail::normal_iterator<thrust::device_ptr<int>>, thrust::detail::normal_iterator<thrust::device_ptr<int>>, thrust::detail::normal_iterator<thrust::device_ptr<int>>, thrust::detail::normal_iterator<thrust::device_ptr<int>>, thrust::detail::normal_iterator<thrust::device_ptr<int>>, thrust::detail::normal_iterator<thrust::device_ptr<int>>, thrust::detail::normal_iterator<thrust::device_ptr<int>>)

1 error detected in the compilation of "multizip.cu".

它最多接受十个迭代器,还是我误解了什么?如果是这样,有什么解决方法吗?


  using Itor  = thrust::device_vector<int>::iterator;
  using Zitor = thrust::zip_iterator<thrust::tuple<
                  Itor,Itor,Itor,Itor,Itor,Itor,
                  Itor,Itor,Itor,Itor,Itor>>;

这段代码也不起作用,除非我删除一个

Itor
,错误信息是:

multizip.cu(17): error: too many arguments for class template "thrust::tuple"

所以我相信thrust::tuple中的迭代器数量确实有最大限制为10。我可以克服这个限制吗?

c++ cuda gpu thrust
1个回答
0
投票

迭代器的数量在编译时由模板类型决定。这就是您收到最后一个错误的原因。我认为编译器对您创建的迭代器数量存在问题。这称为重载函数(因此第一个错误说“没有重载函数的实例”)。

我可能建议您首先尝试使用两个函数,将迭代器创建分成两个独特的函数,看看这是否是问题所在。

请参阅此处:https://forums.developer.nvidia.com/t/thrust-zip-iterator-with-任意-number-of-iterators/292942https://forums.developer.nvidia.com/t/combining-thrust-zip-iterator-transform-iterator-counting-iterator-for-modified-summed-area-table/56154.

© www.soinside.com 2019 - 2024. All rights reserved.