2014 年,我听到很多编程语言都吹捧其并发特性。并发特性被认为对性能提升至关重要。
在发表这一声明时,许多人都提到了 2005 年的一篇文章,名为免费午餐时代已经结束:软件并发性的根本性转变。基本论点是,提高处理器的时钟速度越来越困难,但我们仍然可以在芯片上安装更多内核,而为了提高性能,需要编写软件以利用多个内核。
一些关键引言:
我们习惯于看到 500MHz CPU 让位于 1GHz CPU,然后又让位于 2GHz CPU,依此类推。如今,主流计算机的频率范围为 3GHz。
关键问题是:这种增长何时会结束?毕竟,摩尔定律预测的是指数增长,而指数增长显然不可能永远持续下去,直到我们达到物理极限;光速不会再变快。增长最终必须放缓,甚至结束。
... 由于多个物理问题,特别是热量(太多且难以消散)、功耗(太高)和电流泄漏问题,利用更高的时钟速度变得越来越困难。
...随着芯片公司积极追求相同的新多核方向,英特尔和大多数处理器供应商的未来取决于其他方面。
...多核是指在一个芯片上运行两个或多个实际 CPU。
这篇文章的预测似乎是正确的,但我不明白为什么。我对硬件的工作原理只有非常模糊的概念。
我的观点过于简单:“将更多的处理能力装入相同的空间越来越困难”(因为存在热量、功耗等问题)。我预计结论是“因此,我们必须拥有更大的计算机或在多台计算机上运行我们的程序。”(事实上,分布式云计算是我们听到的越来越多的东西。)
但解决方案的一部分似乎是多核架构。除非计算机尺寸增大(但计算机并没有增大),否则这似乎只是“在相同空间内装入更多处理能力”的另一种说法。
为什么“添加更多核心”不会面临与“使 CPU 更快”相同的物理限制?
请用最简单的术语解释。:)
答案1
概括
经济效益。设计一个具有更多内核的 CPU 比设计一个具有更高时钟速度的 CPU 更便宜、更容易,因为:
功耗显著增加。随着时钟速度的提高,CPU 功耗迅速增加 - 您可以将在较低速度下运行的内核数量增加一倍,而将时钟速度提高 25% 所需的热空间则为两倍。如果将时钟速度提高 50%,则增加四倍。
还有其他方法可以提高顺序处理速度,CPU 制造商可以充分利用这些方法。
我将大量借鉴这个问题在我们的姊妹 SE 网站上。所以去给他们点赞吧!
时钟速度限制
时钟速度存在一些已知的物理限制:
传输时间
电信号穿过电路所需的时间受光速限制。这是一个硬性限制,目前尚无已知方法可以绕过它1。在千兆赫时钟下,我们正在接近这个极限。
然而,我们还没有达到那个水平。1 GHz 意味着每个时钟周期一纳秒。在那个时间里,光可以传播 30 厘米。在 10 GHz 时,光可以传播 3 厘米。单个 CPU 核心的宽度约为 5 毫米,因此在 10 GHz 之后,我们会遇到这些问题。2
切换延迟
仅仅考虑信号从一端传输到另一端所需的时间是不够的。我们还需要考虑 CPU 内的逻辑门从一种状态切换到另一种状态所需的时间!随着时钟速度的提高,这可能会成为一个问题。
不幸的是,我不确定具体情况,也无法提供任何数字。
显然,向其中注入更多电力可以加快切换速度,但这会导致功耗和散热问题。此外,更多的电力意味着你需要更大的管道来处理它而不会造成损坏。
散热/功耗
这是最重要的一点。引自fuzzyhair2 的回答:
最新的处理器采用 CMOS 技术制造。每次时钟周期都会耗散功率。因此,处理器速度越高,散热量也就越大。
有一些可爱的测量值这个 AnandTech 论坛主题,他们甚至推导出功耗(与产生的热量密切相关)的公式:
归功于不关心我们可以在下图中直观地看到这一点:
归功于不关心如您所见,当时钟速度超过某一点时,功耗(和产生的热量)会迅速增加。这使得无限增加时钟速度变得不切实际。
功耗快速增加的原因可能与开关延迟有关 - 仅按时钟频率成比例增加功率是不够的;还必须增加电压以保持更高时钟频率下的稳定性。这可能不完全正确;欢迎在评论中指出更正,或对此答案进行编辑。
更多核心?
那么为什么要增加内核呢?好吧,我无法明确回答这个问题。你得去问英特尔和 AMD 的人。但你可以看到,对于现代 CPU,在某个时候增加时钟速度是不切实际的。
是的,多核也会增加所需功率和散热量。但它巧妙地避免了传输时间和切换延迟问题。而且,正如您从图中看到的那样,您可以轻松地将现代 CPU 中的核心数量增加一倍,而热开销与时钟速度增加 25% 相同。
有些人已经做到了——目前超频世界纪录略低于 9 GHz。但要做到这一点,同时将功耗保持在可接受的范围内,是一项重大的工程挑战。设计师们在某个时候决定,增加更多内核来执行更多工作在平行下在大多数情况下能够更有效地提升性能。
这就是经济因素的作用所在——采用多核路线可能更便宜(设计时间更短,制造更简单)。而且它很容易推广——谁不喜欢全新的八核芯片?(当然,我们知道,当软件不使用多核时,多核是毫无用处的......)
那里是多核的一个缺点是:你需要更多的物理空间来放置额外的核心。然而,CPU 进程大小不断缩小,因此有足够的空间来放置两个先前设计的副本 - 真正的权衡是无法创建更大、更复杂的单核。再说一次,增加核心复杂性是一种坏事从设计角度来看,复杂性越高 = 错误/缺陷和制造错误越多。我们似乎找到了一种折衷方案,即高效的核心足够简单,不会占用太多空间。
在目前的工艺尺寸下,单个芯片上可以容纳的内核数量已经达到极限。我们可能很快就会达到缩小芯片尺寸的极限。那么,下一步是什么?我们需要更多吗?不幸的是,这个问题很难回答。这里有谁是先知吗?
提高性能的其他方法
因此,我们无法提高时钟速度。而且更多内核还有一个缺点 - 即,只有当运行在其上的软件可以利用它们时,它们才有用。
那么,我们还能做什么呢?为什么现代 CPU 在相同的时钟速度下比旧 CPU 快得多?
时钟速度实际上只是 CPU 内部工作的一个非常粗略的近似值。并非所有 CPU 组件都以该速度工作 - 有些组件可能每两个时钟周期运行一次,等等。
更重要的是指示单位时间内可以执行的指令数。这是衡量单个 CPU 核心可以完成多少任务的更好方法。有些指令需要一个时钟周期,有些则需要三个时钟周期。例如,除法比加法慢得多。
因此,我们可以通过增加 CPU 每秒可执行的指令数量来提高其性能。怎么做?嗯,你可以让指令更高效 - 也许除法现在只需要两个周期。然后是指令流水线通过将每条指令分解为多个阶段,就可以“并行”执行指令 - 但每条指令仍然具有与其前后指令明确定义的连续顺序,因此它不需要像多核那样的软件支持。
有其他方式:更专业的指令。我们已经看到了像 SSE 这样的东西,它提供一次性处理大量数据的指令。不断有新的指令集被引入,其目标也类似。这些指令集同样需要软件支持,并增加了硬件的复杂性,但它们提供了不错的性能提升。最近,出现了 AES-NI,它提供硬件加速的 AES 加密和解密,比用软件实现的一堆算法快得多。
1无论如何,如果不深入研究理论量子物理学的话,就无法做到这一点。
2实际上可能更低,因为电场传播速度不如真空中的光速快。另外,这只是直线距离——很可能至少有一条路径比直线长得多。
答案2
物理就是物理。我们不可能永远把更多的晶体管塞进越来越小的空间里。在某个时候,它会变得太小,以至于你要处理奇怪的量子垃圾。在某个时候,我们无法塞进两次一年内产生的晶体管数量和以前一样多(这就是摩尔定律的含义)。
原始时钟速度毫无意义。我的旧 Pentium M 时钟速度大约是当代台式机 CPU 的一半(但在许多方面快点)——现代系统仅仅接近 10 年前的系统速度(而且速度明显更快)。基本上,“仅仅”提高时钟速度在很多情况下并不能带来真正的性能提升。它可能有助于一些单线程操作,但你最好将设计预算花在其他方面更高的效率上。
多核让您二 一次可以处理多个任务,因此您无需等待一个任务完成后再处理下一个任务。短期内,您可以简单地将两个现有核心放入同一个包中(例如,使用奔腾Ds 和他们的 MCM(过渡设计)将使系统速度提高一倍。当然,大多数现代实现确实共享内存控制器之类的东西。
您还可以通过不同的方式构建更智能的架构。ARM 采用 Big-Little 架构——让 4 个“弱”低功耗内核与 4 个更强大的内核一起工作,这样您就可以同时获得两全其美的效果。英特尔可以让您降低节流阀(以提高电源效率)或超频具体的核心(以获得更好的单线程性能)。我记得 AMD 对模块做了一些事情。
您还可以移动内存控制器(这样延迟会更低)和 IO 相关功能(现代 CPU 没有北桥)以及视频(这对笔记本电脑和 AIW 设计来说更重要)。做这些事情比“仅仅”不断提高时钟速度更有意义。
在某些时候,“更多”核心可能行不通——尽管 GPU 有数百核心。
多核让计算机能够工作更聪明通过所有这些方式。
答案3
简单答案
这个问题最简单的答案
为什么“添加更多核心”不会面临与“使 CPU 更快”相同的物理限制?
实际上是在你的问题的另一部分中找到的:
我希望结论是“因此,我们必须拥有更大的计算机或在多台计算机上运行我们的程序。”
本质上,多核就像在同一设备上拥有多台“计算机”。
复杂答案
“核心”是计算机中实际处理指令(加法、乘法、“与”运算等)的部分。核心一次只能执行一条指令。如果您希望计算机“更强大”,可以做两件基本的事情:
- 提高吞吐量(提高时钟频率、减小物理尺寸等)
- 在同一台计算机中使用更多核心
第一个方案的物理限制主要是需要释放由处理和电路中电子的速度引起的热量。一旦你将其中一些晶体管分离到单独的核心,就可以在很大程度上缓解热量问题。
第二个问题有一个重要的限制:你必须能够将问题拆分成多个独立的问题,然后合并答案。在现代个人计算机上,这实际上不是一个问题,因为无论如何都有很多独立问题都在与核心争夺计算时间。但在处理密集计算问题时,只有当问题适合并发时,多个核心才真正有帮助。
答案4
长话短说:加速单核已经达到极限,因此我们不断缩小它们并添加更多核,直到达到极限或者我们可以换用更好的材料(或实现推翻既定技术的根本性突破,类似于家庭大小、实际工作的量子计算)。
我认为这个问题是多方面的,需要一些文字来描绘更完整的图景:
- 物理限制(由实际物理学施加):例如光速、量子力学等等。
- 制造问题:我们如何制造出具有所需精度的更小结构?原材料相关问题,用于制造电路的材料,耐久性。
- 架构问题:热量、推理、功耗等。
- 经济问题:为用户提供更高性能的最便宜的方法是什么?
- 用例和用户对性能的感知。
可能还有很多。多用途 CPU 正在尝试找到一种解决方案,将所有这些因素(以及更多因素)整合到一个可量产的芯片中,该芯片可满足市场上 93% 的需要。如您所见,最后一点是最重要的一点,即客户感知,它直接源于客户使用 CPU 的方式。
问问自己,您通常使用什么应用程序?也许是:25 个 Firefox 选项卡,每个选项卡都在后台播放一些广告,同时您正在听音乐,同时等待您大约 2 小时前开始的构建工作完成。这需要做很多工作,但您仍然希望获得流畅的体验。但您的 CPU 一次只能处理一项任务!单项任务。因此,您要做的就是,将任务分开,并创建一个长队列,每个人都有自己的份额,每个人都很开心。除了您,因为所有事情都变得滞后,一点也不流畅。
因此,您需要加快 CPU 的速度,以便在相同的时间内执行更多操作。但正如您所说:热量和功耗。这就是原材料部分。硅越热,导电性就越强,这意味着加热时流过材料的电流越多。晶体管切换速度越快,功耗就越高。此外,高频会使短线之间的串扰更严重。所以您看,加快速度的方法会导致“崩溃”。只要我们没有比硅更好的原材料或更好的晶体管,我们就只能停留在单核速度上。
这让我们回到了开始的地方。并行完成任务。让我们添加另一个核心。现在我们实际上可以同时做两件事。所以让我们冷静一点,编写可以将其工作分成两个功能较少但功能更多的核心的软件。这种方法有两个主要问题(此外,软件世界需要时间来适应它):1. 使芯片更大,或使单个核心更小。2. 有些任务根本无法分成两个同时运行的部分。只要你可以缩小它们,或者使芯片更大并控制热量问题,就继续添加核心。哦,让我们不要忘记客户。如果我们改变用例,行业就必须适应。看看移动行业想出的所有闪亮的“新”东西。这就是为什么移动行业被认为如此重要,每个人都想得到它。
是的,这种策略终究会达到极限!英特尔也知道这一点,所以他们说未来在别处。但只要这种策略便宜、有效且可行,他们就会继续这样做。
最后但并非最不重要的一点是物理学。量子力学将限制芯片的缩小。光速还不是极限,因为电子在硅中不能以光速传播,实际上它比光速慢得多。此外,脉冲速度是材料提供的速度的硬性上限。就像声音在水中比在空气中传播得更快一样,电脉冲在石墨烯等材料中的传播速度也比在硅中快。这又回到了原材料的问题上。就其电性能而言,石墨烯非常出色。它可以成为制造 CPU 的更好的材料,不幸的是,它很难大量生产。