如何在 C++17 STL 并行算法中处理调度?

How is scheduling handled in C++17 STL parallel algorithms?

本文关键字:处理 调度 并行算法 STL C++17      更新时间:2023-10-16

C++17 STL 并行算法是否有标准调度程序规范,还是完全依赖于实现?串行算法具有复杂性保证,但调度程序实现对于非统一任务负载的性能至关重要,规范是否解决了这个问题?如果没有标准化的调度程序,似乎很难保证跨平台的性能。

据我从措辞中可以看出,正如人们所期望的那样,这些细节完全在实现规范的范围内。该标准通常不努力保证任何类型的绝对性能,只有复杂性要求,正如您在这种情况下看到的那样。

最终,虽然你的源代码现在可以利用并行性,同时完全是标准的,但运行程序的实际实际结果取决于你的实现,我认为这仍然是有意义的。标准化功能的目标不是跨平台性能,而是可以在真空中证明正确的可移植代码

我希望您的工具链能提供有关此类工作原理的更多信息,这甚至可能会影响您对工具链的选择!但是,他们在这方面拥有自由确实是有道理的,就像他们在其他领域所做的那样。毕竟,那里有许多目标平台(理论上是无限的(,它们都有自己的潜力和怪癖。

可能是未来的标准对调度施加了进一步的限制,以便稍微把实施者踢到后面,但我个人不会指望它。

C++17 STL 算法的调度是实现定义的。 此外,C++17 不保证并行执行。它只允许并行性。

类 execution::p arallel_policy 是使用的执行策略类型 作为消除并行算法重载歧义的唯一类型,以及 表示并行算法的执行可以并行化