【问题标题】:Increasing cpu core directly related to performance? [closed]增加cpu核心与性能直接相关? [关闭]
【发布时间】:2013-04-11 13:31:18
【问题描述】:
简单的问题,增加核心与性能直接相关?
我的理解(如果我错了,请纠正我)是在多核系统、通信开销和内存中
与单核相比,延迟是性能的限制因素。也许具有大型 L1 和 L2 缓存的单核系统可以比 Core 2 Duos 执行得更好?但是,为什么在几乎每一个新架构中,内核的数量都在增加。我来这里一定是有原因的。
感谢您的帮助!
【问题讨论】:
标签:
performance
architecture
computer-architecture
【解决方案1】:
通常,在扩展系统中的核心数量时,内存延迟和带宽都是一个问题。注意:可能有专门的例外,但总的来说,大多数现代系统在 6 个以上的硬件内核访问内存之前不会开始遇到内存瓶颈。
然而,通信开销可能会非常昂贵。造成这种情况的技术原因非常复杂,超出了我的回答范围——某些方面与硬件有关,但其他方面仅与一个核心阻塞另一个核心完成计算的成本有关..两者都很糟糕。因此,使用多个内核的程序/应用程序通常必须在内核之间尽可能少地通信。这限制了可以卸载到不同内核上的任务类型。
新系统正在添加更多内核仅仅是因为它在技术上是可行的。例如,提高单核性能在技术上和经济上都不再可行。我认识的几乎所有应用程序程序员都绝对更喜欢单个超快内核,而不是必须弄清楚如何有效地利用 12 个内核。但是,即使你给他们几千万美元,芯片制造商也无法生产出这样的核心。
只要光速是一个固定常数,并行处理就会一直存在。就像今天一样,CPU 中的大部分速度改进是由于单个指令的并行处理。 Core 2 Duo(例如)将尽可能多地并行运行四个指令。这是可行的,因为在许多程序中,指令序列通常不会立即相互依赖:
- a = g_Var1 + 1;
- b = g_Var2 + 3;
- c = b * a;
- d = g_Var3 + 5;
现代 CPU 实际上会并行执行第 1,2 行和第 4 行,然后加倍返回并完成第 3 行——通常与第 5,6 行等中的任何内容并行执行。 (假设其中任何一个都不需要'c'变量结果)。这是必要的,因为我们加速或缩短执行任何单个指令的管道的能力非常有限。因此,工程师们一直专注于“走向广泛”——更多指令并行、更多内核并行、更多计算机并行(最后一种类似于云计算、BOINC 或@home 项目)。
【解决方案2】:
这取决于您的软件。如果您的 CPU 密集型计算任务不使用太多外部通信并且需要并行处理 - 多核是垂直扩展的方式。与单核 CPU 相比,它的性能要好得多……因为它可以并行执行计算任务(再次取决于您利用并行执行的特定任务)。例如,数据库服务器通常利用并行处理,并在多核 CPU 上大幅扩展。
一旦垂直限制耗尽,您可以通过在集群中引入多个节点来水平扩展,并且您需要协调任务执行。
所以你的问题:
但是为什么在几乎每个新架构中的核心数量都是
正在增加。
其中一个原因是软件不断发展以利用并行处理,而硬件则试图满足这种需求。
【解决方案3】:
您假设核心可以变得更复杂。在这一点上,这不是一个安全的假设。
您可以一次执行更多指令(“更宽”)或流水线更多以获得更高频率(“更深”)。
这两种方法的收益都在递减。更宽的芯片依赖于指令级可用的并行性,在最好的情况下它基本上不超过大约 3 宽,通常约为 1。更深的芯片存在功率和热量问题(由于电压增加,功率通常与频率成二次方关系,而与核心数量成线性关系)并损害分支错误预测的恢复时间。
我们做多核芯片不是因为我们想做,而是因为我们没有更好的选择。