为什么不制造一个大的CPU内核?[关闭]


25

我不明白为什么CPU制造商制造多核芯片。多核的扩展是可怕的,这是高度特定于应用程序的,我相信您可以指出某些程序或代码可以在许多核上很好地运行,但是在大多数情况下,这种扩展是垃圾。这浪费了硅芯片空间,浪费了能源。

例如,游戏几乎永远不会使用四个以上的内核。像Ansys或Fluent这样的科学和工程仿真是根据PC上运行的内核数量来定价的,因此您需要支付更多费用,因为您拥有更多的内核,但是超过16个内核,更多内核的好处就变得很差,而您拥有这64个内核工作站...这是浪费金钱和精力。冬天最好买一个1500 W的加热器,便宜得多。

他们为什么不制造一个只有一个大内核的CPU?

我认为,如果他们制造的单核相当于八核CPU,那么一个核的IPC将会增加800%,因此您将在所有程序中获得全部性能,而不仅仅是针对多个核进行了优化的程序。更多IPC可在任何地方提高性能,这是提高性能的可靠而简单的方法。多核仅在有限数量的程序中提高了性能,并且扩展是可怕且不可靠的。


评论不作进一步讨论;此对话已转移至聊天。得出的任何结论都应重新编辑成问题和/或任何答案。
戴夫·特威德

您可能对本文感兴趣:gotw.ca/publications/concurrency-ddj.htm
lvella

“但是超过16个内核,更多内核的好处就变得很差”。您显然不知道自己在说什么。相信我,我从事的进程可以在数以万计的CPU上运行。存在一类称为“令人难以置信的可并行化”的问题,在该问题上投入更多的精力非常有效。
阿伦

Answers:


93

问题在于这样一个假设,即CPU制造商可以增加更多的晶体管来使单个CPU内核更强大而不会产生任何后果。

为了使CPU发挥更大的作用,您必须计划做更多的事情。确实有三个选择:

  1. 使内核以更高的时钟频率运行 -这样做的问题是我们已经遇到了我们所能做的限制。

    功率使用量以及因此的散热量随频率而增加-如果将频率增加一倍,则名义上的功耗就会增加一倍。如果增加电压,则功耗会随电压的平方上升。

    由于世界的非理想特性,互连线和晶体管也具有传播延迟。您不仅可以增加晶体管的数量,而且希望能够以相同的时钟频率运行。

    我们还受到外部硬件(主要是RAM)的限制。为了使CPU更快,您必须通过更快地运行它或增加数据总线宽度来增加内存带宽。


  1. 添加更复杂的指令 -而不是更快地运行,我们可以添加更丰富的指令集-可以将诸如加密等常见任务增强到芯片中。与其花费很多时钟周期来进行软件计算,不如说我们具有硬件加速功能。

    这已经在复杂指令集(CISC)处理器上完成。看到类似SSE2,SSE3的东西。即使以相同的时钟频率运行,如今的单个CPU内核甚至比10年前的CPU内核还要强大得多。

    问题是,当您添加更复杂的指令时,您会添加更多的复杂性并使芯片变大。结果直接导致CPU变慢 -随着传播延迟的增加,可达到的时钟频率下降。

    这些复杂的说明也无法帮助您完成简单的任务。您无法强化所有可能的用例,因此,不可避免地您正在运行的软件的大部分不会受益于新的说明,并且实际上会因时钟频率降低而受到损害。

    您还可以使数据总线宽度更大以一次处理更多数据,但是这又使CPU更大,并且您在通过较大数据总线获得的吞吐量与时钟速率下降之间进行权衡。如果您只有少量数据(例如32位整数),那么拥有256位CPU并不能真正帮助您。


  1. 使CPU更加并行 -与其尝试更快地完成一件事情,不如同时做多个事情。如果您要执行的任务是一次同时执行多个操作,那么您希望一个CPU可以对一条指令执行多个计算(单指令多数据(SIMD)),或者要有多个CPU来执行一个指令计算。

    这是多核CPU的关键驱动程序之一。如果您有多个程序在运行,或者可以将一个程序拆分为多个任务,那么拥有多个CPU内核可以让您一次执行更多操作。

    因为各个CPU核是有效独立块(禁止高速缓存和存储器接口),每个单独的核心是更小的比等效单个单片核心。因为内核更紧凑,所以传播延迟减少了,您可以更快地运行每个内核。

    至于单个程序是否可以从拥有多个内核中受益,这完全取决于该程序的工作方式以及编写方式。


评论不作进一步讨论;此对话已转移至聊天。得出的任何结论都应重新编辑成问题和/或任何答案。
戴夫·特威德

