任务
综述在计算机发展中两个例子,详细描述当时的技术背景,所描述的对象,总结其特点、进步点、推动计算机技术发展的价值和意义、缺陷及后续技术改进等,鼓励图文并茂。
意义
热点新闻是厂商发布高性能的CPU,内行人士可以感受到不同代际间的发展变化,但外行看到各种参数只是不明觉厉,不知晓其中的突破点与先进性。但正如绪论中让人印象深刻的一个观点:硬件工程师需要理解软件需求以得到研发方向,而软件工程师在理解硬件的基础上能使软件的性能得到最大程度的提升。因此,对CPU进行了解是有必要的,这是本次综述选题的出发点。
技术背景
最初计算机的目的正是为了计算,大多数采用的数制是10进制,即每一位由10个真空管表示。在1949年,轻量化BINAC(Binary Automatic Computer)的诞生使工业界向二进制的方案趋近,不过二进制的具体表示在原码、反码和补码的摇摆中才过度到现代的补码表示。
在计算机发明之初,它的软硬件设计是独特的,即使同一公司生产的不同产品也无法共享程序。因此公司的用户粘性很低,更新换代的优先考虑是价格与性能,而非无法沿用数据的旧产品的下一代。IBM公司注意到这一痛点,新的研发方案致力于打造可以使软件通用的不同性能的产品线,这样可以使用户根据需求变化沿用系列产品,这是IBM 360的诞生契机,也是第一个里程碑式指令集的架构的出现,在后面对CPU特点的论述中,可以看到指令集正是CPU的核心所在。
当然,此时的CPU由于生产工艺与电子器件限制,仍然是巨型的机器,对于IBM 360系列部分产品的相关参数如下表所示:
Model | Announced[14] | Memory size (in (binary) KB) | Weight (lbs) | Notes |
30 | Apr 1964 | 8-64[16] | 1700 (770 kg)[17]:2030.1 | |
40 | Apr 1964 | 16-256[18] | 1700-2310 (770-1050 kg) depends on memory.[17]:2040.1 | |
50 | Apr 1964 | 64-512[19] | 4,700-7,135 (2,100-3,236 kg) depends on memory.[17]:2050.2,2050.4 | Supported IBM 2361 Large Capacity Storage (LCS). |
20 | Nov 1964 | 4-32[20] | 1,200–1,400 (540–640 kg)[21] | 16-bit, low end, limited partially incompatible instruction set |
91 | Jan 1966[14]:p.394 | 1,024-4,096[22] | Available on special bid beginning Nov 1964[14]:388 | |
64-66 | Apr 1965 | Replaced by Model 67 | ||
65 | Apr 1965 | 128-1,024[23] | 4290-8830 (1950-4005 kg) depends on memory and number of processors.[17]:2065.2,2065.4,2065.6,2065.8,2065.10 | Supported LCS |
75 | Apr 1965 | 256-1,024[24] | 5125-5325 (2325-2415 kg) depends on memory.[17]:2075.2,2075.4 | Supported LCS |
67 | Aug 1965 | 512-2,048[25] | 3674 (1700 kg) – Processor only.[17]:2067.6 | Dynamic address translation for time sharing |
44 | Aug 1965 | 32-256[26] | 2900-4200 (1300-1900 kg) depends on memory.[17]:2044.2 | Specialized for scientific computing |
95 | special order | 5,220[27] | Performance estimated as 2× Model 91[14]:p.394 | |
25 | Jan 1968 | 16-48[28] | 2050 (930 kg)[17]:2025.2 | |
85 | Jan 1968 | 512-4,096[29] | 14428 (6544 kg) – Processor only.[17]:2085.2 | 16-32 KB cache memory, extended-precision floating point. |
195 | Aug 1969 | 1,024-4,096[30] | 13450-28350 (6150-12900 kg) depends on memory.[17]:3195.2,3195.4 | 32 KB IC cache memory. Performance estimated as 3× Model 85.[14]:p.422 |
22 | Apr 1971 | 24-32[31] | 1500 (680 kg)[17]:2022.1 | A re-manufactured Model 30 |
可见,整机重量在最后一代的680Kg也带给我们庞然大物的感受,是远远不能为个人计算机所用的。这一问题的转机在1959年,MOSFET被贝尔实验室发明,集成电路在60年代得到长足的发展,直到1971年迎来第一片微型处理器芯片Intel 4004的诞生,它的特征尺寸只有10μm,与此前的动辄上百千克形成天壤之别,也使得计算机走进千家万户成为可能。
定义
中央处理器 (英语:Central Processing Unit,缩写:CPU)是计算机的主要设备之一,功能主要是解释计算机指令以及处理计算机软件中的数据。计算机的可编程性主要是指对中央处理器的编程。
特征
中央处理器的一大核心特征是架构——展开便是指令集架构,它做为硬件与软件之间的一个抽象层。具体来讲,指令是处理器进行操作的最小单元,软件无需修改即可完全运行任何一款遵循同一指令集架构实现的处理器上。综上,指令集架构这一抽象层构成处理器底层硬件与运行软件的桥梁与接口,使得软硬件分离开发成为可能。
当我们对CPU的一些特征名词进行学习后,可以进一步了解它的实际工作原理,将维基百科资料中关于CPU的原理部分引用如下:
CPU的主要运作原理,不论其外观,都是执行储存于被称为程序里的一系列指令。在此讨论的是遵循普遍的冯·诺伊曼结构(von Neumann architecture)设计的设备。程序以一系列数字储存在计算机存储器中。差不多所有的冯·诺伊曼CPU的运作原理可分为四个阶段:提取、解码、执行和写回。
第一阶段,提取,从程序内存中检索指令(为数值或一系列数值)。由程序计数器指定程序存储器的位置,程序计数器保存供识别目前程序位置的数值。换言之,程序计数器记录了CPU在目前程序里的踪迹。提取指令之后,PC根据指令式长度增加存储器单元[iwordlength]。指令的提取常常必须从相对较慢的存储器查找,导致CPU等候指令的送入。这个问题主要被论及在现代处理器的缓存和管线化架构(见下)。
CPU根据从存储器提取到的指令来决定其执行行为。在解码阶段,指令被拆解为有意义的片段。根据CPU的指令集架构(ISA)定义将数值解译为指令[isa]。一部分的指令数值为运算码,其指示要进行哪些运算。其它的数值通常供给指令必要的信息,诸如一个加法运算的运算目标。这样的运算目标也许提供一个常数值(即立即值),或是一个空间的定址值:寄存器或存储器地址,以定址模式决定。在旧的设计中,CPU里的指令解码部分是无法改变的硬体设备。不过在众多抽象且复杂的CPU和ISA中,一个微程序时常用来帮助转换指令为各种形态的讯号。这些微程序在已成品的CPU中往往可以重写,方便变更解码指令。
在提取和解码阶段之后,接着进入执行阶段。该阶段中,连接到各种能够进行所需运算的CPU部件。例如,要求一个加法运算,算术逻辑单元将会连接到一组输入和一组输出。输入提供了要相加的数值,而且在输出将含有总和结果。ALU内含电路系统,以于输出端完成简单的普通运算和逻辑运算(比如加法和位操作)。如果加法运算产生一个对该CPU处理而言过大的结果,在标志寄存器里,溢出标志可能会被设置(参见以下的数值精度探讨)。
最终阶段,写回,以一定格式将执行阶段的结果简单的写回。运算结果经常被写进CPU内部的寄存器,以供随后指令快速访问。在其它案例中,运算结果可能写进速度较慢,如容量较大且较便宜的主存。某些类型的指令会操作程序计数器,而不直接产生结果资料。这些一般称作“跳转”并在程序中带来循环行为、条件性执行(透过条件跳转)和函数。许多指令也会改变标志寄存器的状态比特。这些标志可用来影响程序行为,缘由于它们时常显出各种运算结果。例如,以一个“比较”指令判断两个值的大小,根据比较结果在标志寄存器上设置一个数值。这个标志可借由随后的跳转指令来决定程序动向。
来自 <https://zh.wikipedia.org/wiki/%E4%B8%AD%E5%A4%AE%E5%A4%84%E7%90%86%E5%99%A8#ref_riscpipeline>
以上过程可以通过数字逻辑课程中学习过的有限状态机来实现,即每个时钟周期进行一个操作,这正是8位单片机时代中一代传奇8051内核的实现原理;当然,现代处理器的设计中主要采用流水线思想设计处理器,可以起到以空间换时间的作用。如下图所示,流水线作业可以在同一时钟周期中同时进行数项不同活动,随着任务精细程度的提高可以进一步加深流水线。但在寄存器会随流水线级数增多而增多的制约下,流水线的深度具有限度。
主要参数与发展
主频
CPU 频率由 3 个因素决定:
- BCLK 或基本时钟速度。这是 CPU 的基本频率,通常以 GHz 为测量单位。
- 倍增系数或 “内核倍增系数”。每个 CPU 内核都有一个倍增系数。将这些倍增系数应用于基本时钟频率,其结果就是内核频率,通常以 GHz 为测量单位。
- Vcore 或内核电压。这是处理器的主要输入电压。要获得更高的稳定 CPU 频率,就需要更高的电压水平,因为更快的速度需要更多的功率。更高的内核电压也会导致更高的热量输出和更大的 CPU 功耗。
简而言之:BCLK x 倍增系数 = CPU 内核频率。
早期的CPU并没有“倍频”这个概念,那时主频和系统总线的速度是一样的。随着技术的发展,CPU速度越来越快,内存、硬盘等配件逐渐跟不上CPU的速度了,而倍频的出现解决了这个问题,它可使内存等部件仍然工作在相对较低的系统总线频率下,而CPU的主频可以通过倍频来无限提升(理论上)。我们可以把外频看作是机器内的一条生产线,而倍频则是生产线的条数,一台机器生产速度的快慢(主频)自然就是生产线的速度(外频)乘以生产线的条数(倍频)了。
CPU的性能和速度取决于时钟频率(一般以赫兹或千兆赫兹计算,即hz与Ghz)和每周期可处理的指令(IPC),两者合并起来就是每秒可处理的指令(IPS)。[1] IPS值代表了CPU在几种人工指令序列下“高峰期”的运行率,指示和应用。而现实中CPU组成的混合指令和应用,可能需要比IPS值显示的,用更长的时间来完成。而内存层次结构的性能也大大影响中央处理器的性能。通常工程师便用各种已标准化的测试去测试CPU的性能,已标准化的测试通常被称为“基准”(Benchmarks)。如SPECint,此软件试图模拟现实中的环境。测量各常用的应用程序,试图得出现实中CPU的绩效。
在历史的进程中,各芯片公司不断提升主频。intel因为和AMD的1GHz之战而冒进,最终导致180nm的奔腾3(1.13GHz)倒在FDIV BUG门。虽然主频对于CPU的性能带来很大的提升,但它对应高功耗的散热瓶颈存在,并不能无限增长。奔腾3被AMD打败,奔腾4 临危受命,接过奔腾3 的接力棒,想要打败ADM的速龙。英特尔计划做出一个频率超级高的架构,然而结果是一个高频低能的奔腾4,超高的频率让不能忍受超高热量的网友开发出了奔腾4处理器的更多用途:烤肉,煮火锅……
多核
为提高电脑的处理性能,另一个角度是使用多核心处理器。原理基本上是一个集成电路插入两个以上的处理器[2]。在理想的情况下,双核心处理器性能将是单内核处理器的两倍。然而,在现实中,因不完善的软件算法,多核心处理器性能增益远远低于理论,增益只有50%左右。但增加核心数量的处理器,依然可增加一台计算机可以处理的工作量。这意味着该处理器可以处理大量的不同步的指令和事件,可分担第一核心不堪重负的工作。有时,第二核心将和相邻核心同时处理相同的任务,以防止崩溃。
同样列举竞争焦灼的intel与AMD,两家公司分别在不同时期占据上风,正是对多核的技术攻关占主要因素。
2005 年 AMD发布双核 Athlon 64 X2,挑战 Intel 的“假”双核 Pentium D(由两颗 Pentium 4 共享FSB 组成)。 2003-2006 年是 AMD 最辉煌的时候, 这也是 Intel 最难熬的几年。
此后,Intel 提出 Tick-Tock 战略,即 2 年一次的工艺制程进步,正式基于这个策略,2006年后 Intel 逆转了局面。 Intel 在 2006 年发布 Core 2, 采用的是 65nm 工艺,使得效能增长 40%,同时功耗减少 40%。这让 AMD 的 Athlon 优势全无, 性能上的竞争力重新回到Intel(直到今天),高端双核市场由 Intel 重新主导。虽然 AMD 发布了四核 Phenom,但是因为性能不足,敌不过 Intel。同时,在 2006 年 AMD 以 54 亿美元收购显卡巨头 ATI,CPU 和显卡双双不给力使得 AMD 在 2007 年进入低迷。
位数
最常听到的分别是32位与64位架构,位数指通用寄存器的宽度,决定寻址范围的大小,数据运算能力强弱。容易混淆的概念是位数其实与指令编码长度无关,后者实际上越小越好,以节省代码的存储空间。
目前个人计算机的主流都是64位架构,而嵌入式微处理器逐渐向32位转移,可见,微处理器的发展要适应行业需求。
曲线改善
更高的整数精度需要更多线路以支持更多的数字比特,也因此结构更复杂、更巨大、更花费能源,也通常更昂贵。因此尽管市面上有许多更高精准度的CPU(如16,32,64甚至128位),但依然可见应用软件执行在4或8位的微控制器上。越简单的微控制器通常较便宜,花费较少能源,也因此产生较少热量。这些都是设计电子设备的主要考量。然而,在专业级的应用上,额外的精度给予的效益(大多是给予额外的地址空间)通常显著影响它们的设计。为了同时得到高与低位宽度的优点,许多CPU依照不同功用将各部分设计成不一样的位宽度。例如IBM System/370使用一个原为32位的CPU,但它在其浮点单元使用了128位精度,以得到更佳的精确度与浮点数的表示范围(Amdahl et al. 1964)。许多后来的CPU设计使用类似的混合位宽,尤其当处理器设计为通用用途,因而需要合理的整数与浮点数运算能力时。
计算机技术发展的价值和意义
科学计算
计算机为科技计算而生,当CPU不断升级后,对高精度要求的科学计算助力颇多。下图为CPU的一款测试软件,Super PI Mod,通过计算圆周率Π的超长位数记录所需时间,来体现CPU的性能。这里可见,平均仅需约0.1s,即可完成一次小数点后1.6万个数值的计算,相比于祖冲之用15年时间计算圆周率,精确到小数点后7位,可以一窥它对科学计算的发展支撑。
具体来讲,GEMM一般矩阵乘法,FFT快速傅里叶变换以及其他相关的矩阵变换是科学计算性能的重要理论指标,随着计算数据集的大小不同,对CPU的AVX+FMA性能,内存容量和内存带宽,CPU频率都有一定的需求。
游戏渲染
在个人计算机的市场中,对CPU最热捧的一批人莫过于高端游戏玩家。CPU的发展也极大提升游戏体验,带给人们影音娱乐的享受。
加密/解密
加密解密性能在日常中也有用武之地,但实际在网页浏览,即时通讯过程中经常会有加密和对发送的消息解密和校验的操作。
缺陷及后续技术改进
CISC与RISC
分别代表复杂指令集和精简指令集,前者先登上历史舞台,而在发展中后者显示出的优点,使其逐渐成为主流。
但x86做为从个人计算机到服务器都占据主要市场的CPU架构,因为主要厂商intel与AMD为保证产品向下兼容而保留市场,一直采用最初的CISC指令架构,因此不可避免具有缺陷。但它们以先进的生产工艺与工程思维加持,使用“微码化”的方法克服掉部分缺点。
微码化
将复杂的CISC指令先用硬件解码器翻译成对应的内部简单指令序列,在送给处理器流水线执行,从而借鉴RISC的优点。
参考资料
- https://en.wikipedia.org/wiki/History_of_general-purpose_CPUs
- https://zh.wikipedia.org/wiki/%E4%B8%AD%E5%A4%AE%E5%A4%84%E7%90%86%E5%99%A8
- BINAC
- Description of the BINAC
- 《手把手教你设计CPU——RISC-V处理器》
- 《外媒评史上最糟糕的十大CPU 奔3/奔4、推土机入选》来自 <https://article.pchome.net/content-2075739.html>
- 《史上最烂的CPU,可以烤肉煮火锅的奔腾4才排第二》http://news.yxrb.net/201808/0683622.html
- 为什么主流CPU的频率止步于4G?我们触到频率天花板了吗? – 老狼的文章 – 知乎 https://zhuanlan.zhihu.com/p/30409360
- https://en.wikipedia.org/wiki/Intel_4004
- 30多年的CPU竞争,给中国带来什么启示? – 搜狐网https://www.sohu.com/a/213661580_132567?trans=010004_pcwzy
- 什么是时钟速度?https://www.intel.cn/content/www/cn/zh/gaming/resources/cpu-clock-speed.html
- 《英特尔多核/多线程技术》
- 高频有必要吗?实测高低频DDR4内存差异http://diy.zol.com.cn/575/5757496_all.html
- Super PI Single-threaded Benchmark http://www.superpi.net/
- 8核16线程的对比,Zen2(Matisse)与Skylake微架构之CPU性能对比 – JZWSVIC的文章 – 知乎 https://zhuanlan.zhihu.com/p/73691691