c++ - 与 ForwardIterator 的并行性?

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

我只是在考虑我们是否可以加快提取出现在已排序 std::list<int> 中的不同元素的速度通过运行 parallelized version std::unique_copy() .

我的想法是这样的:

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

但正如我所见,只有一个 ForwardIterator 而不是 RandomAccessIterator,至少需要两遍才能并行解决这个问题:一次设置部分,下一次应用算法。

我明白,并不是每个问题都会受益于并行化的优点。

我对它的工作原理的理解是否正确(大约)?

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

最佳答案

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

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

例如,如果复制一个对象的成本很高,使用前向迭代器的std::copy可以并行地更快,因为复制对象所需的时间决定了遍历时间;吐出并行拷贝提高了整体速度,即使前向迭代器意味着并行算法比串行算法做更多的工作。

关于c++ - 与 ForwardIterator 的并行性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46813513/

相关文章:

Bash:子进程访问变量

c++ - 在循环中使用 "break"或 "return"迭代元组

c++ - 是否可以在 QStyledItemDelegate 中为 QIcon 的不透明度设置动画?

c++ - VC++ 和 GCC 下 boost::condition_variable 的不同行为

c# - 如何在对象上进行交易

c++ - 从字符串中去除空格

haskell - 在 Haskell 中编写类似信号量的代码的最佳方法是什么?

python - joblib.Parallel 如何处理全局变量?

c++ - 获取继承基类类型的元组

c++ - 引用 std::shared:ptr 以避免引用计数