【问题标题】: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(例如)将尽可能多地并行运行四个指令。这是可行的,因为在许多程序中,指令序列通常不会立即相互依赖:

    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 项目)。

    【讨论】:

    • 非常感谢它清除了几件事!
    • 我希望我能给你更多的选票 :)
    【解决方案2】:

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

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

    所以你的问题:

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

    其中一个原因是软件不断发展以利用并行处理,而硬件则试图满足这种需求。

    【讨论】:

      【解决方案3】:

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

      您可以一次执行更多指令(“更宽”)或流水线更多以获得更高频率(“更深”)。

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-06-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-09-20
        • 2010-11-27
        • 2010-10-06
        相关资源
        最近更新 更多