注释中尚未解决的问题之一是,通过在每个时钟上运行多个指令可以使CPU并行化(超标量)。这与SIMD和频率正交;每时钟指令数(IPC)是每时间实际吞吐量的第三个因素。用于交互工作负载的所有现代CPU至少为2宽。
Peter Cordes


37

除其他答案外,还有另一个因素:芯片产量。现代处理器中有数十亿个晶体管,为了使整个芯片正常工作,这些晶体管中的每一个都必须完美工作。

通过制造多核处理器,您可以干净地划分晶体管组。如果其中一个内核存在缺陷,则可以禁用该内核,并根据正常工作的内核数量以降低的价格出售该芯片。同样,您也可以像在SMP系统中一样,从经过验证的组件中组装系统。

实际上,对于您购买的每个CPU,它都开始成为该处理器系列的高端高级型号。最终的结果取决于该芯片的哪些部分工作不正确并被禁用。英特尔没有制造任何i3处理器:它们都是有缺陷的i7,由于测试失败,所有将产品线分开的功能都被禁用了。但是,仍在工作的部分仍然有用,可以便宜得多地出售。更糟糕的是成为钥匙链饰品。

缺陷并不少见。完美地制造数十亿个晶体管并非易事。如果您没有机会有选择地使用给定芯片的某些部分,那么结果的价格将会迅速上升。

仅使用一个über处理器,制造就成为了全部或全部,这将浪费更多的工艺。对于某些设备(例如用于科学或军事目的的图像传感器),您需要一个巨大的传感器并且必须全部工作,这些设备的成本是如此之高,只有州级预算才能负担得起。


4
如果/当产量提高并且正在生产的全功能芯片超出市场需求时,供应商通常会开始融合一些内核/缓存并/或以较低频率的SKU对其进行分箱,而不是调整价格结构以使终端芯片相对便宜。使用GPU /图形卡,您曾经能够通过固件破解来解锁某些卡上禁用的着色器单元,以查看您是否很幸运,并得到了仅针对市场细分而不是实际缺陷被禁用的卡。
彼得·科德斯

4
英特尔为其某些芯片制造了双核芯片。由于所有ULV(超低压)移动SKU均为双核,因此缺陷四核不足,而且较小的管芯面积(尤其是iGPU减少了)也使每个晶片具有更多可用的双核芯片而不是融合四核芯片。 en.wikichip.org/wiki/intel/microarchitectures/…具有Sandybridge 131mm²裸片双核+ GT1图形的截图,而149mm²双核+ GT2图形+ 216mm²四核+ GT2。仍然有空间来在缓存等缺陷
彼得·科德斯

FMA单元中的某些(某些)缺陷可以通过将其分解并作为赛扬或奔腾芯片(没有AVX,所以只有128位向量)出售来解决。即使是现代的Skylake或Coffee Lake奔腾芯片也没有AVX。 。SIMD FMA单元构成内核的一部分(并且运行FP数学以外的许多SIMD操作,包括整数倍和整数移位),因此如果2x 256位FMA单元可以映射到使用2个仍在工作的块中的2个128位。使用Skylake Xeon,甚至还有一些SKU的AVX512 FMA吞吐量降低了(只有1个工作的512位FMA)
Peter Cordes

@PeterCordes如果良率得到提高,那么供应商将推出更高密度和/或更快的时钟速率(因此更高的缺陷率)设计,直到缺陷率回到可以禁用内核和/或降低时钟频率的位置为止以折扣价出售..
蒙迪·哈德

@MontyHarder:的确如此,但是验证需要花费金钱和时间,并且现有的生产线将在一段时间内继续进行现有的设计。但是,是的,您正在谈论的一些英特尔示例包括Haswell Refresh和Skylake的各种改进,基本上没有架构上的更改,并且对其14nm工艺进行了较小的改进。(有时使用新的iGPU)。例如Kaby Lake,然后是Coffee Lake等,这是英特尔正常的tick嗒节奏的“优化”步骤。
Peter Cordes

26

数据依赖

通过使芯片“更宽”,每个时钟添加更多指令非常容易-这就是“ SIMD”方法。问题在于这对大多数用例没有帮助。

工作量大致有两种,独立的和依赖的。独立工作负载的示例可能是“给定两个序列,分别为数字A1,A2,A3 ...和B1,B2 ......,计算(A1 + B1)和(A2 + B2)等”。在计算机图形,音频处理,机器学习等中可以看到这种工作量。其中很多已分配给专门用于处理GPU的GPU。

依赖的工作负载可能是“给A,在其中添加5并在表中查找。结果在表16中添加。在另一个表中查找。”

