【发布时间】:2011-10-11 13:31:54
【问题描述】:
我遇到了这个问题:
- 查找列表中满足给定条件的第一个元素。
不幸的是,列表很长(100.000 个元素),并且使用单个线程评估每个元素的条件总共需要大约 30 秒。
有没有办法完全并行化这个问题?我浏览了所有的 tbb 模式,但找不到任何合适的。
更新:出于性能原因,我想在找到项目时尽早停止并停止处理列表的其余部分。这就是为什么我认为我不能使用parallel_while 或parallel_do。
【问题讨论】:
-
随着更新,从根本上来说很难:如果您获得加速,您将并行评估多个元素,因此不能尽早停止。不过,您可以在之后“很快”停止。
-
@MSalters 停止“不久之后正是我想要的
-
链表数据结构的数据并行性从根本上来说是困难的。如果你已经有多个起点(即多个迭代器指向列表中),它就可以工作,但即使有这个(很难满足)约束,你也很难干净地并行化这段代码。
标签: c++ design-patterns parallel-processing tbb