汇编语言与接口技术
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

1.1 微处理器

微处理器(Microprocessor)简称µP、MP或MPU(Microprocess Unit)。微处理器是微型计算机的核心,它的性能决定了整个计算机的各项关键指标。MPU是采用大规模和超大规模集成电路技术将算术逻辑单元ALU(Arithmetic Logic Unit)、控制单元CU(Control Unit)和寄存器组(Registers)三个基本部分及内部总线集成在一块半导体芯片上构成的电子器件。微处理器又称为“中央处理单元”(Central Processing Unit),简称CPU。自20世纪80年代以来,微型计算机大都采用Intel公司设计制造的CPU或AMD等公司的其他兼容产品。

1.1.1 微处理器概述

自20世纪70年代微处理器诞生以来,除了用于PC、笔记本电脑、工作站及服务器上的通用微处理器(General-purpose Microprocessors)外,还包括一些专用的微处理器(Dedicated Microprocessors)。专用微处理器面向特定的应用,包括单片机(Single Chip Computer)和数字信号处理器(Digital Signal Processor, DSP)等。单片机又叫微控制器(Micro Controller Unit, MCU),常用于控制领域。芯片内部除了CPU外,还集成了其他如RAM/ROM、输入/输出接口等主要部件,一个芯片配上少量的外部电路和设备就能构成具体的应用系统。比较著名的包括Intel公司的8位MCS51系列、16位/32位的MCS96/98系列及其他各大处理器厂商基于ARM架构的各系列处理器。数字信号处理器专注于数字信号的高速处理,这类微处理器主要在通信、消费类电子产品领域使用,比较知名的是美国德州仪器公司(Texas Instruments, TI)的系列产品,如TMS320系列各代DSP等。

通用微处理器和专用微处理器基本原理大同小异,技术上相通,应用在不同的领域,各具特色。本书主要讨论通用Intel 80x86系列微处理器的基本原理和接口,其基本原理可以推广适用于其他类型的应用系统。

1.1.2 80x86系列CPU发展

自20世纪70年代开始出现微型计算机以来,CPU经历了飞速的发展。而Intel公司也逐步取得了巨大的成功,成为这个领域的“霸主”。

1.4位微处理器

1971年,Intel成功设计了世界上第一个微处理器:4位微处理器Intel 4004。它有45条指令,执行速度为50KIPS(Kilo Instructions Per Second),即每秒执行5万条指令。直到今天,由于其良好的性能价格比,4位微处理器仍然应用于一些嵌入式系统,比如微波炉、洗衣机、计算器等。

2.8位微处理器

1972年,Intel公司推出了世界上第一款8位处理器8008,8008可以支持到16KB的内存。整体性能比4004有了较大的提升。基于Intel 4004和Intel 8008诞生了第一代的微机MCS-4和MCS-8微机。1973年,Intel推出的8080,执行速度达到500KIPS,寻址范围达到64KB。1974年,基于Intel 8080的个人计算机问世。微软(Microsoft)公司创始人Bill Gates为这种PC开发了BASIC语言解释程序。1977年,Intel推出了8085,基于8085的微机执行速度达到770KIPS。这一时期的典型微机产品还有Motorola公司的M6800、Zilog公司的Z80等。

3.16位微处理器

1978年6月,Intel 8086问世,它是Intel公司的第一个16位CPU。1979年6月,Intel推出了Intel 8088,执行速度为2.5MIPS(Million Instructions Per Second)。8086和8088都是16位CPU,能够进行16位数据的运算和处理,寻址范围达到1MB。它们的主要区别在于外部数据总线的宽度,8086的外部数据总线为16位,而8088为8位。当时与微处理器配套的外围接口电路大都是8位,因此,尽管8086的数据传输能力要强于8088,但是8088的兼容性更好。8088在市场上获得了极大的成功,IBM选择8088作为CPU,在1981年8月推出了它的第一代个人计算机IBM PC。自此,Intel逐步确立了PC行业的CPU霸主地位。同时, Microsoft公司的MS DOS被IBM公司采用后,经过多年的经营,成为软件领域的“巨无霸”。

8086/8088微处理器只能支持整数运算,浮点运算通过转换为整数指令来完成,即“浮点仿真”。为了提高浮点运算的速度,Intel公司在1976年推出了数字协处理器8087,它能够在8086/8088的控制下执行浮点运算指令,进行复杂的数学运算,大幅度提升运算速度。

1982年,Intel公司在8086的基础上,研制出了80286微处理器,该微处理器的最大主频为20MHz,内、外部数据传输均为16位,使用24位地址总线,内存寻址范围达到16MB。在Intel系列CPU中,80286首次引入了保护模式。兼容8086/8088的运行模式称为实模式,而80286可以运行在实模式和保护模式下。

4.32位微处理器

