并行化二分法

时间:2011-12-06 21:45:32

标签: algorithm parallel-processing binary-search bisection

考虑二分算法来寻找平方根。每一步都取决于之前的步骤,所以在我看来,它并不可能并行化。我错了吗?

还要考虑类似二进制搜索的算法。

修改

我的问题不是二分,而是非常相似。我有一个单调函数f(mu),我需要在f(mu)<alpha找到mu。一个核心需要2分钟来计算f(mu),我需要一个非常大的精度。我们有一个约100个核心的农场。我的第一个尝试是仅使用1个核心,然后使用动态步骤扫描f的所有值,具体取决于我与alpha的接近程度。现在我想使用整个服务器场,但我唯一的想法是在相等的间隔点计算100 f的值。

3 个答案:

答案 0 :(得分:2)

这取决于 parallelize 的含义以及粒度。例如,您可以使用指令级并行(例如SIMD)来查找一组输入值的平方根。

二进制搜索比较棘手,因为控制流与数据有关,迭代次数也是如此,但只要你允许最大迭代次数,你仍然可以想象并行执行多次二进制搜索(log2) N)。

答案 1 :(得分:1)

即使这些算法可以并行化(并且我不确定它们是否可以),但这样做的意义非常小。

一般而言,尝试并行化已经具有子线性时间边界的算法(即,T

此外,(通常)所有具有数据依赖性的算法都不能并行化。在某些情况下,例如,可以建立一个管道,其中不同的功能单元并行运行并在它们之间顺序地提供数据。特别是图像处理算法通常适用于这种安排。

没有这种数据依赖性的问题(因此不需要在处理器之间进行通信)被称为“令人尴尬的并行”。这些问题代表了可以并行化的所有问题的一小部分空间。

答案 2 :(得分:0)

许多算法都有几个步骤,每个步骤依赖 上一步步骤,有些算法可以改变步骤做并行和一些不可能并行,我认为BinarySearch是第二种类型,你没错,但你可以用多次搜索并行二元搜索。