与ForwardIterator并行?

时间:2017-10-18 15:10:04

标签: c++ parallel-processing c++17

我只是想通过运行parallelized versionstd::unique_copy()来加速提取排序std::list<int>中出现的不同元素。

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

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

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

据我所知,并非每个问题都会受益于并行化的优点。

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

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

1 个答案:

答案 0 :(得分:5)

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

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

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