一个理论问题,也许很明显:
是否有可能一个算法在以 N 个线程并行方式实现后,比原始的单线程算法执行得快 N 倍?换句话说,增益是否可以更好地与线程数成线性关系?
最佳答案
这并不常见,但肯定是可能的。
例如,考虑构建一个软件管道,其中管道中的每个步骤都执行相当少量的计算,但需要足够的静态数据来大约填满整个数据缓存——但每个步骤使用不同的静态数据。
在这种情况下,单个处理器上的串行计算通常主要受主内存带宽的限制。假设您有(至少)与管道步骤一样多的处理器/核心(每个都有自己的数据缓存),您可以加载每个数据缓存一次,并一个接一个地处理数据包,保留所有这些都具有相同的静态数据。现在您的计算可以以处理器的速度进行,而不是受限于主内存的带宽,因此速度的提高很容易达到线程数的 10 倍。
从理论上讲,您可以使用具有非常大缓存的单个处理器来完成相同的任务。然而,从实用的角度来看,处理器和高速缓存大小的选择是相当有限的,所以如果你想使用更多的高速缓存,你需要使用更多的处理器——大多数系统提供的方式来实现这一点具有多个线程。
关于performance - 对于具有 N 个线程的并行算法,性能增益是否可以超过 N?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7892408/