我一直在研究标准算法,并注意到您可以指定执行策略。
此处的文档列出了 4 项政策:
std::execution::sequenced_policy
std::execution::parallel_policy
std::execution::parallel_unsequenced_policy
std::execution::unsequenced_policy
Run Code Online (Sandbox Code Playgroud)
我了解并行策略和有序策略之间的区别,但我不确定为什么您还需要未排序和未排序的并行?
据我所知,无论如何您都无法保证线程执行顺序,所以这不会使并行和并行未排序策略相同吗?
如果您不能并行化策略自动回退到顺序策略,为什么要添加正常的未排序策略?
我错过了什么?
表格可视化
-------------------------------------------------------------------------
| Type | Vectorization | Parallelization |
|------------------------------------------------------------------------
| Sequenced | X | X |
| Unsequenced | V | X |
| Parallel | X | V |
| Parallel & unsequenced | V | V |
-------------------------------------------------------------------------
Run Code Online (Sandbox Code Playgroud)
来自最新的 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());
Run Code Online (Sandbox Code Playgroud)
§ 20.18.3 执行策略类型特征
20.18.4 顺序执行策略 [execpol.seq]
20.18.5 并行执行策略 [execpol.par]
20.18.6 并行和无序执行策略 [execpol.parunseq]
20.18.7 无序执行策略 [execpol.unseq]
进一步阅读