1986年,Intel推出了80386,它的数据总线和地址总线都是32位的,内部寄存器和操作也都是32位,能够进行32位数据的运算和处理,它的寻址范围达到4GB。80386首次引入了虚拟8086模式,它可以运行在实模式、保护模式和虚拟8086三种模式。与80286相比, 80386的保护模式功能更强,支持内存分页机制。到目前为止,Windows和Linux操作系统都运行在保护模式下,分页机制是这些操作系统实现虚拟内存所必需的硬件环境。

1989年,Intel公司推出了80486,它集成了80386、80387和8KB片内高速缓存(Level 1 Cache,也称L1 Cache)。80387是与80386配套的浮点协处理器。80486的运行速度和处理能力比80386有了大幅度的提高,80486推动了图形用户界面GUI(Graphic User Interface)的广泛应用。从80486开始,Intel采用了倍频技术,CPU主频(处理器工作频率)可以设置为外频(系统总线工作频率)的若干倍,从而使CPU的工作频率远远高于其外围电路。

1993年3月,Intel推出新一代奔腾(Pentium)CPU。在此之前,Intel以80x86来命名其CPU,数字命名不能得到商标的保护,所以生产兼容Intel CPU的AMD、Cyrix等公司也采用与Intel相同的数字命名。从奔腾开始,Intel不再使用数字来命名。

Pentium不是64位CPU,尽管它的外部数据总线为64位,一次内存总线操作可以存取8字节的数据,但Pentium内部的寄存器和运算操作仍然是32位,地址总线仍然为32位。Pentium体系结构中包括了两个整型处理单元和一个浮点协处理单元,内设两条指令流水线,这种超级标量技术(Super Scalar)在每个时钟周期可并行执行两条32位的指令,并且通过动态转移预取技术,保证了流水线操作的连续性。因此Pentium被称为准64位CPU。

Pentium有许多不同主频的版本,如60MHz、66MHz、75MHz、90MHz、100MHz、120MHz等。66MHz的Pentium的指令执行速度为110MIPS。Pentium的片内高速缓存为16KB,数据高速缓存(Data Cache)和指令高速缓存(Instruction Cache)各占8KB。

1995年11月,Intel推出的Pentium Pro,地址总线为36位,寻址范围达到236=64GB。其片内高速缓存有两级,分别为L1和L2, L2缓存为256KB或512KB。

1997年1月,Intel发布了Pentium MMX指令集,增强了对多媒体数据的支持。

1997年5月,Intel推出Pentium Ⅱ(也称P Ⅱ),它的主频达到233~400MHz。片内高速缓存为32KB,数据Cache和指令Cache各占16KB。它的L2缓存为512KB,但没有包含在CPU内部,采用新的封装形式SECC(Single Edge Contact Cartridge,单边接触盒)来连接P Ⅱ和L2缓存。P Ⅱ不是一个芯片,而是一个多芯片模组,包括:P Ⅱ CPU、L2芯片组及电阻电容等配套电路。这几个部件被放置在一个电路板上,密封在一个保护壳的盒子里。Intel为P Ⅱ的插座和插槽申请了专利(Slot1),目的是避免兼容厂商仿制。1998年,Intel为进入低端市场,推出了赛扬(Celeron)处理器,它是P Ⅱ的简化版,去掉了它的L2缓存,因此其性能比P Ⅱ的低,但价格低廉。

1999年2月,Intel推出Pentium Ⅲ处理器(也称P Ⅲ),主频为450MHz、500MHz。P Ⅲ具有一个流式指令扩展SSE(Streaming SIMD Extensions, SIMD即Single Instruction Multiple Data,单指令多数据流)的指令集,全面增强三维图形运算,也对动画、图像、声音、网络、语音识别等功能进一步增强。P Ⅲ芯片内部都有一个128位处理器序号,每个CPU的序号是唯一的。这个序号的设计目的是识别用户,提高网上电子商务的安全性。用户可将这个功能关闭。

2000年11月,Intel推出Pentium Ⅳ处理器(也称Pentium 4或P4),主频为1.4GHz。系统总线速度达到了400MHz,指令流水线达到20级,增加了SSE2指令集,进一步增强了多媒体、网络等密集运算能力。

2002年,Intel在CPU中加入了超线程技术HT(Hyper-Threading)。之后主频逐步提高,达到了3.2GHz。

2004年2月,Intel发布了Pentium 4 E系列处理器,90nm制造工艺,800MHz系统总线频率,CPU名称也改为数字命名,主要有P4E 580/570/560/550/540/530/520,对应频率为4.0GHz /3.8GHz /3.6GHz /3.4GHz /3.2GHz /3.0GHz/2.8GHZ。

Intel系列的CPU至今仍是桌面计算机的主流。采用Intel CPU制造的计算机,被称为IA (Intel Architecture)架构。内部寄存器和运算位数为32位的Pentium系列CPU统称为IA-32 (Intel Architecture-32)。8086、80286、80386、80486、Pentium、P Ⅱ、P Ⅲ、P4的一系列CPU,被统称为80x86系列,也称为x86系列。这些CPU保持了兼容的特点,即后推出的CPU的指令系统完全覆盖了以前推出的CPU指令系统,因此各种已有软件可以在新推出的CPU上运行。

