为什么更多的晶体管 = 更多的处理能力?

电器工程 微处理器 中央处理器 建筑学
2022-01-27 03:11:52

根据维基百科,处理能力与摩尔定律密切相关:

http://en.wikipedia.org/wiki/Moore's_law

可以廉价放置在集成电路上的晶体管数量大约每两年翻一番。这一趋势已经持续了半个多世纪,预计要到2015年或更晚才会停止。许多数字电子设备的功能与摩尔定律密切相关:处理速度、内存容量、传感器,甚至数码相机中像素的数量和大小。所有这些都以(大致)指数速度改善。

作为具有计算机体系结构背景的人,我不明白为什么在 CPU 中投入更多晶体管会提高其功率,因为​​最终,指令是按顺序大致读取/执行的。谁能解释我缺少哪一部分?

4个回答

很多给你更多力量的东西只需要更多的晶体管来构建它们。更宽的总线在几乎所有处理器组件中都增加了晶体管数量。高速缓存根据缓存大小添加晶体管。如果您延长管道,则需要添加阶段和更复杂的控制单元。如果您添加执行单元以帮助缓解流水线中的瓶颈,则每个都需要更多的晶体管,然后保持分配执行单元的控制会增加更多的晶体管。

问题是,在电子电路中,一切都是并行发生的。在软件世界中,默认设置是顺序的,软件设计人员不遗余力地将并行性内置到软件中,以便利用硬件的并行性。并行性只是意味着同时发生更多的事情,因此大致等同于速度;可以并行完成的事情越多,完成任务的速度就越快。唯一真正的并行性是当你有更多的晶体管在工作时你会得到什么。

即使在非 VLIW ISA 上,第一条指令也不一定“按顺序执行”,执行只需要按顺序执行。有序超标量实现可以与另一条指令并行执行多条指令。为了有效地做到这一点,必须增加(加宽)解码指令的硬件,必须增加硬件以确保并行执行的指令的数据独立性,必须增加执行资源,并且通常会增加寄存器文件端口的数量。所有这些都增加了晶体管。

一种乱序实现,只要没有数据依赖关系,就允许后面的指令在前面的指令之前执行,一旦数据可用,它就会使用额外的硬件来处理指令的调度,并添加重命名寄存器和用于映射的硬件,分配和释放它们(更多晶体管)以避免读后写和写后写危险。乱序执行允许处理器避免停顿。

乱序处理器中加载和存储的重新排序需要确保在程序顺序中较早的存储将结果转发到相同地址的稍后加载。这意味着地址比较逻辑以及存储地址(和大小)的存储(以及数据的存储),直到存储被提交到内存(缓存)。(对于具有较弱内存一致性模型的 ISA,还需要检查负载是否根据来自其他处理器的存储(更多晶体管)正确排序。)

流水线增加了一些额外的控制和缓冲开销,并防止指令处理的不同部分重用逻辑,但允许处理指令的不同部分在不同指令的时间上重叠。

流水线和超标量执行增加了控制风险(即条件分支和跳转)的影响。流水线(以及无序执行)甚至可以延迟无条件跳转目标的可用性,因此添加硬件来预测目标(以及条件分支的方向)允许继续获取指令而无需等待执行部分处理器以提供必要的数据。更准确的预测器往往需要更多的晶体管。

对于乱序处理器,可能希望在计算所有先前存储的地址之前允许从内存加载执行,因此需要一些硬件来处理这种推测,可能包括预测器。

缓存可以减少延迟并增加内存访问的带宽,但添加晶体管来存储数据和存储标签(并将标签与请求的地址进行比较)。还需要额外的硬件来实施更换政策。硬件预取将增加更多晶体管。

在硬件而不是软件中实现功能可以提高性能(同时需要更多的晶体管)。例如,TL​​B 管理、复杂运算(如乘法或浮点运算)、特殊运算(如计数前导零)。(添加指令也会增加指令解码的复杂性,通常也会增加执行的复杂性——例如,控制将使用执行硬件的哪些部分。)

SIMD/向量操作增加了每条指令执行的工作量,但需要更多的数据存储(更宽的寄存器)并且通常使用更多的执行资源。

(推测性多线程还可以让多个处理器更快地执行单个线程程序。显然,将处理器添加到芯片会增加晶体管数量。)

拥有更多可用晶体管还可以让计算机架构师为 ISA 提供更多对软件可见的寄存器,从而潜在地降低内存访问的频率,这种频率往往比寄存器访问慢并且涉及某种程度的间接(例如,向堆栈添加偏移量)指针),这会增加延迟。

集成——它增加了芯片上晶体管的数量,而不是系统中的晶体管数量——减少了通信延迟并增加了带宽,显然可以提高性能。(功耗也会降低,这可能会转化为性能提高。)

即使在指令执行级别,添加晶体管也可以提高性能。例如,进位选择加法器将高位并行添加两次,同时对低位进位的不同假设,当低位进位可用时选择正确的高位之和,显然需要更多的晶体管而不是简单的纹波进位加法器,但减少了产生全和的延迟。类似地,具有单行进位保存加法器的乘法器使用的晶体管比达达(或华莱士)树乘法器更少(但速度更慢),并且不能流水线化(因此必须复制以允许另一个乘法开始执行,而之前的乘法正在进行中)。

以上内容可能会让人筋疲力尽,但并不详尽!

晶体管的数量不一定与更多的处理能力相关,但是,使用更多的晶体管,处理器可以执行比以前越来越复杂的指令。例如,具有 SSE 的处理器将使用额外的晶体管来实现这些复杂的指令(例如,在一个周期中添加许多数字。)

近年来,微处理器取得了长足的进步,诸如更长的流水线、预测分支和片上缓存等都增加了与处理器相关的复杂性。

当然,CPU 处理、获取、解码、ALU、写入的基础知识仍然相同,但为了加快速度,使用了更长的管道。更长的管道会提高连续代码执行的性能,但也会在代码分支损坏性能时产生更大的命中时间。补救,预测分支。预测分支是一个商业秘密,英特尔通常不会透露其全部工作原理,只是简单地使用它来保持其 CPU 的性能尽可能高。

高速缓存比 RAM 快得多,但是从 RAM 移动到高速缓存以及从高速缓存移回 RAM 的内容是什么?这又是专有的东西,但它又需要晶体管来实现。

因此,额外的晶体管进入了更长的流水线、预测分支算法、高速缓存和内存算法之类的东西。

这没有提到多核处理器和共享内存/资源访问控制器。