0

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

还要考虑类似的算法,如二分搜索。

编辑

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

4

3 回答 3

2

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

二进制搜索比较棘手,因为控制流是依赖于数据的,迭代次数也是如此,但是只要您允许最大迭代次数 (log2 N),您仍然可以并行执行许多二进制搜索。

于 2011-12-06T22:05:04.873 回答
1

即使这些算法可以并行化(我不确定它们是否可以),这样做也没什么意义。

一般来说,尝试并行化已经具有亚线性时间界限(即 T < O(n))的算法几乎没有意义。这些算法已经如此之快,以至于额外的硬件几乎不会产生什么影响。

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

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

于 2011-12-06T22:14:05.163 回答
0

许多算法有几个步骤,每一步都依赖一步,有些算法可以将步骤改为并行,有些不可能并行,我认为 BinarySearch 是第二种类型,你没有错,但是你可以将二进制搜索与多个 Search并行。

于 2011-12-06T21:57:25.867 回答