5.64位微处理器

由于IA结构的计算机在高端市场(大型服务器系统)中所占比例不够理想,其他的RISC CPU在20世纪90年代早期就发展了64位的CPU,占据了高端市场的主流地位。为了在企业服务器与高性能运算市场上占据一席之地,HP(Hewlett-Packard,惠普)公司与Intel自1994年开始共同研发基于IA-64(Intel Architecture 64)的64位CPU,并于2001年推出了第一款64位的Itanium(安腾)微处理器。Itanium的微结构基于显式并行指令计算(Explicitly Parallel Instruction Computing, EPIC),由编译器来决定哪些指令并发处理。该架构彻底不同于其他Intel处理器采用的x86(包含x86-64)架构,也不与x86架构兼容,在市场上没有取得很大的成功。

与Intel公司抛开IA-32而发展新的64位CPU不同,一直生产Intel兼容CPU的AMD公司,沿袭了IA-32的思路,发布了与x86兼容的64位CPU。它在32位x86指令集的基础上加入扩展的64位x86指令集,这款芯片在硬件上兼容原来的32位x86软件,并同时支持64位计算,使这款芯片成为真正的64位x86芯片,即x86-64。x86-64在市场上取得了很大的成功。

为了和AMD 64位技术竞争,Intel也回到x86路线上,在AMD之后发布了与x86兼容的64位技术,命名为Intel 64位扩展技术(Extended Memory 64 Technology, EM64T)。该技术指令集和体系结构向下与8086兼容,在Pentium 46xx、Pentium 45x1(如541、551、561)、Celeron D 3x1和3x6(331、336、341、346)等处理器产品中采用。在体系结构上新增了一组附加的SSE寄存器,通过SSE、SSE2和SSE3指令访问。

在x86的16位和32位时代,技术上都是由Intel公司来主导,AMD与之兼容。而在x86-64上,部分技术的主导权已经属于AMD。例如,AX和EAX是Intel公司命名的16位和32位的寄存器,而AMD将x86寄存器扩展为64位以后,命名为RAX。Intel的EM64T也使用了RAX作为寄存器名称。

1.1.3 CPU的微结构

微结构(Micro-Architecture)也叫作计算机组织,它包含处理器内部的构成及这些构成的部分如何执行指令集。微结构通常被表示成流程图的形式来描述CPU内部元件的连接状况,如流水线(Pipeline)、缓存(Cache)设计及各种总线设计等。

Intel系列CPU产品种类繁多,根据CPU的微结构,大致可以分为i386、i486、P5、P6、Netburst、Pentium-M、Core(Merom、Penryn)、Nehalem(Nehalem、Westmere)、Sandy Bridge (Sandy Bridge、Ivy Bridge)、Haswell(Haswell、Rockwell)。市面上的多个CPU产品可能源于同一个微结构,属于同一类或同一代产品。同一个微结构下存在多款CPU的原因很多,例如版本简化的需要,或者根据市场的需要定制版本等。同一个名称的CPU也可以来自不同的微结构,如Core i7就包括有Nehalem微结构的和Westmere微结构的。不同微结构的CPU性能和价格都有差异,因此,购买CPU时不能只关注CPU的产品名称,还需要知道其来自哪个微结构。表1-1给出了Intel各种微结构和与之相应的产品型号。

表1-1 Intel CPU微结构和对应产品型号

1.1.4 微处理器性能指标

1.速度指标

主频也叫主时钟频率,表示在CPU内数字脉冲信号振荡的速度。主频越高,一个时钟周期里完成的指令数也越多,CPU的运算速度也就越快,执行程序的时间就能缩短。但由于微处理器内部结构不同,并非所有时钟频率相同的CPU性能也一样。

外频是系统总线的工作频率,即CPU与周边设备传输数据的频率。目前绝大部分计算机系统中外频也是内存与主板之间同步运行的速度。在这种方式下,可以理解为CPU的外频直接影响内存的访问速度,外频越高,CPU就可以同时接收更多的来自外围设备的数据,从而使整个系统的速度进一步提高。目前外频有66MHz、100MHz和133MHz。

倍频是指CPU和系统总线之间工作频率相差的倍数,当外频不变时,倍频越高,CPU主频也就越高。倍频可使系统总线工作在相对较低的频率上,而CPU速度可以通过倍频来提升。CPU主频的计算方式变为:主频=外频×倍频。倍频可以从1.5一直到23,甚至更高,以0.5为一个间隔单位。例如,当外频等于200MHz时,倍频为9,则主频为200MHz×9=1.8GHz。

例1.1 假定购买了一颗CPU,它的工作频率是2.4GHz,倍频系数设定为18,请问外频是多少?

2.4GHz/18≈133MHz,因此,在设置主板跳线时,应将主板频率置为133MHz。