独立工作负载的优势在于可以将其分为许多不同的部分,因此更多的晶体管可以帮助实现这一目标。对于依赖的工作负载,这根本没有帮助-更多的晶体管只会使其变慢。如果必须从内存中获取价值,那将是速度的灾难。信号必须在整个主板上发出,以亚光速行驶,DRAM必须连续充电并等待结果,然后再将其发送回去。这需要数十纳秒。然后,经过简单的计算,您必须发送下一个。

能源管理

备用核心大部分时间都是关闭的。实际上,在相当多的处理器上,您无法始终运行所有内核而不会着火,因此系统会为您关闭或降低时钟频率。

重写软件是前进的唯一途径

硬件无法自动将依赖的工作负载转换为独立的工作负载。软件也不能。但是准备重新设计其系统以利用很多内核的程序员可能会这样做。


2
需要“不能同时运行所有内核”的引用。除非您将单核最大Turbo时钟速度视为CPU的“实际”时钟速度。从经典的意义上讲(在我们碰壁之前,时钟速度受到关键路径传播延迟的限制),是的,但是,在现代世界中,考虑基线时钟速度是更有意义的,因为所有核心活动运行繁重的工作负载。高于此的是肉汁,您可以在功率/热限制允许的情况下机会使用。(例如英特尔的Turbo)。
Peter Cordes

1
但是就功率而言,即使是核的最大时钟也受散热的限制要大于传播延迟(尽管可能选择了流水线级边界,所以您在目标最大涡轮速度上接近该极限)。电压也是一个变量:功率更差,但栅极延迟更短。因此,无论如何,将单核max turbo视为您“应该”能够运行所有核的东西是没有意义的,因为该限制已经来自功率。
Peter Cordes

最初问题的上下文肯定是关于单核最大速度的问题,并且出于许多实际目的,(及其高速缓存未命中)是限制用户获得速度的真正限制因素。
pjc50

是的,如果可以的话,我们所有人都将采用8倍的单线程性能,而不是8核CPU。(使用SMT可以让它自然地分开工作负载而没有上下文切换开销。请参阅我的回答。:)假设的超宽内核可能会在工作负载导致大量停顿时自动加快时钟运行速度,而不是保持所有工作SIMD FMA单元中的晶体管加电并在每个时钟切换一次。(单个内核的电源门控也是保持时钟高电平不熔化的关键;en.wikipedia.org/wiki/Dark_silicon)。因此,拥有一个广泛的核心不会有什么不同。
Peter Cordes

尽管您确实指出,我们在当前CPU上看到的单线程性能要好于将它们限制为即使在最坏情况下也可以在所有内核上同时维持的时钟速度。即Turbo是关键,特别是对于笔记本电脑芯片之类的低TDP零件(为什么我的CPU无法在HPC中保持峰值性能):与高功率但低核数的台式机芯片不同,通常基准和最大Turbo之间的比率很大,例如i7-6700k Skylake是4GHz基础,4.2GHz单核睿频(无超频; 95W TDP可能更高)。
Peter Cordes

20

时光倒流,处理器无法快速运行。因此,如果您想进行更多处理,则需要更多处理器。这可以是数学协处理器,也可以是更多的同一个处理器。最好的例子是80年代的Inmos Transputer,它是专为将多个处理器连接在一起的大规模并行处理而设计的。整个概念取决于以下假设:增加处理能力没有比添加处理器更好的方法。

麻烦的是,这种假设是(暂时的)错误的。您还可以通过使一个处理器执行更多计算来获得更多处理能力。英特尔和AMD找到了提高时钟速度的方法,正如您所说,将所有内容保存在一个处理器上更容易。结果是直到2000年代中期,快速的单核处理器才占领了市场。因摩斯(Inmos)在90年代初死于人世,他们的所有经历都与他们同在。

美好的时光必须结束。一旦时钟速度达到GHz,就没有进一步发展的空间了。然后我们又回到了多个核心。如果您真的无法获得更快的速度,那么答案就是更多的内核。正如您所说,有效地使用这些内核并不总是那么容易。如今,我们的情况要好得多,但要使它像Transputer一样容易,还有一段距离。

当然,还有其他改进选择-您可能会更有效率。对于相同数量的时钟滴答,SIMD和类似的指令集可完成更多处理。DDR可以更快地将数据移入和移出处理器。这一切都有帮助。但是,在处理方面,我们又回到了80年代,采用了多个内核。


评论不作进一步讨论;此对话已转移至聊天。得出的任何结论都应重新编辑成问题和/或任何答案。
戴夫·特威德

20

好问题,或者至少有一个有趣的答案。该答案的一部分描述了一个世界,在这个世界中,CPU 可以有效地扩展宽度,而无需使用多个单独的内核。许可/价格模式将有所不同!

