1

根据 CUDA 的推力库文档thrust::inclusive_scan()4 个参数:

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

然而在使用演示中(在同一个文档中),它们传递了5 个参数。额外的第 4 个参数作为扫描的初始值传递(就像 in 一样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),但我碰巧需要初始化我的滚动最大值,就像在示例中一样。

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

非常感谢。

4

1 回答 1

2

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

所以对于序列

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

包容性扫描是

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

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

[ 0, 1, 3, 6, 10, 15, 21 ]
于 2013-01-13T19:52:58.160 回答