前端总线(Front Side Bus, FSB)是指处理器到北桥之间的总线。前端总线的数据带宽=(总线频率×数据位宽)÷8。在Pentium 4出现之前和初期,前端总线频率与外频是相同的,因此以前往往直接称前端总线为外频,将二者混淆了。前端总线的速度是指处理器和北桥之间的总线速度,更实质性地表示了CPU和外界数据传输的速度。而外频的概念是建立在数字脉冲信号震荡速度基础之上的,它影响总线的频率。随着处理器工作频率的增加,流水线的加长,CPU对总线带宽的要求越来越高。前端总线频率直接影响CPU与内存直接数据交换速度,前端总线频率越大,代表着CPU与内存之间的数据传输量越大,更能充分发挥出CPU的功能,因此采用了QDR(Quad Date Rate)技术及其他类似的技术实现这个目的。这些技术使得前端总线的频率成为外频的2倍、4倍甚至更高。如Intel公司在Pentium 4处理器采用了4倍传输率的前端总线,该技术可以使系统总线在一个时钟周期内传送4次数据。常见CPU所能达到的前端总线频率有266MHz、333MHz、400MHz、533MHz、800MHz几种。

近年来,随着计算机技术的发展,内存控制器被逐步集成到了处理器中,CPU直接和内存通信,不再通过北桥,前端总线也就消失了。如AMD速龙64系列(K8)以后,处理器集成了内存控制器,前端总线消失,取而代之的就是超传输技术(HyperTransport, HT)总线。HT总线带宽更大,内存性能超过Intel公司的产品。Intel微处理器相对滞后,直到Core i系列以后,内存控制器才集成到了CPU中,改变了内存性能被超越的状况。取代Intel平台前端总线的就是快速通道互联(QuickPath Interconnect, QPI)总线。AMD的HT总线和Intel的QPI总线具有相同的原理,只不过不同的公司采用不同的名称。

目前,最高的QPI速率为6.4GT/s, QPI的传输速率比FSB的传输速率快一倍。QPI总线采用的是2∶1比率,意思就是实际的数据传输速率两倍于实际的总线时钟速率。所以6.4GT/s的总线速率其实际的总线时钟频率是3.2GHz。

2.高速缓冲存储器

集成电路设计技术及制造工艺的发展使得CPU运算速度飞速提高,但CPU处理的数据都是由内存提供的,因此CPU与内存之间的通道(即内存总线的速度)对整个系统的性能提升尤为重要。CPU与主存之间数据交换的速度成为整个计算机处理能力的“瓶颈”。为了协调CPU主频和内存总线频率之间的差异,计算机中设置了高速缓冲存储器(Cache)。

高速缓存的容量和工作速率对提高计算机的性能有着重要的作用。CPU的缓存一般包括一级和二级缓存,高端一点的CPU具有三级缓存。一级缓存,即L1 Cache,其集成在CPU内部,一般采用与CPU相同的频率工作,用于CPU在处理过程中暂存数据和指令。目前的微机L1常采用哈佛结构,分为数据缓存和指令缓存,一般L1缓存的容量通常在8~256KB。二级缓存,即L2 Cache,其工作主频比较灵活,可与CPU同频或不同频。现在普通台式机CPU的L2缓存一般为128KB~2MB或者更高,笔记本、服务器和工作站上用CPU的L2高速缓存最高可达1~3MB。冯·诺依曼结构的计算机中二级缓存的容量和大小是整个计算机处理能力的重要参数。三级缓存,即L3 Cache,设置三级缓存的目的是进一步降低内存延迟,同时提升大数据量计算时处理器的性能。早期的CPU采用的是外置三级缓存,现在大多采用内置方式。在计算机的存储系统中,一级缓存的速度比二级缓存的快,而二级缓存的速度比三级缓存的快,三级缓存的速度比内存的要快,内存比外部存储器要快。CPU在读取数据时的顺序是先在L1中寻找,再从L2寻找,然后是L3,再是内存,最后是外部存储器。

3.制造工艺

制造工艺的数值线宽是IC生产工艺可达到的最小导线宽度。制造工艺的发展趋势是向密集度愈高的方向发展。线宽越小,意味着在同样面积的IC中,可以集成更多的晶体管,实现更复杂的功能和更高的性能。同时,随着集成度不断提高,处理器的核心会进一步缩小,降低功耗,并且降低成本。芯片制造工艺在1995年以后,从0.5 μm、0.35 μm、0.25 μm、0.18 μm、0.15 μm、0.13 μm、0.09 μm(90nm)、65nm、45nm,到现在的14nm(2016年,Core i7 Kabylake架构)及用于移动平台的10nm(2017年,高通Qualcomm骁龙835处理器)和7nm(2018年,三星/台积电制程),将来还有可能会进一步缩小。

4.核心电压

CPU的工作电压(Supply Voltage),即CPU正常工作所需的电压,一般包括CPU的核心电压与I/O电压两部分。核心电压即驱动CPU核心芯片的电压,I/O电压则指驱动I/O电路的电压。通常CPU的核心电压小于等于I/O电压。

