考虑二分算法来寻找平方根。每一步都取决于之前的步骤,所以在我看来,它并不可能并行化。我错了吗?
还要考虑类似二进制搜索的算法。
修改
我的问题不是二分,而是非常相似。我有一个单调函数f(mu)
,我需要在f(mu)<alpha
找到mu。一个核心需要2分钟来计算f(mu)
,我需要一个非常大的精度。我们有一个约100个核心的农场。我的第一个尝试是仅使用1个核心,然后使用动态步骤扫描f
的所有值,具体取决于我与alpha
的接近程度。现在我想使用整个服务器场,但我唯一的想法是在相等的间隔点计算100 f
的值。
答案 0 :(得分:2)
这取决于 parallelize 的含义以及粒度。例如,您可以使用指令级并行(例如SIMD)来查找一组输入值的平方根。
二进制搜索比较棘手,因为控制流与数据有关,迭代次数也是如此,但只要你允许最大迭代次数,你仍然可以想象并行执行多次二进制搜索(log2) N)。
答案 1 :(得分:1)
即使这些算法可以并行化(并且我不确定它们是否可以),但这样做的意义非常小。
一般而言,尝试并行化已经具有子线性时间边界的算法(即,T 此外,(通常)所有具有数据依赖性的算法都不能并行化。在某些情况下,例如,可以建立一个管道,其中不同的功能单元并行运行并在它们之间顺序地提供数据。特别是图像处理算法通常适用于这种安排。 没有这种数据依赖性的问题(因此不需要在处理器之间进行通信)被称为“令人尴尬的并行”。这些问题代表了可以并行化的所有问题的一小部分空间。
答案 2 :(得分:0)
许多算法都有几个步骤,每个步骤依赖 上一步步骤,有些算法可以改变步骤做并行和一些不可能并行,我认为BinarySearch是第二种类型,你没错,但你可以用多次搜索并行二元搜索。