我只是想通过运行parallelized version的std::unique_copy()
来加速提取排序std::list<int>
中出现的不同元素。
我对此如何运作的概念是这样的:
但是正如我所看到的那样,只有一个ForwardIterator而不是RandomAccessIterator,需要至少两次传递来并行解决这个问题:一次传递来设置部分,下一次传递应用算法。
据我所知,并非每个问题都会受益于并行化的优点。
我的概念是如何正确的(大约)?
然后我的问题是,为什么并行算法不需要RandomAccessIterators?在这里支持ForwardIterator是否有益?算法能否检测到它们具有哪种类型的迭代器,并相应地选择更高效的版本?
答案 0 :(得分:5)
并行算法支持前向迭代器的原因是并行化可以提高这些算法的性能。
是的,前向迭代器只能通过受控序列一次移动一步。但是算法不仅仅是移动 - 你还必须查看算法所做的其他事情。
例如,如果复制对象很昂贵,那么带有前向迭代器的std::copy
可以更快并行,因为复制对象所需的时间占据了遍历时间;吐出并行副本可以提高整体速度,即使前向迭代器意味着并行算法比串行算法更有效。