CPU = 运算器 + 控制器
CPU的主要任务就是由控制器指挥计算机中的其他部件一起协同工作,并且由运算器执行数值计算。
CPU指挥计算机中的其他部件工作。CPU是程序的调用者和运行者,程序的每一条指令都要经过CPU的解析和执行。外界向计算机输入数据,需要CPU进行接收;程序运行结束后,需要CPU发出指示才能把计算结果输出给外界。
CPU是计算机中最复杂的芯片。CPU采用的是超大规模集成电路,现代的芯片制造技术可以在一根头发丝的宽度上排列1000根电路连线。台式计算机中的一个芯片就能包含50亿个晶体管,而人脑中的神经元的数量也就在800亿个左右。一台计算机中,CPU是复杂度最高、工作最繁忙的部件。
主流CPU中的晶体管数量
专用CPU运行的操作系统也往往是根据需求定制的。例如在汽车上,面向整车状态监测而专门设计一个CPU,只用于监测特定的物理量,软件固化烧写在CPU内部的存储模块中。在可穿戴设备中,针对节省电能的要求设计的结构简单、低主频、低功耗的CPU。在智能门锁中,为了支持按键、刷卡、蓝牙等多种开锁方式而专门设计的低功耗CPU。
按照制造工艺,可以将CPU分成电子管CPU、晶体管CPU、集成电路CPU,以及超大规模集成电路CPU。
● 电子管CPU是第一代,使用时间从1945年到20世纪50年代末。● 晶体管CPU是第二代,主要活跃于20世纪50年代末到20世纪60年代。1954年,美国贝尔实验室研制出世界上第一台全晶体管计算机TRADIC,装有800个晶体管。
● 集成电路CPU是第三代,始祖是1971年发布的Intel 4004,这也是世界上第一款商用计算机微处理器,在一块芯片上集成2250个晶体管。
● 超大规模集成电路CPU是第四代,一般是指所包含的晶体管数量庞大(例如超过100万个)的芯片。
控制器(CC)在一个时钟模块的驱动下工作。时钟模块以一定频率向控制器发出信号,这个频率称为计算机的“主频”。每次这个信号到来时,控制器内部的地址计数器会增加1。地址计数器的内容发送给存储器中的数据选择器,数据选择器会把指令队列中对应该地址的单元内容发送给控制器,并保存在控制器内部的一个存储单元中。控制器内部的存储单元称为“寄存器”。由于从存储器中取出的数据代表指令,因此这个单元称为“指令寄存器”。
主频越高,显然计算机在单位时间内能完成的工作就越多。
如果时钟频率过高,会导致一条指令还没执行完,下一条指令又在等待处理,计算机会进入不可控状态。
虽然SPEC CPU有诸多不足,但是它目前仍然是衡量计算机性能的最权威工具。无论是修改编译器,还是为了跑分高而在CPU中加入专门的设计,都有“骗测试集”之嫌,但是想把SPEC CPU分值提高到一流水平仍然是需要硬实力的。
CPU的发展主要受三方面动力的驱使:第一是应用需求牵引,科学家需要更快的计算速度,人们需要在CPU上运行更复杂的软件,拉动CPU实现更高性能;第二是生产工艺进步,半导体集成电路技术能够在单位面积上制造更多的计算单元;第三是科学探索的内在动力,科学家、工程师不懈地突破现有水平,追求性能更高、智能程度更高的计算机,最终目标是做出像人一样有智慧的装备。
指令集是软件和硬件的接口。从软件人员的视角来看,指令集严格规定了CPU的功能,指令集也反映了软件人员对CPU进行编程的接口,所以有时候指令集也称为“处理器架构”。
台式计算机、服务器主要采用x86指令集,手机、平板电脑主要采用ARM指令集。
增量演进”的意义是,指令集的发展只能添加新的指令,不允许删除现有的指令,也不允许改变现有指令的功能。这样做的好处是,以前的软件一定能够在新指令集的CPU上运行,新的CPU能够“继承”以前全部的软件成果。坚持这样的路线,新的计算机一定能够对老的计算机实现“向下兼容”(有的书上也叫“向前兼容”)。
在计算机发展过程中,指令集形成了两种风格,即复杂指令集计算机(Complex Instruction Set Computer,CISC)和精简指令集计算机(Reduced Instruction Set Computer,RISC)。
2000年Intel发布的CPU的指令数量已经超过1000条。
与RISC相区别的是CISC。RISC计算机指令条数一般不超过100条,每条指令长度相同,二进制编码遵循统一的规格,非常便于实现流水线式计算机和编译器调度。
现在的Intel CPU大多是外表披着CISC外壳、里面都是RISC的结构。
使用二进制表示的计算机指令,称为机器指令。机器指令是计算机电路可以直接理解和执行的指令。使用机器指令可以编写各种各样的程序,就像用人类语言写文章一样,因此机器指令也称为机器语言。
汇编语言(Assembly Language)使用一种接近自然语言的文本形式来表示二进制的机器指令。在汇编语言中,表示形式是各种方便记忆的符号,即字母和数字。
高级语言的另一个好处是“平台无关”。对于不同的指令集,汇编语言是不相同的。面向一种指令集的程序在移植到另外一种指令集时,汇编代码不能通用,几乎要从头重写。如果使用高级语言,代码对所有指令集是通用的,只需要使用新平台的编译器重新编译一遍,就可以生成面向新指令的机器代码。
造芯片和造房子有相似之处。指令集相当于房子的地基,IP核相当于房子的设计图纸,芯片相当于造好的房子。真正的好房子,地基是自己的,图纸是自己设计的,房子是自己造的。买别人的IP核攒芯片,就像是购买别人的图纸、在别人的地基上造房子,造完的房子只有使用权没有所有权。
CPU表面的温度有可能上升到100℃。这样的温度很容易烧坏芯片,所以常见的计算机内部都需要一个风扇来给CPU散热。
异构计算(Heterogeneous Computing)是指不同类型的计算单元合作完成计算任务。每个计算单元采用不同的架构,分别擅长处理某一种类型的计算任务。整个计算任务分解为小的单位,分别交给适合的计算单元来处理。
另一个本质思想是“把原来软件干的活,交给硬件来做”。在通用处理器上,具体功能由软件来实现。而软件由一段指令序列组成, CPU一条条地执行这些指令,一个较为复杂的功能往往需要多条指令,导致一个软件的执行时间与指令的数量成正比,需要占用大量指令周期才能完成一项计算任务。专用处理器可以把这样的功能通过一组电路来实现,用硬件实现等同于使用软件执行多条指令的功能,而总的执行时间远远少于用软件实现的执行时间。
异构计算的典型例子是图形处理器(Graphics Processing Unit,GPU)。例如,如果要在计算机屏幕上显示一条线段,因为CPU的每一条指令只能显示一个点,所以要执行的指令条数就是线段中包含的点的数量,这样显然是很慢的。为了加快图形的显示速度,可以设计一个专门用于显示图形的处理器(即GPU),CPU和GPU之间定义协作接口,CPU只需要告诉GPU一条线段的两个端点的坐标,然后由GPU转换成线段上每一个点的坐标,再发送给显示器进行显示。
这样的GPU可以基于非常简单的结构,但是显示图形的速度可以是通用处理器的上百倍甚至更高。最早的GPU直接以硬件方式显示直线、矩形、圆形这些几何图形,称为“2D硬件加速”功能,后来又支持立体图形的“3D加速”功能,以及播放高清视频等“视频硬解码”功能。甚至像在屏幕上显示鼠标指针这件“小事情”,由于每台计算机上都要执行,现在也是由GPU而不是CPU来做了。在现在的计算机上,如果使用媒体播放软件播放一段高清视频,可以看到CPU的执行负载往往不到5%,就是因为GPU分担了绝大部分和显示相关的计算任务。
CPU是一种高度复杂的产品,人们在设计CPU时可能有意或无意地引入非正常的功能,导致CPU存在后门(Backdoor)或漏洞(Vulnerability)。后门或漏洞都会破坏CPU的正常功能,违背CPU的安全性要求。很多资料对这两个概念不加区别地使用,实际上这两者有完全不同的含义。后门是指能够绕过正常的安全机制的方法。后门通常是设计者有意安排的,但是没有在CPU的产品资料中作为正常功能进行公布。后门可以认为是一种“有意设下的秘密通道”。漏洞是指在CPU的设计中存在的一种缺陷,可以被攻击者利用来实现非正常的功能。漏洞通常是设计者产生的疏忽,没有在测试阶段被检查出来,直到投放市场后才被外界发现。漏洞可以认为是一种“不小心造成的隐患”。使用有后门和漏洞的CPU会对信息系统的安全构成巨大的威胁。
给操作系统打补丁是解决CPU漏洞的一个常用方法。对于已经销售的CPU,如果发现有严重漏洞,不可能再做硬件修改,又不能一夜之间废弃掉,则可以在操作系统中通过软件的修改来绕开漏洞,防止CPU漏洞对信息系统的安全产生影响。
国际著名的安全漏洞库是“通用漏洞披露”(Common Vulnerabilities and Exposures,CVE)。CVE漏洞库由很多信息安全相关机构组成的非营利组织进行联合维护,组织成员来自企业、政府和学术界。只要是已经发现的漏洞,CVE都负责进行标准化的命名、编号,形成一个漏洞库,及时发布险情公告和修补措施。
美国国家漏洞数据库(U.S. National Vulnerability Database ,NVD)。
中国国家信息安全漏洞库(China National Vulnerability Database of Information Security,CNNVD)。
中国国家信息安全漏洞共享平台(China National Vulnerability Database,CNVD)。
此外一些大的安全软件厂商也都会维护自己的安全漏洞库,例如赛门铁克、绿盟科技、360安全应急响应中心等。Intel自己也有专门的安全中心,收录Intel处理器产品的漏洞信息。例如编号为INTEL-SA-00086的漏洞是安全
现代高性能CPU中几十个寄存器也就够用了寄存器(Register)是CPU中用于存储数据的单元。在运算器、控制器中,都需要有记忆功能的单元来保存从存储器中读取的数据,以及保存运算器生成的数据,这样的单元就是寄存器。这一系列单元使用“寄存器”的名称主要是为了和存储器(Memory)相区分。两者都有记忆功能,区别在于存储器是位于CPU外部的独立模块,而寄存器是位于CPU内部的单元。存储器的容量要远远大于寄存器。存储器保存了程序的输入数据和最终结果,而寄存器保存的是计算过程中的中间数据,更具有“瞬时性”。
内存访问指令有读(Read)、写(Write)两种,代表两种不同的数据传输方向。读指令是把内存单元的值加载到CPU内部的寄存器中,写指令是把寄存器的值写回到内存单元。寄存器充当了CPU和内存之间的数据交换枢纽。
缓存(Cache)是CPU和内存之间的一个数据存储区域,用来提高CPU访问内存的速度。现代计算机中的CPU运行速度远远超过内存访问速度,换句话说,内存访问速度拖慢了CPU的运行速度。例如,一个典型的64位桌面CPU,工作主频是2GHz,再加上多发射技术可以在一个时钟节拍内并行处理多条指令,这样每秒执行的指令数量就达到了100亿条,即每秒可以最多执行1010次64位整数运算。而内存的速度提升相对比较缓慢,现在台式计算机、服务器上使用的最先进的DDR4内存规范,工作在2.4GHz时的理论峰值传输速度为19200MB/s,相当于每秒只能给CPU传送2.4×109个64位整数,比CPU的速度慢了一个数量级。
当内存数据的供应速度跟不上CPU的计算速度时,CPU只能等待内存,从而白白浪费计算时间。缓存是使用比内存速度更快的半导体工艺制造的一块存储区域,CPU访问缓存的速度要远远快于内存。由于制造缓存的成本比内存高,因此缓存不可能做得太大,常见计算机的内存容量在吉字节(GB)级别,而缓存容量一般不超过几十兆字节(MB)。
操作系统引入内存管理机制,由操作系统决定应用程序可以使用哪一部分内存。应用程序只能看到分配给自身的虚拟内存,而计算机上实际安装的内存称为“物理内存”(Physical Memory)。
虚拟内存有两种实现方式。
分段:每个应用程序使用独立的一段物理内存。操作系统加载应用程序时,从物理内存中寻找一块连续的空闲区域,专门留给一个应用程序使用。
分页:物理内存分成连续的小块,每一块称为一个“页面”(Page)。应用程序本身使用的内存是连续的地址,称为“虚拟地址”(Virtual Address),由操作系统映射到不连续的物理内存
高效的外设数据传输机制:DMA控制器使外设数据直接传递到内存中,不占用CPU直接存储器访问(Direct Memory Access,DMA)是提高计算机对外设数据的处理速度的一种方法,外设可以直接向内存传送数据,不需要CPU执行I/O指令来进行中转。CPU通过I/O指令与外设进行数据交互的方式称为“直接I/O”(Direct I/O),这一方式在面对大批量数据传输时效率较低。由于每条I/O指令传输的数据有位宽限制(一般是寄存器的最大宽度),因此需要重复执行多条指令才能完成数据传输。例如在一个32位CPU中,传输1MB数据就需要执行2的20次方 ÷ 32 = 32768条指令,占用了太多CPU时间。
DMA机制是在内存与外设之间增加一个硬件模块——DMA控制器。DMA控制器与CPU独立工作。在CPU需要从外设读取大量数据时,CPU只需要告诉DMA控制器要读取的外设地址、数据长度,以及放入内存的起始地址,DMA控制器就可以独立地从外设读取数据、送入内存。在此期间,CPU可以处理其他计算任务。DMA控制器完成数据传输后,向CPU发送中断,通知CPU“数据已传输完毕”,这样CPU就可以直接使用内存中的数据了。DMA机制实现在外设(以硬盘为例)和内存之间传输数据的示意图如图所示。
虚拟化是云计算的基础。虚拟化技术使“逻辑机器”(虚拟机)和“物理机器”(真实机器)分离,提高了对逻辑机器的动态管理能力。云计算的本质是把大量机器集中到一个数据中心统一管理,目前的云计算中心都是在物理机上创建虚拟机,在虚拟机里运行应用程序、存储用户数据。如果一台物理机发生故障,它上面的虚拟机可以把所有程序和数据通过网络“迁移”到另外一台物理机上运行,从而节省了故障处理时间。云计算把计算能力转变成一种服务,虚拟化则增强了服务的可靠性、灵活性和可扩展性。
多线程(Multi-threading)是并行编程的一种技术,是指一个应用程序可以创建两个及以上独立的执行线索,这两个执行线索分别执行不同的指令序列。每一个执行线索称为一个线程(Thread)。计算机对多线程有软件、硬件两种实现方式。在软件的实现方式中,操作系统控制CPU实现“分时复用”,CPU的执行时间分成很多小的单位,在不同的时间段中分别执行不同线程的指令序列。由于时间段的单位非常小(一般在100ms以内),线程切换的速度非常快,因此给用户的感觉是所有线程在同时运行。但实际上每个线程使用的资源都只占CPU时间的一部分。在硬件的实现方式中,一个CPU核在硬件上支持多个线程的执行环境。每个线程的执行环境都包括一套寄存器、一套流水线、一套数值计算单元等。CPU可以将多个线程都以硬件的方式执行,只要实际运行的线程数量不超过CPU支持的执行环境数量,就不需要分时复用,这是真正意义上的并行执行。
计算机中最重要的固件是基本输入输出系统(Basic Input Output System,BIOS),BIOS包含了计算机在开机时需要运行的初始化程序。BIOS存储在主板上的一个“只读存储器”(Read-only Memory,ROM)芯片中,这个芯片的内容是在计算机出厂之前使用专业的生产设备写入的,出厂后就固化住,用户一般不用修改。
“流片”这个术语就是起源于磁带设备。磁带设备保存的是流式信息(即必须从前到后顺序式地访问,不能像磁盘一样任意访问所有位置),所以把GDS2文件交给厂家的过程叫作tapeout,中文就翻译成“流片”。现在网络发达,已经不再需要使用磁带设备,但是“流片”这个习惯用语还是一直在使用。
CPU的纳米工艺是指栅极沟道的最小宽度纳米技术(Nanotechnology)是利用单个原子、分子来生产制造物质的技术。广义来讲,凡是生产制造工具的可控精度在纳米级别,或者生产材料的测量尺度在纳米级别的,都可以算是纳米技术。“纳米级别”通常是指0.1nm~100nm,是目前微加工技术的极限。
在网络文章中,CPU的纳米工艺经常被描述为“两个晶体管的间距”,或者被描述为“晶体管本身的大小”,严格讲都是不准确的,这是典型的科学传播中产生的讹误。无论是晶体管的间距,还是晶体管本身的大小,都要大于栅极的宽度。栅极的宽度对芯片的功耗和响应速度都有影响。电流通过栅极时会损耗,栅极越窄则芯片的功耗越小。栅极越窄也可以使晶体管的导通时间变短,有利于提升芯片的工作频率。
地壳里各种元素的含量,硅是非常充足的资源
硅又是一种非常合适的半导体(Semiconductor)材料。半导体的定义是指常温下导电性能介于导体与绝缘体之间的材料。
地壳里各种元素的含量,硅是非常充足的资源
Intel的成功之道不仅在于技术,Intel的CPU性能与同时代的竞争者相比并没有明显优势,在CPU史上作为性能标杆的CPU很少出自Intel。Intel成功的真正原因是选择了正确的生态建设模式,在CPU指令集、计算机整机、操作系统这3个层面坚持了向下兼容和标准化。
● x86指令集严格遵守“向下兼容”原则,新的CPU只允许增加指令,不允许删除或改变原有指令。
● IBM对PC整机定义了标准规范,任何计算机厂商都可以使用x86制造计算机,这个开放的生态阵营最有生命力,厂商群体越来越庞大,不同品牌的计算机里面使用的都是x86的CPU。
● Windows对应用程序保持向下兼容。Windows向应用程序提供的编程接口称为Win32API,包含了Windows内核中的系统调用规范,多年不变。
“开放”和“兼容”是x86生态的两个法宝,用户选择了x86就能够拥有越来越多的应用程序,而应用程序正是生态中最有价值的资源。30年前的Windows应用程序在现在的x86计算机上仍然能运行。用户依赖于应用程序,间接地依赖于能够长期运行这些应用程序的Windows和x86。
Intel与AMD的竞争贯穿了CPU发展史。Intel是公认的伟大公司,而AMD更像是可敬的斗士。Intel产品发展最快的时候,往往是被AMD逼得最紧迫的时候。虽然AMD难以摆脱“江湖第二”的追随者命运,AMD的市值体量仅有Intel的1/10,但AMD的存在明显促进Intel的更快发展,给一个良好生态创造有益的竞争压力。
ARM一直在向台式计算机和服务器领域进军。台式计算机和服务器厂商迫切希望有在x86之后接盘的新生势力,ARM的服务器CPU性能已经不低于Intel至强系列,ARM在云计算、数据中心的前景广阔。
苹果公司首先是一个计算机公司,从苹果计算机诞生的1976年到现在,苹果计算机使用的都是第三方公司的CPU,经历了“MOS 6502—Motorola 68000—PowerPC—x86”的曲折历程。苹果公司自主研发的A系列CPU最开始只用于智能手机、平板电脑。2010年推出的iPhone 4首次搭载了苹果公司自研的A4处理器。
苹果公司在移动处理器方面的实力可以称得上是世界第一位。2020年推出的A14是世界上性能最高的ARM处理器,是业界首款5nm制程芯片,封装 118 亿个晶体管,集成6核CPU、4核GPU、16 核神经网络引擎。A14的性能与Intel、AMD的台式计算机CPU相比也毫不逊色。世界上其他的手机CPU厂商都在追赶苹果A系列的路上,例如高通、三星、华为海思、联发科等。
苹果公司于2020年11月开始销售搭载ARM处理器的台式计算机、笔记本计算机。这标志着苹果计算机在使用x86处理器17年后将再次换“芯”,转入ARM生态。
Power处理器是IBM的看家处理器,出身高贵,走“高端+高价”路线,性能、I/O带宽、可靠性、可维护性使Intel望洋兴叹。虽然近年来Power的中低端市场逐渐受到Intel至强的侵蚀,但是像金融核心系统等市场还是被Power雄踞。
手机领域。2019年,苹果一家占据了全球智能手机行业66%的利润和32%的手机销售总收入。三星排在全球智能手机行业利润榜的第二位,占整个手机行业利润的17%。华为手机利润率排在第三位,约占10%。在手机CPU企业方面,紫光展锐是国内第二大芯片设计企业,生产CPU芯片卖给手机企业,而利润率低于3%。
手机CPU的设计难度很低。任何厂商都可以拿到ARM授权的公版设计资料生产芯片,世界上能做ARM芯片的有几百家企业。手机的设计则有较高难度,既要美观漂亮,又要操作系统流畅,还要待机时间长。世界上能做“好手机”的知名厂商不到10家,这其中苹果手机的研发投入最大,在整体质量上能保持先进,解决方案也比Android手机更优秀。所以在手机领域,苹果手机利润率最高,三星、华为做Android手机的利润率就要低一些,做手机CPU的厂商则几乎无利润可言。
开放的Android-ARM体系。ARM向全球半导体企业提供芯片授权,Android操作系统免费开放所有源代码。ARM、Android向生态输出了巨大的价值,任何手机厂商都能够使用Android和ARM制造手机。全球智能手机市场中Android-ARM组合占87%,远远超过封闭单一的苹果手机。
Linux在优化方面也明显乏力。Linux社区缺乏像苹果公司这样高度重视优化用户体验的专业团队,Linux的桌面操作系统和应用软件的界面设计相对滞后。Linux已经发展30年,在台式计算机市场占据的市场份额仅为1.29%。Android操作系统是Google公司自己把Linux的图形界面推倒重来、完全重写,才满足了手机、平板电脑的体验需求。
商界有一条名言流传已久,套用在CPU上同样适用:一流的企业做标准(对应到CPU是知识产权),二流的企业做品牌(对应到CPU是生态),三流的企业做产品(对应到CPU是芯片制造)。