【问题标题】:Guarantees on STL parallel search algorithmsSTL并行搜索算法的保证
【发布时间】:2016-10-02 08:33:28
【问题描述】:

STL 中搜索算法的并行版本(例如 std::find、std::find_if)是否保证将迭代器返回到匹配条件的范围内的第一个元素?

文档没有明确提及是否是这种情况 - 在“C++ Concurrency in Action”中,有一个实现专门返回第一个元素。

【问题讨论】:

  • 如果他们不这样做,他们将无法作为非平行对应物工作,因此几乎一文不值。
  • 你的意思是C++标准库吗?如果是这样,(目前,从 C++14 开始)并行算法和串行算法之间没有正式的区别。算法的行为是明确规定的,任何偏离都会使实现不兼容。所以这真的取决于你问的是什么算法。
  • 是的,我的意思是标准的。我以为它们与连续版本相同,但被这本书稍微弄糊涂了——我想这只是一个更简单的例子。非常感谢!
  • @juanchopanza 以供将来参考,所以我可以提出更好的问题,如何更清楚地说明我指的是 C++ 标准库,而不是用 C++ 和 STL 标记问题,并指代算法比如 std::find_if?
  • @JoachimPileborg 我认为它绝对毫无价值。有时,您感兴趣的只是找到适合谓词的 some 元素,这可以加快速度。 FWIW,我认为这是执行策略不够丰富的一个迹象,并尝试propose an extension(没有获得任何牵引力)。

标签: c++ stl


【解决方案1】:

标准库算法的行为*(例如 std::find, std::find_if)在 C++ 标准中得到了详细说明。从 C++14 开始,并行算法的指定行为没有例外。这意味着假设的并行实现仍然需要遵守这些要求才能合规。


* 在 cmets 中,OP 是指 C++ 标准库,而不是标准模板库。我之所以做出区分,是因为 STL 很可能定义了一组不同的规则。

【讨论】:

  • 等一下。 C++ 标准中的 find_if 是为输入迭代器定义的。大概并行版本需要更强大的东西,所以它不是完全等价的。在这种情况下,这对我来说并不重要,但让我想知道在顺序版本和并行版本之间什么是和不保证是相同的。我想知道是否有并行版本的完整规范?我找不到它。
  • @danielgharvey 重点是当前标准中没有并行版本。并行实现必须尊重指定的语义。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-02
  • 1970-01-01
  • 2011-01-14
  • 2013-10-26
  • 1970-01-01
相关资源
最近更新 更多