Cuda 推力::序列-如何在每N个元素后增加步长

Cuda 推力::序列-如何在每N个元素后增加步长,cuda,copy,sequence,thrust,Cuda,Copy,Sequence,Thrust,我正在使用 thrust::sequence(myvector.begin(), myvector.end(), 0, 1) 并实现良好的有序列表,如: 0, 1, 2, 3, 4 我的问题是,如何才能以最佳方式实现下面的列表 0, 0, 0, 1, 1, 1, 2, 2 ,2, 3, 3, 3 我知道如何用函子来回答,所以请不要试图用函子来回答。我想知道在推力方面是否有一个优化的方法,或者我是否缺少一个简单的方法。类似这样的东西: thrust::device_vector<int

我正在使用

thrust::sequence(myvector.begin(), myvector.end(), 0, 1)
并实现良好的有序列表,如:

0, 1, 2, 3, 4
我的问题是,如何才能以最佳方式实现下面的列表

0, 0, 0, 1, 1, 1, 2, 2 ,2, 3, 3, 3
我知道如何用函子来回答,所以请不要试图用函子来回答。我想知道在推力方面是否有一个优化的方法,或者我是否缺少一个简单的方法。

类似这样的东西:

thrust::device_vector<int> myvector(N);

thrust::transform( thrust::make_counting_iterator(0),
                   thrust::make_counting_iterator(N),
                   thrust::make_constant_iterator(3),
                   myvector.begin(),
                   thrust::divides<int>() );
大概是这样的:

thrust::device_vector<int> myvector(N);

thrust::transform( thrust::make_counting_iterator(0),
                   thrust::make_counting_iterator(N),
                   thrust::make_constant_iterator(3),
                   myvector.begin(),
                   thrust::divides<int>() );

回答很好,但我无法编译:xyz.cu544:错误:没有重载函数的实例推力::转换与参数列表匹配参数类型有:推力::计数迭代器,推力::计数迭代器,推力::常量迭代器,推力::细节::正常迭代器,推力::divides是否读取错误消息?常量和计数迭代器参数混合了无符号int和int类型。我已经用一个可编译的示例编辑了答案,该示例可以正确运行供您学习。是的,我对得到这样一个错误感到惊讶,并且错过了无符号int与int的不匹配。回答和错误都很好。谢谢。是的,我发现了错误,在我的例子中,N和M是无符号整数。所以常数和计数迭代器产生了无符号整数迭代器。有趣的是:回答很好,但我无法编译:xyz.cu544:错误:没有重载函数的实例推力::转换与参数列表匹配参数类型是:推力::计数迭代器,推力::计数迭代器,推力::常量迭代器,推力::细节::正常迭代器,推力::divides您读取错误消息了吗?常量和计数迭代器参数混合了无符号int和int类型。我已经用一个可编译的示例编辑了答案,该示例可以正确运行供您学习。是的,我对得到这样一个错误感到惊讶,并且错过了无符号int与int的不匹配。回答和错误都很好。谢谢。是的,我发现了错误,在我的例子中,N和M是无符号整数。所以常数和计数迭代器产生了无符号整数迭代器。有趣的是: