CUDA的thrust::inclusive_scan()有'init'参数吗?

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

根据CUDA的Thrust库文档

thrust::inclusive_scan()
4参数:

OutputIterator thrust::inclusive_scan(InputIterator       first,
                                      InputIterator       last,
                                      OutputIterator      result,
                                      AssociativeOperator binary_op 
                                     )  

但是在使用演示中(在同一文档中),它们传递了 5 参数。额外的第四个参数作为扫描的初始值传递(与

thrust::exclusive_scan()
中的一样):

int data[10] = {-5, 0, 2, -3, 2, 4, 0, -1, 2, 8};
thrust::maximum<int> binary_op;
thrust::inclusive_scan(data, data + 10, data, 1, binary_op); // in-place scan

现在,我的代码只会编译传递 4 个参数(传递 5 个参数会出现错误

no instance of overloaded function "thrust::inclusive_scan" matches the argument list
),但我碰巧需要初始化我的滚动最大值,就像示例中一样。

谁能澄清如何初始化包容性扫描?

非常感谢。

cuda gpgpu thrust
2个回答
3
投票

看来你不明白什么是包容扫描操作。不存在初始化包含扫描这样的事情。根据定义,包含扫描的第一个值始终是序列的第一个元素。

所以对于序列

 [ 1, 2, 3, 4, 5, 6, 7 ]

包容性扫描是

[ 1, 3, 6, 10, 15, 21, 28 ]

独占扫描(初始化为零)是

[ 0, 1, 3, 6, 10, 15, 21 ]

0
投票

C++ 的

std::inclusive_scan
识别接受初始值的情况。为了处理这种情况,输入值数组前面会添加初始值,并以包容的方式对结果数组计算前缀和。检查这里

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