performance - 对于具有 N 个线程的并行算法,性能增益是否可以超过 N?

标签 performance algorithm parallel-processing theory

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

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

最佳答案

这并不常见,但肯定是可能的。

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

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

从理论上讲,您可以使用具有非常大缓存的单个处理器来完成相同的任务。然而,从实用的角度来看,处理器和高速缓存大小的选择是相当有限的,所以如果你想使用更多的高速缓存,你需要使用更多的处理器——大多数系统提供的方式来实现这一点具有多个线程。

关于performance - 对于具有 N 个线程的并行算法,性能增益是否可以超过 N?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7892408/

相关文章:

vb.net - .NET 中的 IsNumeric() 占用了这么长时间的原因是什么?

java - 当只关心几种算法的相对性能时,强制 Java 从不 JIT 编译我的方法会更好吗?

mysql - 如何并行更新 MySQL(MyISAM) 表?

c++ - 并发执行进程

sql - 为什么从 .Net 应用程序调用 SQL 函数时与在 Management Studio 中进行相同调用时存在性能差异

java - 在 GWT 中使用模拟堆栈有多少开销?

c - 内存中 B-Tree 插入的实现

arrays - 找到其和可被 K 整除的最长子数组

c# - 以下是加密算法吗?如果是这样,它是可逆的吗?

java - SGE : Parallel Environment for a multithreaded java code