对于具有N个线程的并行算法,性能增益是否大于N?

Jak*_* M. 11 theory algorithm parallel-processing performance

一个理论问题,也许很明显:

在以N个线程的并行方式实现后,算法的执行速度是否比原始的单线程算法快N倍?换句话说,增益是否可以更好地与线程数线性相关?

Jer*_*fin 11

这种情况并不常见,但最可能.

例如,考虑构建一个软件管道,其中管道中的每个步骤执行相当少量的计算,但需要足够的静态数据来大致填充整个数据缓存 - 但每个步骤使用不同的静态数据.

在这种情况下,单个处理器上的串行计算通常主要受到主存储器带宽的限制.假设您(至少)有多个处理器/核心(每个都有自己的数据缓存)作为管道步骤,您可以加载每个数据缓存一次,然后处理一个接一个的数据包,为所有这些数据保留相同的静态数据.现在,您的计算可以以处理器的速度进行,而不是受到主存储器带宽的限制,因此速度提升很容易比线程数大10倍.

从理论上讲,你可以用一个只有一个非常大的缓存的单个处理器来完成相同的工作.但是,从实际的角度来看,处理器和高速缓存大小的选择相当有限,因此如果要使用更多高速缓存,则需要使用更多处理器 - 大多数系统提供方法都是使用多个线程.


Dav*_*ley 6

是.

我看到了一种算法,用于移动机器人手臂,通过复杂的操作,基本上分成N个线程,让每个线程或多或少地随机移动通过解空间.(这不是一个实用的算法.)统计数据清楚地显示了一个线程的超线性加速.显然,随着时间的推移,一个解决方案的概率上升得相当快,然后平了一些,所以优势在于有很多初始尝试.

  • 但是,这不需要多个线程.您可以使用一个线程和类似于上下文切换的东西来实现它.也就是说,计算一个计算的一部分,然后计算第二个计算的一部分等. (2认同)
  • @JerryCoffin,重点是,那些"线程"将在一个实际线程上运行,因此它们只使用一个CPU核心.这意味着加速是因为使用了不同的算法,而不是因为有更多的内核可用.(我实际上不会这样实现它,除非有充分的理由这样做.) (2认同)

Mic*_*eyn 5

Amdahl定律(并行化)告诉我们这对于一般情况是不可能的.最好的情况是我们可以完美地将工作除以N.原因是没有连续部分,Amdahl的加速公式变为:

加速= 1 /(1/N)

其中N是处理器的数量.这当然减少到只有N.