计算机的发展过程中,CPU的核心电压有一个非常明显的下降趋势,降低电压是CPU主频提高的重要因素之一。较低的工作电压能够降低CPU的功耗,减少发热量,如在便携式和移动系统中的微处理器常采用比台式机低得多的核心电压,从而使CPU发热量减少,降低功耗,使得相同的电池可以工作更长时间。同时,发热量减少还能有效减缓高温环境下的元器件老化,延长器件的使用寿命。但核心电压也不一定是越低越好,很多实验表明,在超频的时候适度提高核心电压,可以加强CPU内部信号,对CPU性能的提升会有很大帮助。

早期CPU(286~486时代)的核心电压与I/O一致,通常为5V。随着CPU的制造工艺提高,CPU的工作电压有逐步下降的趋势,如P Ⅲ的电压为1.7V, P4工作电压是1.3V,从Athlon 64开始,AMD公司在基于Socket 939接口的处理器上采用了动态电压,不再标明CPU的默认核心电压。同一核心的CPU,其核心电压可变;不同的CPU,可能会有不同的核心电压,如1.30V、1.35V或1.40V等。较新的主板中嵌入的电压调节器可以通过CPU特殊的电压ID(VID)引脚来设置合适的电压级别。

5.封装形式

CPU封装是采用特定的材料将CPU芯片或CPU模块固化在其中以防损坏的保护措施,一般必须在封装后CPU才能交付用户使用。CPU的封装方式取决于CPU的安装形式和器件集成设计。早期的4位、8位、16位CPU多采用双列直插式封装技术,也叫DIP封装(Dual In-Line Package),如图1-2所示。Socket架构的常采用插针网格阵列封装技术(Pin Grid Arry Package, PGA)、球栅阵列封装技术(Ball Grid Array Package, BGA)或者触点阵列(Land Grid Array, LGA)封装。PC机中这种CPU比较主流,如图1-3所示。Slot架构的属于单边接触型,在早期的P Ⅱ、P Ⅲ处理器中曾用到,Intel把它称为“Slot 1”。AMD也有过这种架构,称为“Slot A”。这类CPU全部采用SEC(单边接插盒)的形式封装,如图1-4所示。此外,还包括PLGA(Plastic Land Grid Array)、OLGA(Organic Land Grid Array)等封装技术。由于市场竞争日益激烈,CPU封装技术的发展方向以节约成本、便于散热为主。

图1-2 8086双列直插式封装

图1-3 Core i7触点阵列封装

图1-4 PⅡ单边接插盒封装

1.1.5 微处理器软件特性

1.工作模式

CPU工作模式是指各种影响CPU可以执行的指令和芯片功能的操作环境。不同的工作模式决定了CPU如何管理内存。从80386开始,CPU具有三种工作模式:实模式、保护模式和虚拟实模式,这三种工作模式称为传统的IA-32(Legacy Intel Architecture-32 Mode)模式。传统的IA-32模式中,实模式是为了和8086处理器兼容而设置的。实模式下,80386处理器就相当于一个8086处理器,在系统加电时处于实模式,如果运行了一个32位操作系统(Windows、Linux等),它将CPU切换到32位保护模式,保护模式为主要的工作模式。虚拟86模式是为了在保护模式下继续兼容8086处理器。虚拟86模式下,内存的寻址方式和8086的相同,可以寻址1MB的空间,但同时支持保护模式下的任务切换、内存分页管理和优先级管理等。

具有64位扩展技术(Extended Memory 64 Technology, EM64T)的处理器除了支持传统IA-32模式外,还支持IA-32e(Intel Architecture-32 Extension)模式。IA-32e模式是处理器在运行64位操作系统的时候使用的一种模式。带有64位扩展技术的处理器初始将进入传统的页式地址和保护模式。扩展功能激活寄存器(Extended Feature Enable Register, IA32_EFER)中的第10位(bit10)控制着EM64T是否激活,该位被称为IA-32e模式有效(IA-32e Mode Active)或长模式有效(Long Mode Active, LMA)。当bit10=0时,处理器便作为一个标准的32位(IA32)处理器运行在传统IA-32模式;当bit10=1时,EM64T便被激活,处理器会运行在IA-32e扩展模式下。

2.指令系统

CPU依靠指令来计算和控制系统,每款CPU在设计时就规定了一系列与其硬件电路相配合的指令系统。指令的强弱也是CPU的重要指标,指令集是提高微处理器效率的最有效工具之一。从现阶段的主流体系结构讲,指令集可分复杂指令集和精简指令集两大类。

(1)复杂指令集

复杂指令集,也称为CISC(Complex Instruction Set Computer)指令集。在CISC微处理器中,程序的各条指令是按顺序串行执行的,每条指令中的各个操作也是按顺序串行执行的。顺序执行的优点是控制简单,但计算机各部分的利用率不高,执行速度慢。Intel生产的x86系列(即IA-32架构)CPU及其兼容CPU,如AMD、VIA,包括x86-64,都属于CISC的范畴。

● MMX指令集

