C++ 与ForwardIterator的并行性?

C++ 与ForwardIterator的并行性?,c++,parallel-processing,c++17,C++,Parallel Processing,C++17,我正在考虑是否可以通过运行of来加速提取排序的std::list中出现的不同元素 我对这项工作的看法是: 将数据拆分为多个部分 将算法并行应用于这些部分 合并结果,同时计算各部分之间的边案例 但正如我所看到的,只有一个ForwardIterator而不是RandomAccessIterator,至少需要两个过程来并行解决这个问题:一个过程用于设置节,下一个过程应用算法 我明白,并不是每个问题都能从并行化的优点中获益 我对其工作原理的理解是否正确(大致正确) 那么我的问题是,为什么并行算法不需

我正在考虑是否可以通过运行of来加速提取排序的
std::list
中出现的不同元素

我对这项工作的看法是:

  • 将数据拆分为多个部分
  • 将算法并行应用于这些部分
  • 合并结果,同时计算各部分之间的边案例
但正如我所看到的,只有一个ForwardIterator而不是RandomAccessIterator,至少需要两个过程来并行解决这个问题:一个过程用于设置节,下一个过程应用算法

我明白,并不是每个问题都能从并行化的优点中获益

我对其工作原理的理解是否正确(大致正确)


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

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

是的,前向迭代器在受控序列中一次只移动一个步骤。但是一个算法不仅仅是运动——你还必须看看算法所做的其他事情


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

最后一个问题很容易回答。并且可以在有益的时候使用这些信息。另外,
std::list
支持的不仅仅是一个前向迭代器,它还支持一个(在这种情况下可能没有什么区别)。