我一直在研究标准算法,并注意到您可以指定执行策略。
此处找到的文档列出了4条策略:
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工作草案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]
20.18.5并行执行策略[execpol.par]
20.18.6并行且无序列的执行策略[execpol.parunseq]
20.18.7未排序的执行策略[execpol.unseq]
进一步阅读
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句