C++ c++;20执行策略类型
我一直在学习标准算法,并注意到您可以指定执行策略 找到的文档列出了4项策略:C++ c++;20执行策略类型,c++,c++17,c++20,C++,C++17,C++20,我一直在学习标准算法,并注意到您可以指定执行策略 找到的文档列出了4项策略: std::execution::sequenced_policy std::execution::parallel_policy std::execution::parallel_unsequenced_policy std::execution::unsequenced_policy 我理解并行策略和顺序策略之间的区别,但我不确定为什么还需要非顺序和非顺序并行策略 据我所知,您无法保证线程的执行顺序,所以
std::execution::sequenced_policy
std::execution::parallel_policy
std::execution::parallel_unsequenced_policy
std::execution::unsequenced_policy
我理解并行策略和顺序策略之间的区别,但我不确定为什么还需要非顺序和非顺序并行策略
据我所知,您无法保证线程的执行顺序,所以这不会使并行和并行未排序策略相同吗
如果不能并行化,那么为什么要添加一个正常的非顺序策略,而该策略会自动退回到顺序策略
我缺少什么?表格可视化
-------------------------------------------------------------------------
| Type | Vectorization | Parallelization |
|------------------------------------------------------------------------
| Sequenced | X | X |
| Unsequenced | V | X |
| Parallel | X | V |
| Parallel & unsequenced | V | V |
-------------------------------------------------------------------------
来自最新的C++20工作草案
20.18执行政策执行策略类型的对象指示执行策略的类型 算法执行中允许的并行性,并表示 元素访问功能的后续要求
使用名称空间std;
向量v=/*…*/;
//标准顺序排序
排序(v.begin(),v.end());
//显式顺序排序
排序(执行::seq,v.begin(),v.end());
//允许并行执行
排序(执行::par,v.begin(),v.end());
//也允许矢量化
排序(执行::par_unseq,v.begin(),v.end());
§20.18.3执行策略类型特征
- 20.18.4有序执行政策[执行政策顺序]
- 类execution::sequenced_策略是一种执行策略类型 用作消除并行算法重载歧义的唯一类型 并要求并行算法的执行不能 并行化
- 20.18.5并行执行政策[execpol.par]
- 类execution::parallel_policy是一种执行策略类型,用作消除并行算法重载歧义的唯一类型,并指示并行算法的执行可能是 并行化
- 20.18.6并行和非顺序执行策略[execpol.parunseq]
- 类execution::parallel_unsequenced_策略是用作唯一 键入以消除并行算法重载的歧义,并指示并行算法的执行可以并行化和向量化
- 20.18.7未排序的执行策略[execpol.unseq]
- 类unsequenced_policy是一种执行策略类型,用作消除并行歧义的唯一类型 算法重载,并指示并行算法的执行可以矢量化,例如,在 使用对多个数据项进行操作的指令的单个线程
进一步阅读
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());