其余的解释了为什么他们不能。摘要:

  • 多核的成本接近线性增长
  • 扩大1个核的超标量流水线规模的成本大约 是四分之一,这是可行的,只要有足够的蛮力就可以了。单线程性能对于交互使用非常重要(端到端延迟很重要,而不仅仅是吞吐量),因此当前的大核高端CPU会为此付出代价。例如Skylake(4宽),Ryzen(5或6宽)和Apple的A12(大型核7宽,小型节能核3宽)
  • IPC的收益严重减少,只是将管道扩展到超过3或4宽度,即使执行顺序混乱以找到ILP。分支未命中和缓存未命中很难,并且仍然使整个管道停滞不前。
  • 您没有提到频率,只是IPC,但缩放频率也很困难。更高的频率需要更高的电压,因此功率与频率成正比^1直接来自频率,也^2来自电压。(电容器存储的能量随V ^ 2缩放,除泄漏电流外的大多数动态功率来自将电荷泵入FET栅极+导线的电容性负载。)

    性能=频率乘以IPC。(在相同的体系结构中。较宽的SIMD可使您用较少的指令完成相同的工作,并且某些ISA比其他的ISA密集,例如,与x86或AArch64相比,MIPS经常需要更多的指令来完成相同的工作。)

成本以模具面积(制造成本)和/或功率(由于冷却困难而间接限制频率)表示。而且,降低每瓦的功率和性能本身就是一个目标,特别是对于移动(电池)和服务器(功率密度/冷却成本/电成本)而言。

在每个插槽都使用多核之前,您确实有针对高端用例的多插槽系统,在这些系统中,您想要的吞吐量要比可以制造的单个CPU所能达到的要高,因此,这是唯一的SMP系统。(服务器,高端工作站)。

如果单个内核可以按您希望的那样高效地扩展,我们将为每个插槽配备1个物理内核的系统以及SMT(例如HyperThreading)使它们充当多个逻辑内核。 典型的台式机/笔记本电脑只有1个物理核心,因此我们不会费力地将无法线性扩展的事物与更多核心并行化。例如make -j4,利用多路服务器,和/或隐藏台式机上的I / O延迟。(或者,如果可以轻松地扩展管道宽度,但IPC不能轻松地扩展管道宽度,那么我们仍然会尝试并行化很多东西,因此我们不得不使用更多的SMT线程。)您的OS内核仍然需要跨所有逻辑内核运行,除非采用CPU方式。目前SMT与OS的区别很大,因此仍然需要并行调度算法和锁定。


唐纳德·克努斯(Donald Knuth)在2008年的一次采访中说

对于当前的多核体系结构趋势,我也可能会对自己的不满情绪有些不满。在我看来,这似乎或多或少地像是硬件设计师的想法已经用尽,他们正试图通过让我们的机器仅在少数几个机器上运行得更快,就将摩尔定律的未来消亡归咎于软件作者。关键基准!

是的,如果我们可以拥有奇迹般的单核CPU,其吞吐量是真实程序的 8倍,那么我们可能仍会使用它们。仅当需要为更大的吞吐量付出更多的代价(而不是单线程性能)时才使用双插槽系统。

当多个程序正在运行时,多个CPU可以减少上下文切换的成本(通过让它们真正地并行运行而不是在它们之间快速切换来实现);先发制人的多任务处理中断了CPU所需的大量乱序机器,其危害可能比现在更大。

从物理上讲,它将是单核(对于一个简单的缓存层次结构,在核之间没有互连),但是支持SMT(例如,英特尔的HyperThreading),因此软件可以将其用作8个逻辑核,以动态竞争吞吐量资源。或者,当只有1个线程正在运行/没有停止时,它将获得全部好处。

因此,您可以在实际上更容易/自然的情况下使用多个线程(例如,同时运行单独的进程),或者针对容易并行化的依赖链问题,这些问题会阻止最大限度地利用此线程的IPC。

但是,不幸的是,在Knuth方面,一厢情愿的想法是,多核CPU将永远不再成为现实。


单线程性能扩展

我认为,如果他们使1核等效于8核CPU,那么一个核的IPC将增加800%,因此您将获得所有程序的全部性能,而不仅仅是针对多个核进行了优化的程序。

是的,这是真的。 如果有可能完全构建这样的CPU,那将是非常惊人的。但是我认为,在相同的半导体制造工艺(即相同的晶体管质量/效率)下,这实际上是不可能的。即使您节省了将内核粘合在一起的逻辑,并且不需要为每个内核的专用缓存占用那么多的空间,但与8核CPU拥有相同的功率预算和裸片面积肯定是不可能的。

即使您允许增加频率(因为真正的标准是每秒工作,而不是每个时钟工作),所以使CPU速度提高两倍甚至是一个巨大的挑战。