1997年1月,Intel发布了Pentium MMX(MultiMedia eXtension,多媒体扩展)指令集。MMX指令专门为高级视频处理、音频和图形数据而设计,新增了57条指令,提高了多媒体处理功能。但在执行过程中,MMX与浮点寄存器相互重叠,在MMX代码中插入浮点运算指令时,必须先清除MMX状态,频繁地切换状态将严重影响性能。因此,MMX指令不适合需要大量浮点运算的程序,如三维几何变换、裁剪和投影等。

● SSE指令集

在多媒体等应用程序中,经常使用大量的重复循环,这部分程序占用了CPU 90%的执行时间,因此,由Intel公司开发的MMX技术增加了单指令多数据(Simple Instruction Multi Data, SIMD)功能。SIMD使一条指令可以对多个数据同时进行操作,从而提高程序的运行速度。

SSE(Streaming SIMD Extensions,单指令多数据流式扩展)指令集包括了70条用于图形图像和声音处理的指令。SSE兼容MMX指令,它通过SIMD和单时钟周期并行处理多个浮点数据来有效地提高浮点运算速度,如一条SSE指令可以同时对四个浮点数据进行操作。此后,Intel公司在SSE的基础上发展了一系列指令,包括SSE2、SSE3、SSSE3、SSE4.1、SSE4.2等。

● 3DNOW!指令集

由AMD公司开发,包括27条指令,用来缓解CPU与三维图形加速卡之间在三维图像建模和纹理数据取用中的传输“瓶颈”。3DNOW!和SSE技术相似,但指令数要少一些,复杂度要低一些。3DNOW!和SSE指令格式不同,互不兼容,所以支持SSE编写的软件不支持3DNOW! ,支持3DNOW!的软件也不支持SSE。

(2)精简指令集

精简指令集,被称为RISC(Reduced Instruction Set Computer)指令集。这种指令集的特点是指令数目相对较少,执行时间短。每条指令都采用标准字长,方便快速译码。大部分的操作数由寄存器提供,寻址模式简单,并且硬件中只支持少数的数据类型,适合流水线操作。RISC精简指令集的出现是计算机系统架构的一次深刻革命。MIPS指令集就是一种典型的精简指令集。

计算机指令集合的发展过程中,RISC与CISC这两大类指令集在竞争的过程中相互学习,相互影响。一方面,现在的RISC指令集也达到数百条,运行周期也不再固定;另一方面,目前最常见的复杂指令集x86 CPU,虽然指令集是CISC的,但为了提高运算速度,也应用了RISC的思路,将常用的简单指令以硬件线路控制来全力加速,不常用的复杂指令则交由微码循序器执行。

3.超线程技术

理论上,实行超线程技术(Hyper-Threading Technology)后,一个物理处理器核上会模拟出两个逻辑内核,每一个内核模拟成一个CPU芯片,实现线程级别上并行处理。对于操作系统而言,它会把这个物理处理器视为两个独立的逻辑处理器,每个逻辑处理器可以各自对请求做出响应,运行不同的线程。两个逻辑处理器共享一组处理器执行单元,即每个CPU执行单元同时为两个“处理器”服务,并行完成各种操作,实现更高的整体性能。一般支持超线程技术的CPU除了需要芯片组等硬件支持外,还需要软件的支持,才能比较理想地发挥该项技术的优势。如必须采用支持双处理器的操作系统,设计软件时,要在线程层面上进行优化处理等。如果缺乏软件的支持,则无法获得效能的大幅提升。

4.超标量和超长指令字

超标量(Super Scalar)结构和超长指令字(Very Long Instruction Word, VLIW)结构在单核高性能微处理器中被广泛采用。但是它们的发展都遇到了难以逾越的障碍。

超标量技术指的是CPU在同一时刻执行两条或两条以上指令的能力。超标量结构使用多个功能部件同时执行多条指令,实现指令级的并行(Instruction Level Parallelism, ILP)处理。但其控制逻辑复杂,实现困难。研究表明,超标量结构的ILP一般不超过8。Intel及其兼容的CPU芯片一般被认为是CISC芯片。从奔腾系列起,为了更好地应用超标量结构,CPU将CISC指令分解成更多的RISC指令,因为RISC指令更小,易于并行高速执行。使用超标量结构,Intel把RISC处理器的高速专用执行指令的优点融入了CISC处理器中。

VLIW体系结构是美国Multiflow和Cydrome公司于20世纪80年代设计的体系结构。VLIW使用多个相同功能部件执行一条超长指令,实现指令级的并行处理,从而提高性能。该体系结构要求编译程序能够控制所有功能单元,精确地调度在何处执行每个操作,对编译技术提出了极高的要求。目前VLIW发展的“瓶颈”在于编译技术支持和二进制兼容问题。从VLIW中衍生出了显式并行指令代码(Explicitly Parallel Instruction Code, EPIC)体系结构。EPIC结构是Intel的64位芯片架构,本身不能执行x86指令,但通过译码器能兼容旧有的x86指令,只是运算速度比真正的32位芯片有所下降。

