【发布时间】:2021-07-23 04:20:28
【问题描述】:
我正在用std::exclusive_scan 计算prefix product
#include <algorithm>/
#include <iostream>
#include <vector>
int main()
{
std::vector<int> input{1,2,3,4,5,6,7,8,9};
std::exclusive_scan(std::begin(input), std::end(input),
std::begin(input),
1, std::multiplies<> {});
std::cout << "exclusive_scan: "
for (auto const product : input) {
std::cout << product << " ";
}
std::cout << '\n';
return 0;
}
输出如预期exclusive_scan: 1 1 2 6 24 120 720 5040 40320。
现在我想将它与std::execution::par 并行化并更改代码:
#include <algorithm>
#include <execution>
#include <iostream>
#include <vector>
int main()
{
std::vector<int> input{1,2,3,4,5,6,7,8,9};
std::exclusive_scan(std::execution::par,
std::begin(input), std::end(input),
std::begin(input),
1, std::multiplies<> {});
std::cout << "exclusive_scan: "
for (auto const product : input) {
std::cout << product << " ";
}
std::cout << '\n';
return 0;
}
但现在输出是exclusive_scan: 1 1 1 1 1 1 1 1 1
我正在使用 gcc 10.2.0 并链接到 -ltbb。
为什么我不能将std::exclusive_scan 与std::execution::par 一起使用?
我的实现方式有问题吗?
需要进行哪些更改?
【问题讨论】:
-
Working version (godbolt),不同的是输出的范围和输入的不一样。