在 c++ 中使用 <execution> 标头的问题

Problem with using header of <execution> in c++

提问人:MA19 提问时间:2/10/2021 更新时间:2/11/2021 访问量:287

问:

我在 Windows 10.2.0 上有 gcc 10。因此,在最新版本的 GCC 中实现。
问题是当我从以下链接复制示例代码时:https://docs.w3cub.com/cpp/algorithm/reduce,它说:std::execution 尚未声明。有什么想法吗?

#include <iostream>
#include <chrono>
#include <vector>
#include <numeric>
#include <execution>
 
int main()
{
    std::vector<double> v(10'000'007, 0.5);
 
    {
        auto t1 = std::chrono::high_resolution_clock::now();
        double result = std::accumulate(v.begin(), v.end(), 0.0);
        auto t2 = std::chrono::high_resolution_clock::now();
        std::chrono::duration<double, std::milli> ms = t2 - t1;
        std::cout << std::fixed << "std::accumulate result " << result
                  << " took " << ms.count() << " ms\n";
    }
 
    {
        auto t1 = std::chrono::high_resolution_clock::now();
        double result = std::reduce(std::execution::par, v.begin(), v.end());
        auto t2 = std::chrono::high_resolution_clock::now();
        std::chrono::duration<double, std::milli> ms = t2 - t1;
        std::cout << "std::reduce result "
                  << result << " took " << ms.count() << " ms\n";
    }
}
C++ 头文件 执行 seq par

评论

2赞 Mooing Duck 2/10/2021
您是否启用了 C++17 标志?
1赞 Fantastic Mr Fox 2/10/2021
此外,请显示您的编译命令。
0赞 Mansoor 2/10/2021
对我有用
0赞 CV_Ruddha 2/10/2021
也许这会有所帮助。stackoverflow.com/questions/43689444/......
1赞 Mansoor 2/10/2021
@Movahedi-24 当然,多线程并不能保证提高性能。我还没有通读并行算法的标准实现,但是启动和销毁线程/线程池都会产生成本。此外,在并行情况下,您最终会做更多的工作,因为您必须将数据分成小节,以便每个线程进行处理,然后在最后累积。您受到最慢线程的限制。因此,同步和资源分时也需要考虑在内。如果你在每个线程中做更多的工作,你可能会开始看到更大的好处。

答:

0赞 Mooing Duck 2/11/2021 #1

许多编译器默认使用较旧的 C++ 模式以实现向后兼容性。在设置中启用 C++ 17 以使用较新的功能。