是否有C++17 STL并行算法的标准调度程序规范,还是完全依赖于实现?串行算法具有复杂性保证,但调度器的实现对于非均匀任务负载的性能至关重要,规范是否解决了这一问题?如果没有标准化的调度程序,似乎很难保证跨平台的性能。
发布于 2018-10-19 16:05:00
据我从用词中可以看出,这些细节完全在实现规范的范围内,正如人们所期望的那样。标准通常不努力保证任何类型的绝对性能,只有复杂性需求,正如您在本例中所看到的那样。
最终,尽管您的源代码现在可以利用并行性而完全被标准定义,但是运行程序的实际结果取决于您的实现,我认为这仍然是有意义的。标准化特性的目标不是跨平台性能,而是可在真空中被证明是正确的可移植代码。
我希望您的工具链能够提供更多关于这类东西是如何工作的信息,这甚至可能会影响您对工具链的选择!但对他们来说,在这方面享有自由是有意义的,正如他们在其他领域所做的那样。毕竟,有很多目标平台(理论上是无限的),它们都有自己的潜力和怪癖。
未来的标准可能会对调度设置更多的限制,以便将实现者踢到后面一点,但就我个人而言,我不会指望它。
发布于 2018-12-23 18:23:29
C++17 STL算法的调度是由实现定义的.而且,C++17不能保证并行执行。它只允许并行。
类execution::parallel_policy是一种执行策略类型,用作消除并行算法重载歧义的唯一类型,并指示并行算法的执行可能是并行
https://stackoverflow.com/questions/52896047
复制相似问题