如果有可能在接近相同功率和裸片面积预算(因此制造成本)的任何地方构建这样的CPU,那么CPU供应商将已经以这种方式构建它们。

请参阅《现代微处理器90分钟指南》!

具体来说是更多核心还是更广泛核心?部分,以了解了解此答案的必要背景;首先从有序流水线CPU的工作方式开始,然后是超标量(每个时钟多条指令)。然后说明了我们是如何在P4时代左右达到壁垒的,从而导致了简单的频率缩放的结束,只剩下了IPC,并且即使使用更小的晶体管,每个指令(例如SIMD)也将做更多的工作。

使流水线变宽(每个时钟最大指令数)通常会按宽度平方来缩放成本。该成本以裸片面积和/或功耗为单位进行度量,以进行更广泛的并行依赖检查(危险检测),以及更广泛的无序调度程序来查找准备运行的指令。如果您要运行的指令以外的话,寄存器文件和缓存上还有更多的读写端口nop。特别是如果您有FMA或带进位的3输入指令(2个寄存器+标志)。

IPC回报的减少也使得CPU的宽度增加 ; 大多数工作负载具有供CPU使用的小规模/短程ILP(指令级并行)功能,因此,如果IPC已被限制为小于IPC的宽度,则扩大内核不会增加IPC(每个时钟的指令)。核心依存关系链,分支未命中,缓存未命中或其他停顿。当然,在某些具有独立迭代的展开循环中,可以加快速度,但这并不是大多数代码花费大量时间进行的工作。比较/分支指令占“典型”代码IIRC中指令混合的20%。(我认为我阅读了各种数据集的数字从15%到25%。)

同样,缓存失误使所有相关指令停顿(一旦达到ROB容量,则停顿所有一切),对于更宽的CPU而言,成本更高。(使更多执行单元闲置的机会成本;还有更多未完成的潜在工作。)或者分支未命中同样会引起泡沫。

为了获得8倍的IPC,我们至少需要将分支预测准确性和缓存命中率提高8倍。但是,对于大多数工作负载,缓存命中率不能随着缓存容量超过特定点而很好地扩展。硬件预取很聪明,但不能那么聪明。在IPC为8倍的情况下,分支预测器需要每个周期产生8倍的预测,并使它们更准确。


构建乱序执行CPU的当前技术只能在短范围内找到ILP。例如,Skylake的ROB大小为224个融合域uops,未执行的uops的调度程序为97个非融合域。如果调度程序大小是从两个长指令链中提取ILP的限制因素(如果它们太长)的情况下,则增加长度,请参阅了解带效应对具有两个长依赖性链的循环的影响。和/或查看此更一般和入门的答案)。

因此,使用硬件无法在两个独立的长循环之间找到ILP。在某些情况下,可以进行用于循环融合的动态二进制重新编译,但是除非CPU遵循Transmeta Crusoe路线,否则它们很难而且不是CPU真正可以做的。(在另一个内部ISA之上的x86仿真层;在这种情况下为VLIW)。但是,对于大多数代码而言,具有uop缓存强大的解码器的标准现代x86设计并不容易。

在x86之外,仍在使用的所有ISA都相对容易解码,因此,除了长距离优化之外,没有动力进行动态重新编译。 TL:DR:希望能够将更多ILP暴露给硬件的魔术编译器不适用于Itanium IA-64,并且不太可能适用于具有串行执行模型的任何现有ISA的超宽CPU。


如果您确实有一个超宽CPU,那么您肯定希望它支持SMT,这样您就可以通过运行多个低ILP线程来使其承担工作量。

由于Skylake当前的宽度为4 oups(并且实现了每个时钟2到3 uops的实际IPC,或者在高吞吐量代码中甚至达到了接近4的IPC),因此,假设的8倍宽CPU将是32宽!

能够将其划分为8个或16个动态共享这些执行资源的逻辑CPU,将是一件很了不起的事:非停滞的线程将获得所有前端带宽和后端吞吐量。

但是有8个独立的内核,当线程停止运行时,没有其他东西可以保持执行单元的运行状态。其他线程无益。

执行通常是突发性的:它等待缓存未命中加载而停顿,然后一旦到达,许多并行指令可以使用该结果。使用超宽CPU,该突发速度可以更快,并且实际上可以帮助进行SMT。


但是我们不能拥有神奇的超宽CPU

因此,要获得吞吐量,我们必须以线程级并行性的形式向硬件公开并行。通常,除了简单的情况(例如很大的循环)外,编译器都不擅长于何时/如何使用线程。(OpenMP或gcc的-ftree-parallelize-loops)。返工代码仍然需要人的聪明才能有效地并行完成有用的工作,因为线程间的通信非常昂贵,线程启动也很昂贵。

