是否有针对C ++ 17 STL并行算法的标准调度程序规范,或者它完全取决于实现?串行算法具有复杂性保证,但是调度程序的实现对于非均匀任务负载的性能至关重要。规范是否解决了这一问题?如果没有标准化的调度程序,似乎很难保证跨平台性能。
答案 0 :(得分:6)
据我从the wording得知,这些细节完全在实现规范的范围之内,正如人们所期望的那样。正如您在这种情况下看到的那样,该标准通常不努力保证任何类型的绝对性能,而仅仅是复杂性要求。
最终,尽管您的源代码现在可以在完全标准定义的情况下利用并行性,但是运行程序的实际实际结果取决于您的实现,我认为这还是有道理的。标准化功能的目标不是跨平台性能,而是可移植的 code ,可以凭空证明是正确的。
我希望您的工具链能够提供有关这种事情如何工作的更多信息,甚至可能会影响您对工具链的选择!但是,正如在其他领域一样,让他们在这方面享有自由确实是有意义的。毕竟,那里有许多目标平台(理论上是无限的),它们都有自己的潜力和怪癖。
将来的标准可能会在调度上施加更多限制,以使实施者稍微落后一些,但就我个人而言,我不会指望它。
答案 1 :(得分:0)
C ++ 17 STL算法的调度是实现定义的。 而且,C ++ 17不保证并行执行。它只允许并行。
该类execute :: parallel_policy是使用的执行策略类型 作为消除并行算法重载和消除歧义的唯一类型 表示并行算法的执行可以并行化