4

*添加第二个内核或CPU可能会提高并行程序的性能,但不可能将其加倍。同样, 四核机是不会执行你的并行程序有4个 倍quickly-部分是因为在前面的章节中描述的开销和协调 的。但是,计算机硬件的设计也限制了其扩展能力。您可以预期性能有显着的提高,但是它不会是每个附加内核的100% ,并且几乎肯定会有一个点,它将增加额外的内核或CPU并不完全改善性能 。添加附加内核或CPU不会改善性能的地方在哪里?

*

,我读了一本书,上面的段落。但我没有得到最后一句话。 那么,添加额外内核或CPU的位置在哪里并不能改善性能?

回答

5

如果你把一个串行程序和同一程序的并行版本,然后并行程序必须做一些操作的串行程序不对,特别是涉及协调多个处理器的运算操作。这些贡献于通常所说的“并行开销” - 并行程序必须做的额外工作。这是导致难以在2个处理器上获得2倍加速的因素之一,在32000处理器上4倍或32000倍。

如果您检查并行程序的代码,你会经常发现片段,其序列,也就是只使用一个处理器,而其他是空闲的。有一些(不完整)算法是可以并行化的,有些操作通常不是并行化的,但可能是:I/O操作,例如为了平行化,需要某种并行I/O系统。这个“序列分数”为您的计算提供了不可简化的最短时间。 Amdahl's Law解释了这一点,该文章为您的进一步阅读提供了一个有用的起点。

即使你确实有一个很好并行的程序,缩放比例(即加速度随处理器数量的增加而变化的方式)也不等于1.对于大多数并行程序来说,并行开销的大小(或者用于并行计算仅需要的操作的处理器时间量)随着处理器数量的一些函数而增加。这通常意味着添加处理器会增加并行开销,并且在程序和作业扩展的某个时刻,开销的增加会消除(甚至反转)处理器能力的增加。关于阿姆达尔定律的文章也涵盖了与此相关的古斯塔夫森定律。

我已经说过这一切的一般条款,没有考虑当前的处理器和计算机体系结构;我所描述的是并行计算的特性(目前我们可以理解),而不是任何特定的程序或计算机。

我不同意@丹尼尔皮特曼的断言,这些问题只是理论上的问题。我们中的一些人正在努力使我们的程序扩展到大量的处理器(1000s)。现在几乎所有的桌面和办公室开发以及大多数移动开发都针对多处理器系统,并且使用所有这些内核是一个主要问题。

最后,要回答你的问题,在什么时候添加处理器不再提高执行速度,现在这是一个与架构和程序相关的问题。令人高兴的是,这是一种适合于实证调查的方法。确定并行程序的可扩展性,并找出改进方法,是软件工程“专业”中的一个增长点。

1

答案是,当然,“这取决于”,但在共享存储多处理器的当前世界短版本是“当交通协调共享内存或其他资源的消耗所有可用的总线带宽和/或CPU时间”。

虽然这是一个非常理论性的问题。几乎没有任何规模足够好,可以继续利用更少的核心。少数应用程序受益于4,少于8,而现在64核心几乎没有应用程序 - 远低于任何理论上的性能限制。

+3

我同意内存带宽限制,这是目标共享内存多处理器体系结构时的一个严重问题。但是,我坚决不同意你的观点,即这些问题只是理论上的。高性能计算中的大部分努力旨在利用这些限制,并且经常成功地将可扩展性限制推到数百/数千个内核之外。 – Francesco 2012-03-21 08:29:42

+0

-1“但这是一个非常理论化的问题。几乎没有任何规模足够好,可以继续利用更少的核心。很少有应用程序可以从4,少于8,几乎不会从64核心中受益,远低于任何理论上的性能限制。“这仅仅是无稽之谈,我的八个Xeon内核中有两个可以最大化整个系统的主内存带宽。鞭打不会在理论上扩大规模,也不会在实践中扩展,这不是“一个非常理论上的问题”,它决定了我如何编写我的应用程序。 – 2012-06-02 10:51:23

1