TLP是粗粒度的并行机制,与硬件可以利用的单个执行线程中的细粒度ILP不同。


面向交互式工作负载的CPU(例如Intel / AMD x86和Apple / ARM AArch64高端内核)无疑确实推动了IPC扩展的收益递减,因为当延迟很重要时,单线程性能仍然非常有价值,而不仅仅是吞吐量的提高。大规模并行问题。

能够以15fps的速度并行运行8个游戏副本的价值远远低于能够以45fps的速度运行一个副本的价值。CPU供应商知道这一点,这就是为什么现代CPU确实会使用乱序执行的原因,即使它会消耗大量的电源和芯片面积。(但GPU并非如此,因为它们的工作量已经非常并行了)。

英特尔的多核至强融核硬件(骑士的着陆点/骑士的磨坊)是一个有趣的中途点:非常有限的乱序执行和SMT保持2个宽核都被AVX512 SIMD指令填充以处理数字。内核基于英特尔的低功耗Silvermont架构。(高管混乱,但重新排序的窗口较小,比核心Sandybridge系列要小得多。而且管道更窄。)


顺便说一句,所有这些都与SIMD正交。如果有可能,按照说明完成更多的工作总是有帮助的。


定价模式

软件定价模型基于当前的硬件格局。

随着多核CPU的出现,每核许可模式变得更加广泛(甚至与单插槽台式机相关)。在此之前,它仅与服务器和大型工作站有关。

如果软件不需要多个内核来以最高速度运行,那么实际上就没有办法将其便宜地卖给没有从中获得太多收益的人,因为他们在较弱的CPU上运行软件。除非软件/硬件生态系统在“ SMT通道”上发展了控件,否则您可以为在该逻辑内核上运行的代码配置最大执行宽度。(再次设想一个世界,CPU在管道宽度而不是多个单独的核中扩展。)


2
“线程启动很昂贵” –这不是一个硬事实。这是常见的现代操作系统的产物。
6

1
@MSalters实际上,一些研究项目已经探索了放弃这种方法有多棒。与“人为修改代码的智慧”相同-有一些编写代码的方法自然很容易并行化,但是在过去的几十年中,它们并不十分流行。当它们使用时,可以看到一般以非常低的成本大规模横向扩展; 实际上,在许多应用中,水平缩放已开始比垂直缩放便宜得多。这只是意味着您不应该让开发人员选择-如果情况允许,它会很好用:D
六安

11

让我作个比喻:

如果您有猴子在打字机上打字,而您又想完成更多打字工作,则可以给猴子喝咖啡,打字课,甚至可能威胁要使其更快地工作,但是猴子会以最大容量输入。

因此,如果您想完成更多的键入操作,则必须获得更多的猴子。


为了进一步扩展类推,您需要为每只猴子使用一个单独的打字机(代表每个核心将需要的数据总线),您需要一种将香蕉拿到每只猴子上的方式,并需要一些东西来捡拾它们的残渣(类似于功率分配和热量)耗散),并且您需要一种方法来确保猴子不会在第十二个晚上都尝试键入相同的段落(类似于在处理器之间正确分配工作量)。但是,所有这些工作要比从一只猴子身上打字更多的努力要少得多。


7

您指出,很多软件使用的内核不超过(x)个。但这完全是该软件设计者的限制。具有多核的家用PC仍然是新事物,使用传统的API和语言设计多线程软件也更加困难。

您的PC也不只是在运行那1个程序。它正在做很多其他事情,可以将它们放到不太活跃的内核上,这样您的主软件就不会受到它们的干扰。

当前不可能仅增加单个内核的速度来匹配8个内核的吞吐量。新的架构可能会带来更高的速度。

随着越来越多的内核可用并且以这种假设设计API,程序员将开始普遍使用更多的内核。正在努力使多线程设计更易于制造。如果您几年后问这个问题,您可能会说:“我的游戏通常只使用32核,那么为什么我的CPU有256个?”。


3
1个内核与多个内核之间的差异在使软件得到利用方面是巨大的。大多数算法和程序都是串行的。例如,高德纳说是多核心CPU的样子HW设计师们“ 试图通过让我们的机器通过摩尔定律的未来消亡的软件编写者的责任的工作只在几个关键的基准更快!
彼得·柯德斯

