【问题标题】:c++20 execution policy typec++20执行策略类型
【发布时间】:2020-04-04 00:12:53
【问题描述】:

我一直在研究标准算法,并注意到您可以指定执行策略。

here 找到的文档列出了 4 个策略:

std::execution::sequenced_policy  
std::execution::parallel_policy 
std::execution::parallel_unsequenced_policy  
std::execution::unsequenced_policy

我了解并行策略和排序策略之间的区别,但我不确定为什么您还需要非排序和非排序并行?

据我所知,您无论如何都不能保证线程执行顺序,所以这不会使并行和并行未排序策略相同吗?

如果您无法并行化策略自动回退到顺序策略,为什么还要添加正常的未排序策略?

我错过了什么?

【问题讨论】:

    标签: c++ c++17 c++20


    【解决方案1】:

    表格可视化

    -------------------------------------------------------------------------
    |   Type                  |     Vectorization     |     Parallelization |
    |------------------------------------------------------------------------                
    | Sequenced               |           X           |           X         | 
    | Unsequenced             |           V           |           X         |
    | Parallel                |           X           |           V         |
    | Parallel & unsequenced  |           V           |           V         |
    -------------------------------------------------------------------------
    

    来自最新的 C++20 工作草案n4849

    20.18 执行政策
    执行策略类型的对象表示类型 算法执行中允许的并行性,并表示 对元素访问功能的后续要求。

    using namespace std;
    vector<int> v = /* ... */;
    
    // standard sequential sort
    sort(v.begin(), v.end());
    
    // explicitly sequential sort
    sort(execution::seq, v.begin(), v.end());
    
    // permitting parallel execution
    sort(execution::par, v.begin(), v.end());
    
    // permitting vectorization as well
    sort(execution::par_unseq, v.begin(), v.end());
    

    § 20.18.3 执行策略类型特征

    • 20.18.4 顺序执行策略 [execpol.seq]

      1. 类 execution::sequenced_policy 是一种执行策略类型 用作消除并行算法重载歧义的唯一类型 并要求并行算法的执行不得 并行化

    • 20.18.5 并行执行策略 [execpol.par]

      1. execution::parallel_policy 类是一种执行策略类型,用作消除并行算法重载歧义的唯一类型,并指示并行算法的执行可能是 并行化

    • 20.18.6 并行和无序执行策略 [execpol.parunseq]

      1. 类 execution::parallel_unsequenced_policy 是一种执行策略类型,用作唯一的 键入以消除并行算法重载的歧义,并指示并行算法的执行可以并行化和矢量化

    • 20.18.7 无序执行策略 [execpol.unseq]

      1. unsequenced_policy 类是一种执行策略类型,用作消除并行歧义的唯一类型 算法重载并指示并行算法的执行可以向量化,例如,在 使用对多个数据项进行操作的指令的单线程。

    进一步阅读

    【讨论】:

      猜你喜欢
      • 2020-01-05
      • 2019-04-06
      • 2012-08-13
      • 1970-01-01
      • 1970-01-01
      • 2010-11-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多