根据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
),但我碰巧需要初始化我的滚动最大值,就像示例中一样。
谁能澄清如何初始化包容性扫描?
非常感谢。
看来你不明白什么是包容扫描操作。不存在初始化包含扫描这样的事情。根据定义,包含扫描的第一个值始终是序列的第一个元素。
所以对于序列
[ 1, 2, 3, 4, 5, 6, 7 ]
包容性扫描是
[ 1, 3, 6, 10, 15, 21, 28 ]
独占扫描(初始化为零)是
[ 0, 1, 3, 6, 10, 15, 21 ]