与ForwardIterator并行?

moo*_*eep 3 c++ parallel-processing c++17

我只是在想我们是否可以加快出现在排序的不同元素的提取std::list<int>通过运行并行版本std::unique_copy().

我对这如何运作的概念是这样的:

  • 将数据拆分为多个部分.
  • 将算法并行应用于这些部分.
  • 合并结果,同时计算各部分之间的边缘情况.

但正如我所看到的那样,只有一个ForwardIterator而不是RandomAccessIterator,需要至少两次传递来并行解决这个问题:一次传递设置部分,下一次传递应用算法.

我理解,并非每个问题都会受益于并行化的优点.

我的概念是如何正确的(大约)?

那么我的问题是,为什么并行算法不需要RandomAccessIterators?在这里支持ForwardIterator是否有益?算法能否检测到它们具有哪种类型的迭代器,并相应地选择更高效的版本?

Pet*_*ker 5

并行算法支持前向迭代器的原因是并行化可以提高这些算法的性能.

是的,前向迭代器只能通过受控序列一次移动一步.但是算法不仅仅是移动 - 你还必须看看算法所做的其他事情.

例如,如果复制一个对象是昂贵的,那么std::copy前向迭代器可以更快并行,因为复制对象所需的时间占据了遍历时间; 吐出并行副本可以提高整体速度,即使前向迭代器意味着并行算法比串行算法做更多的工作.