5.动态执行技术

动态执行是对多路分支预测、数据流分析和猜测执行这三种技术进行的革新式的组合。动态执行使CPU通过更符合逻辑的顺序而不是简单地按指令序列来执行,以获得更高的效率。这是Pentium Pro及以后的芯片和兼容芯片的特征之一。

多路分支预测通过几个分支来预测程序的执行。CPU通过特殊的取指/译码单元使用优化的算法,可以预测到指令流中的跳转和分支,并且在多级分支调用和返回中预先执行指令。通过提前预测要执行的指令,指令就可以不用等待而马上得到执行。

数据流分析是CPU分析和调度指令,使指令以更优的顺序执行(也称乱序执行)。CPU利用一个特殊的发布/执行单元检测软件指令并确定它们是否是CPU可用的或者与先执行的指令没有任何关系,然后才决定处理的最优顺序,并以最高效的方式执行指令。

猜测执行是指CPU提前执行指令,其结果保存在一个缓冲池中,以供以后参考。在确定执行顺序之后,这些结果可能被抛弃,或者被保留下来。提前执行能在总体上缩短程序的运行时间。

1.1.6 多核技术

纵观微处理器的发展,从Intel 80286到Intel Pentium 4,大概二十多年的时间都是单核处理器的天下。在多核处理器出现之前,单个硅晶片上集成的晶体管数目按照摩尔定律每18月翻一番的速度快速增长,时至今日,单核处理器的性能已经发挥到极致,性能的增长受到了功耗、互连线延时和设计复杂度三个物理规律的限制。

1.单核处理器面临的困境

(1)功耗

晶体管通过翻转来提供信息计算,翻转的同时会产生热量。从Intel 80286到Pentium 4,提升处理器性能的路线一直是通过提高处理器频率,从而让晶体管翻转得越来越快,以获得更高的计算能力。这种方式的最大好处在于同一个程序在频率更高的芯片上可以跑得更快。但随着处理器频率变快,功耗也急剧增长,发热量越来越高。一个很明显的现象是单核处理器问世初期不需要散热,但到了Pentium 4处理器,却需要散热片结合功能强劲的风扇。按照摩尔定律的规律,晶体管的翻转速度的上升带来功耗的急剧增长,但是单核处理器的散热能力无法跟上需要,单核处理器的性能发展在散热问题上受到了严峻的挑战。

(2)互连线延迟

处理器芯片上除了晶体管,就是互连线。以前晶体管翻转很慢,它每翻转一次所需的时间内,互连线能够把数据从芯片的一头送到另一头,而现在晶体管速度急剧提升,但是互连线延迟却没有大的变化,对角线传输得花几个晶体管翻转的时间。这种情况带来的最大问题是,完成一项工作过程中,大量的时间都花在把数据从一个晶体管传输到另一个晶体管上。如在Pentium 4中执行一条指令采用20级流水线,数据从一个流水段送到另一个流水段上需要花费很多时间,不利于性能的提高。克服互连线延迟的最好办法是缩短传输的距离,用较小的核组成一个多核的芯片,运算尽量集中在一个小核中完成。这种方式能有效地降低互连线延时。

(3)设计复杂度

随着晶体管数量的增加,芯片设计的设计空间、设计复杂度和验证难度都大幅度增加。如Intel 6核的Core i7上集成了超过十亿个晶体管。如果采用多个重复设计处理器核,那么单个核的设计复杂度就会大大降低,出错机会也会减少,从而降低设计成本。

2.多核处理器的产生与发展

多核是指在一个处理器中集成两个或多个完整的计算引擎(内核)。多核处理器是单枚芯片(也称为“硅核”),能够直接插入单一的处理器插槽中,操作系统会利用所有相关的资源,将它的每个执行内核作为分立的逻辑处理器。通过在多个执行内核之间划分任务,多核处理器可在特定的时钟周期内执行更多任务,实现更好的并行处理。

多核技术是处理器发展的必然,是技术发展和应用需求的必然产物。多核处理器代表了计算技术的一次创新。多核技术能通过不断地增加计算核心的数量来提升处理器的计算能力,从而延续摩尔定律。大量的简单核心将比少量的复杂核心带来更大的系统计算吞吐量。跟传统的单核处理器相比,多核处理器带来了更强的并行处理能力、更高的计算密度、更低的时钟频率,计算功耗产生的热量更少,更易于扩充。目前,在几大主要芯片厂商的产品线中,双核、四核甚至八核CPU已经占据了主要地位。

随着多核处理器的发展,需要有更多的支持并行的程序,软件厂商正在探索全新的软件并发处理模式。目前操作系统软件如Windows的某些版本、Linux都支持多处理器,可以直接应用在多核处理器的微机中。可编程性是多核处理器发展中面临的最大问题之一。当核心数目超过8个时,只有执行的程序能够并行处理,才能够真正发挥多核的优势。多核之难不在核上,而在互连与编程两大挑战上。