不幸的是,还没有人想出一种方法来使单个宽/快速内核运行单线程程序,其运行速度几乎可以与我们获得高效并行代码以跨多个内核运行的速度一样快。但是幸运的是,CPU设计人员意识到单线程性能仍然很关键,并且使每个单独的内核变得比在并行问题上追求纯吞吐量时要大得多,功能强大。(比较Skylake(4宽)或Ryzen(5宽)与Xeon Phi(基于Silvermont + AVX512的Knights Landing / Knight's Mill)的核心(2宽且有限的OoO执行人员)
Peter Cordes

2
无论如何,拥有至少2个内核通常对于多任务OS很有帮助,但是在一个单内核上抢占式多任务处理(其速度是当前CPU的4倍或8倍)将是相当不错的。如果有可能以完全相同的功率预算进行构建,那么对于许多交互式用例而言,情况会好得多。(不过,当多个任务需要CPU时间时,双核确实有助于降低上下文切换成本。)
Peter Cordes

1
完全正确,但从历史上看,多核的价格更高。没有太多理由在科学应用程序之外设计并行算法。即使在需要大部分串行执行的算法中,并行化仍有很大空间。但是,当前的IPC并不是很好,很容易搞砸。通常会导致很难发现和修复的错误。当然,快4倍的CPU会很棒(但是您仍然需要多个内核)。
hekete

2
@PeterCordes嗯,大多数算法和程序不是串行的,因为它们必须是串行的,但主要是因为它是始终完成的方式(撒上“这是一个很好的折衷”)。最糟糕的情况是,您可以在四个单独的工作负载上运行同一程序四次,并且可以并行运行它们。但这又带来了另一个问题-CPU并不是经常出现的瓶颈,通常解决方法是使用更好的算法,而不是更多的CPU。有时,这些也有助于解决其他瓶颈(内存,磁盘,网络...)。
a安

3

从历史的角度来看,最令人信服的原因是功耗

在奔腾IV之后,英特尔尝试开发代号为Tejas的下一代处理器,该处理器应该在4 GHz至12 GHz范围内运行。问题在于,以这种速度运行会产生过多的热量,以致于无法生存。

在取消Tejas之后,英特尔又花了10到15年的时间才最终使它们的内核以4 GHz的频率运行并具有可接受的热量水平。

参见Tejas和Jayhawk

英特尔与Tejas并行进行了另一个项目,其中涉及使用多个内核。该项目的热量水平可以接受,所以这就是他们的做法。它使他们现在可以提高性能,而不必再等待10年才能进行10 nm的制造过程。

假设内核没有资源匮乏,那么要从单个内核而不是N个内核每秒获得相同数量的指令,您将需要使单个内核的指令速率快N倍。CPU内核的动态功耗与工作频率成线性比例。它也与工作电压的平方成正比。以较低的频率运行允许使用较低的工作电压。在较低的频率下使用较低的电压意味着实际上产生的热量随工作频率的立方下降。

一个极端的例子是人脑,仅使用20 W的功率就可以每秒执行2 ^ 18次操作。它通过使用数十亿只并行运行的数十亿个神经元来实现这一目标。

还请记住,通常在PC上一次运行数百或数千个线程。操作系统处理内核上每个线程的分配时间。因此,即使单个程序没有利用所有内核,它仍然会受益,因为如果其他程序在另一个内核上运行,则它们会占用更少的CPU时间。

如果有的话,高性能市场正在转向以FPGA形式的更多并行处理。英特尔最近收购了Altera(第二大FPGA制造商),现在正在出售带有FPGA硬件加速器的主板。软件可以在运行时使用API​​调用将图像加载到FPGA。然后,CPU将数据馈入FPGA,并让它完成大部分工作。应用程序的类型通常是视频编码,AI,渲染,数据库搜索等。


还请记住,PC上通常通常同时运行数百或数千个线程。 不,没有运行。现代台式机上存在许多线程,但几乎所有线程都在任何给定时间都在等待I / O或计时器的状态下处于睡眠状态。例如,我的Linux桌面上的平均负载(过去一分钟)当前为0.19个任务,可以随时使用CPU时间。如果我正在运行视频编码,则x264将启动多个线程供OS调度在多个内核上,但是只有我拥有逻辑内核的数量。
彼得·科德斯

而且,顺便说一句,OP(出于某种原因)完全忽略了频率,并询问有关缩放IPC(每个时钟周期的指令)而不是每秒缩放的问题。您说的是对的,但是他们提议使CPU 变宽,而不是提高时钟频率。我已经在答案中解决了这个问题,因此您的答案解释了随频率变化的功率缩放是一个不错的加法,+ 1。
彼得·科德斯

@PeterCordes没错,我并不是要暗示所有线程都立即执行,这当然会轮流执行。感谢您的澄清。
user4574

并不是那么多的“轮流”,因为大多数情况下它们根本没有准备好运行。它们几乎都处于睡眠状态,通常只唤醒一小段计算时间,例如,在OS发出均匀按键或网络读取后,或者由于计时器到期而唤醒它们之后。除非您实际上要进行大量计算,否则很少有两个以上的计算机可以一次被唤醒。如果是这样,您就不会启动数百个线程,而是启动多个线程〜=可用内核数。
彼得·科德斯

2

只是为了弄清楚这一切的去向...

神经网络和AI是当前的热门话题。原因之一是可以有效地并行使用大量的简单内核,从而提取接近最大的计算性能。该需求本质上是大规模并行的,并且相当容易地映射到处理器阵列,而内核之间不需要太多通信。这就是为什么GPU是第一个用于AI加速的goto技术的原因。目前,我们看到针对NN上市的芯片甚至比视频GPU进行了优化。下一步,也可能是最后一步,就是使用忆阻器之类的模拟技术来制造NN。

顺便说一句,在诸如游戏PC之类的产品中,图形卡中的原始性能要远远高于多核Intel或AMD CPU


2
关于“ ...本来就大规模平行”:甚至令人尴尬地平行吗?
Peter Mortensen

1

从根本上讲,CMOS损耗与频率成指数比例(^ 1.5),而并行CPU性能则比与CPU数量成线性比例略小。

因此,当比较固定功耗下CPU的速度与数量时,对于不同时钟速率的多CPU应用,计算能力与功耗之比得以提高。

比这要复杂得多,但是这些是为什么并行CPU在动态应用程序中每瓦更好的基础。针对一种情况进行优化时,总会有例外。

不是更大的CPU尺寸可以使它在Intel / AMD典型的PC应用中更快,而是光刻分辨率的减小和门极电容减小的原因,从而降低了功耗以及亚阈值水平和内核电压的降低。

改进不是线性的,并不意味着8核要比2核好4倍,但是如果满足的目标是在功耗,速度和电压的调节下具有更大的处理动态范围,以提高性能和效率以及按需提供的峰值功率温度过度升高。

有关更科学的答案,请阅读https://www.sciencedirect.com/topics/computer-science/dynamic-power-consumption


-2

多核通常不是多标量的。而且多标量内核不是多核。

找到运行在几兆赫兹的多标量体系结构将是一个完美的选择,但是总的来说,它的桥接器不支持消费者,但价格昂贵,因此趋势是在较低频率下进行多核编程,而不是在高时钟速度下进行短指令编程。

多个指令核更便宜且更易于命令,这就是为什么在几千兆赫兹具有多标量架构的一个好主意。


1
您是说“超标量”,每个时钟有多个指令吗?大多数多核CPU 超标量的。例如Ryzen是5宽。苹果的高端AArch64芯片宽6或8。2倍宽的CPU在大多数代码中可以利用的优势很多,因此在扩展到需要各自专用缓存的多个内核以及内核之间的互连(例如,英特尔的至强融核多核计算卡具有许多双核内核。智能手机核心相同:小核心至少2宽。单线程性能很重要!
彼得·科德斯

1
还是您的意思是dl.acm.org/citation.cfm?id=224451-有关它们所谓的“多标量”内核的研究论文,该内核使用高级程序的控制流图中的较大范围寻找ILP硬件和软件的组合。我们在台式机和智能手机中使用的主流CPU 并非如此,它们只是具有乱序执行的普通超标量,实现了一个串行ISA,可以假装一次执行一条指令。
彼得·科德斯

谢谢。afaik,标量拱形背后的思想是已知或预定义的指令集(AVX)背后的热量可测量性。<br/>目前的架构计算与热量的关系是不可预测的。这增强了多核可能无法在大频率下运行的可能性,因为它们无法在时间/热量理想条件下运行。到目前为止,我只知道这些。我正在挖掘矢量机,以了解“多标量”的物理原理。情况是至强/ phy遵循理想的热曲线,就像古代cpus一样。增强客户体验
machtur

像AVX这样的SIMD指令集是一种通过管道进行更多工作的方法,不必使整个管道(仅是执行单元)变宽。例如,Skylake vpaddd ymm0, ymm1, ymm2每个时钟可以运行3 条指令,每条指令执行8个压缩的32位整数加法。因此,每个时钟加24个整数,但是“仅”乱序执行机制必须跟踪正在运行的3条指令。这是比,可以运行24个CPU便宜打造add eax, edx每时钟指令。SIMD基本上与管道宽度正交。
Peter Cordes

Skylake是每个时钟周期进行优化的一个很好的例子。我不喜欢这些变体,这是内部总线优化的有趣案例,因为Skylakes这样将Xeon原始卸载集成到SIMD管道中。我假设一个大核心将像phenom对于AVX一样在几个周期内集成卸载和计算。这是计算集成正向与内部块操作所需的功率的方式。与多个类似Gpu的简短指令相反,它们具有多个“虚拟”内核,类似于对Nehalem的添加
machtur
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.