0

简单的问题,增加与性能直接相关的核心?

我的理解(如果我错了,请纠正我)是在多核系统中,与单核相比,通信开销和内存延迟是性能的限制因素。也许具有大型 L1 和 L2 缓存的单核系统可以比 Core 2 Duos 执行得更好?但是,为什么在几乎每一个新架构中,内核的数量都在增加。我来这里一定是有原因的。

感谢帮助!

4

3 回答 3

1

这取决于您的软件。如果您的 CPU 密集型计算任务不使用太多外部通信并且需要并行处理 - 多核是垂直扩展的方式。与单核 CPU 相比,它的性能要好得多……因为它可以并行执行计算任务(再次取决于您利用并行执行的特定任务)。例如,数据库服务器通常利用并行处理并在多核 CPU 上大幅扩展。

一旦垂直限制耗尽,您可以通过在集群中引入多个节点来水平扩展,并且您需要协调任务执行。

所以对于你的问题:

但是,为什么在几乎每一个新架构中,内核的数量都在增加。

原因之一是软件不断发展以利用并行处理和硬件来满足这种需求。

于 2013-04-11T13:49:34.797 回答
1

通常,在扩展系统中的核心数量时,内存延迟和带宽都是一个问题。注意:可能有专门的例外,但总的来说,大多数现代系统在 6 个以上的硬件内核访问内存之前不会开始遇到内存瓶颈。

然而,通信开销可能非常昂贵。造成这种情况的技术原因非常复杂,超出了我的回答范围——某些方面与硬件有关,但其他方面仅与一个核心阻塞另一个核心完成计算的成本有关..两者都很糟糕。因此,使用多个内核的程序/应用程序通常必须在内核之间尽可能少地通信。这限制了可以卸载到单独内核的任务类型。

新系统正在添加更多内核仅仅是因为它在技术上是可行的。例如,提高单核性能在技术上和经济上都不再可行。我认识的几乎所有应用程序程序员都绝对更喜欢单个超快内核,而不是必须弄清楚如何有效地利用 12 个内核。但是,即使你给他们数千万美元,芯片制造商也无法生产出这样的核心。

只要光速是一个固定常数,并行处理就会一直存在。就像今天一样,CPU 中的大部分速度改进是由于单个指令的并行处理。Core 2 Duo(例如)将尽可能多地并行运行四个指令。这是有效的,因为在许多程序中,指令序列通常不会立即相互依赖:

  1. a = g_Var1 + 1;
  2. b = g_Var2 + 3;
  3. c = b * a;
  4. d = g_Var3 + 5;

现代 CPU 实际上会并行执行第 1,2 行和第 4 行,然后加倍返回并完成第 3 行——通常与第 5,6 行等中的任何内容并行执行。(假设其中任何一个都不需要'c'变量结果)。这是必要的,因为我们加速或缩短执行任何单个指令的管道的能力非常有限。因此,工程师们一直专注于“走向广泛”——更多并行指令、更多并行内核、更多并行计算机(最后一个类似于云计算、BOINC 或@home 项目)。

于 2013-04-11T16:08:00.440 回答
1

您假设核心可以变得更加复杂。在这一点上,这不是一个安全的假设。

您可以一次执行更多指令(“更宽”)或为更高频率执行更多指令(“更深”)。

这两种方法的收益都在递减。更宽的芯片依赖于指令级可用的并行性,在最好的情况下它基本上不超过大约 3 宽,通常约为 1。更深的芯片存在功率和热量问题(由于电压增加,功率通常与频率成二次方比例,而与核心数量成线性比例)并损害分支错误预测的恢复时间。

我们做多核芯片不是因为我们想做,而是因为我们没有更好的选择。

于 2013-04-11T16:55:59.320 回答