自1996年斯坦福大学研制出世界上第一款多核处理器的原型系统Hydra以来,多核技术发展迅速,目前多核处理器芯片已经成为通用微处理器市场的主流产品。2005年4月,Intel公司推出简单封装双核的奔腾D和奔腾4至尊840处理器,AMD公司也发布了双核皓龙(Opteron)和速龙(Athlon)。2006年被认为是双核元年,Intel公司推出了基于酷睿(Core)架构的处理器。从此微处理器开始从单核到双核、三核、多核(Multi-core)乃至众核(Many-core)等方向发展。

多核处理器蕴含着巨大的潜能,同时在体系结构、软件、功耗和安全性设计等方面也面临着巨大的挑战,目前为学术界所关注的关键技术包括片上网络(Networks on Chip, NOC)、存储层次、并行编程模型等。多核系统中,由于内核数量的增加,传统的基于共享总线的互连结构无法满足处理期间的高速通信需求,片上网络成为解决这一需求的关键技术,其相关研究包括高效路由算法、交换技术、拓扑结构、QoS及片上网络的功耗、资源占用的优化等;其次,计算机主存的访问速度远远落后于微处理器的性能增长速度,单个芯片中的多个处理器内核对片外内存的高速并发访问需求使本来就是性能“瓶颈”的内存系统面临更大的压力,研究合理的存储层次结构,为多个处理器内核提供高带宽低延迟的数据访问接口成为提高性能的关键;此外,传统的串行编程的模型和思路不能最大限度地发挥多核处理器的性能,为用户提供简单易行的多核系统软件和软件并行编程模型是一个值得研究的问题。

3.多核技术在中国

如今多核技术已经应用到多个领域,尤为突出的是超级计算机。超级计算机的发展成为衡量一个国家科技能力和国力的标准。中国从1978年开始,历经5年研制,中国第一台被命名为“银河”的亿次巨型电子计算机在国防科技大学诞生,它的研制成功向全世界宣告了中国成了继美、日等国之后,能够独立设计和制造巨型机的国家。

1992年,国防科技大学研制出“银河-Ⅱ”通用并行巨型机,峰值速度达每秒10亿次,主要用于天气预报。

1993年,国家智能计算机研究开发中心(后成立北京市曙光计算机公司)研制成功“曙光一号”全对称共享存储多处理机,这是国内首次以基于超大规模集成电路的通用微处理器芯片和标准UNIX操作系统设计开发的并行计算机。

1995年,曙光公司推出“曙光1000”,峰值速度每秒25亿次浮点运算,该机器与Intel公司1990年推出的大规模并行机体系结构及实现技术相近,与国外的差距缩小到5年左右。

1997年,国防科技大学研制成功“银河-Ⅲ”百亿次并行巨型计算机系统,峰值性能为每秒130亿次浮点运算。

1997—1999年,曙光公司先后在市场上推出“曙光1000A”“曙光2000-Ⅰ”“曙光2000-Ⅱ”超级服务器,峰值计算速度突破每秒1000亿次浮点运算。

1999年,国家并行计算机工程技术研究中心研制的“神威Ⅰ”计算机,峰值运算速度达每秒3840亿次,在国家气象中心投入使用。

2004年,由中科院计算所、曙光公司、上海超级计算中心三方共同研发制造的“曙光4000A”实现了每秒10万亿次运算速度。

2008年,联想研制出国内第一个性能突破每秒百万亿次的异构机群系统“深腾7000”。

2008年,“曙光5000A”实现峰值速度230万亿次,可以完成各种大规模科学工程计算、商务计算。

2009年10月29日,中国首台千万亿次超级计算机“天河一号”诞生。这台计算机每秒1206万亿次的峰值速度和每秒563.1万亿次的LINpack(Linear system package,线性系统软件包)实测性能,使中国成为继美国之后世界上第二个能够研制出千万亿次超级计算机的国家。2010年11月14日,中国首台千万亿次超级计算机系统“天河一号”在全球超级计算机前500强排行榜排名第一。直到2011年才被日本超级计算机“京”超越。

2013年6月,由国防科技大学研制的“天河二号”超级计算机系统,以峰值计算速度每秒5.49亿亿次、持续计算速度每秒3.39亿亿次双精度浮点运算的优异性能位居榜首,成为全球最快超级计算机。截至2015年3月,“天河二号”已经多次蝉联全球最快的超级计算机冠军。

在2017年全球超级计算机500强排名中,中国的“神威·太湖之光”和“天河二号”超级计算机分列冠亚军。500强榜单中,中国占了202台,美国仅有143台。此外,中国超算的总性能也超越美国,占该榜单总处理能力的35.4%,美国则占29.6%。

超级计算机的每一项研究成果都代表着中国国力在不断提升,中国的国际地位在不断提升,然而,很遗憾的是,这些超级计算机虽然是中国研制的,但是它们的处理器除少量采用国产处理器(“神威·太湖之光”采用了国产申威处理器)外,都是进口的,中国在微处理器领域的发展还需要奋起直追。