gpt4 book ai didi

c++ - 执行策略与何时使用它们之间的区别

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:17:03 25 4
gpt4 key购买 nike

我注意到<algorithm>中的大多数(如果不是全部)函数正在获得一个或多个额外的重载。所有这些额外的重载都会添加一个特定的新参数,例如std::for_each来自:

template< class InputIt, class UnaryFunction >
UnaryFunction for_each( InputIt first, InputIt last, UnaryFunction f );

到:
template< class ExecutionPolicy, class InputIt, class UnaryFunction2 >
void for_each( ExecutionPolicy&& policy, InputIt first, InputIt last, UnaryFunction2 f );

这些额外的 ExecutionPolicy对这些功能有什么影响?

之间有什么区别?
  • std::execution::seq
  • std::execution::par
  • std::execution::par_unseq

  • 以及何时使用其中一个?

    最佳答案

    seq的意思是“顺序执行”,与没有执行策略的版本完全相同。
    par的意思是“并行执行”,它允许实现在多个线程上并行执行。您有责任确保f内不发生任何数据争用。
    par_unseq意味着除了被允许在多个线程中执行之外,该实现还被允许在单个线程内交错单个循环迭代,即,加载多个元素,然后仅在所有元素上执行f。这是允许矢量化实现所必需的。

    关于c++ - 执行策略与何时使用它们之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43488032/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com