如果我们在谈论x86架构或多或少处于极限。 @ 3 GHz的电流每赫兹传播10厘米(实际上稍小),芯片面积约为1平方厘米,器件必须能够以单赫兹(1/3000000000秒)切换状态。目前的制造工艺(22纳米)给出了88(硅)原子宽的互连(我可能误解了这一点)。考虑到这一点,你意识到这里没有更多的物理能够做到这一点(互连有多大?10个原子?20?)。另一方面,制造商为了能够将设备作为比其前任“更高性能”的设备进行销售,增加了一个理论上使处理能力翻倍的内核。

“理论上”实际上并非完全正确。一些专门编写的应用程序会将大问题细分为足够小的部分,以便包含在单个内核及其独占缓存内(L1 & L2)。一部分给予核心,并且它处理大量时间而不访问L3缓存或RAM(与其他核心共享,因此将发生冲突/瓶颈)。完成后,它将结果写入RAM并接收新问题的一部分。

如果一个内核花费99%的时间进行内部处理和1%读写共享内存(L3缓存和RAM),那么您可能会有另外99个内核执行相同的操作,因为最后,限制因素将是共享内存能够访问的数量。以我99:1的例子来说,这样的应用程序可以有效利用100个内核。

随着更常见的程序 - 办公室,即等 - 可用的额外处理能力将很难被注意到。程序的某些部分可能会写入较小的部分以利用多个内核,并且如果您知道哪些部分可能会注意到这些程序的这些部分要快得多。

以3 GHz为例,因为它可以在300000000米/秒的光速下工作。我最近读到AMD最新的架构能够在5GHz下执行,但是这是使用特殊的冷却器,即使这样,它的运行速度也比较慢(处理速度较慢),而不是以明显较慢的频率运行的intel i7。

1

它很大程度上取决于您的程序架构/设计。添加核心可改进并行处理。如果您的程序没有并行执行任何操作,只能按顺序执行,添加内核并不会完全改善其性能。它可能会改进其他的东西,虽然像框架内部处理(如果你使用框架)。

因此,在您的程序中允许的并行处理越多,它就越能够随着更多的内核而扩展。但是,如果您的程序对并行处理(按设计或数据性质)有限制,则它不会无限缩放。在数百个内核上运行程序需要付出很大努力,主要是因为开销增加,资源锁定和所需的数据协调。最强大的超级计算机确实是大规模多核心的,但是编写可以利用它们的程序是一项重大的努力,它们只能在本质上并行的任务中展现自己的力量。

2

@High Performance Mark是对的。当你试图以最快的方式解决一个固定大小的问题时,会发生这种情况,所以适用Amdahl法则。当你试图在固定的时间内解决问题时,它通常不会发生。在前一种情况下,您愿意使用相同的时间来解决问题

  • 其尺寸较大;
  • 其尺寸与以前完全一样,但具有迎宾准确性。

在这种情况下,适用古斯塔夫森法则。

所以,让我们回到固定大小的问题。 在加速式可以区分这些部件:

  • 固有顺序计算:σ(n)的
  • 潜在并行计算:φ(n)的
  • 开销(通信操作等):κ(N, p)

p上的加速比的问题大小处理器ñ

enter image description here

添加处理器减少了计算时间,但增加了通信时间(对于消息传递算法;它增加了共享内存算法的同步开销等);如果我们继续增加更多的处理器,那么通信时间的增加将会大于相应的计算时间的减少。

发生这种情况时,并行执行时间开始增加。 加速与执行时间成反比,因此其曲线开始下降。 对于任何固定的问题大小,都有一个最佳数量的处理器,可以最大限度地减少整个并行执行时间。

以下是如何准确计算(解析解决方案的封闭形式)通过添加额外处理器(或核心,如果您愿意)没有获益的点。 enter image description here

enter image description here

enter image description here

1

您可能会发现下面的文章有用: 哈迪Esmaeilzadeh,et.al, “黑硅和多核缩放的结束,” 在ISCA'11,6月4日-8,2011,美国加利福尼亚州圣何塞市