根据CUDA的Thrust library documentation,thrust::inclusive_scan()
有 4 参数:
OutputIterator thrust::inclusive_scan(InputIterator first,
InputIterator last,
OutputIterator result,
AssociativeOperator binary_op
)
然而在使用演示中(在相同的文档中),它们传递 5 参数。额外的第4个参数作为扫描的初始值传递(与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
),但我碰巧需要初始化我的滚动最大值,就像在示例中一样。
有人可以澄清如何初始化包容性扫描吗?
非常感谢。
答案 0 :(得分:2)
您似乎无法理解包容性扫描操作是什么。没有初始化包容性扫描的事情。根据定义,包容性扫描的第一个值始终是序列的第一个元素。
所以序列
[ 1, 2, 3, 4, 5, 6, 7 ]
包容性扫描
[ 1, 3, 6, 10, 15, 21, 28 ]
和独占扫描(初始化为零)是
[ 0, 1, 3, 6, 10, 15, 21 ]