1
1
mirror of https://github.com/foxsen/archbase.git synced 2026-02-02 18:09:17 +08:00
Files
archbase/30-conclusion.Rmd
2021-10-27 19:14:51 +08:00

131 lines
30 KiB
Plaintext
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 总结 {-}
\markboth{总结}{总结}
经过本课程的学习,大家对计算机体系结构有了一个具体的了解,但要问起什么是计算机体系结构,多半答不上来。本章内容是笔者撰写的《中国大百科全书》计算机体系结构词条初稿,力求完整、准确地对计算机体系结构进行描述,作为本书的总结。
计算机体系结构Computer Architecture是描述计算机各组成部分及其相互关系的一组规则和方法是程序员所看到的计算机属性。计算机体系结构主要研究内容包括指令系统结构Instruction Set Architecture简称ISA和计算机组织结构Computer Organization。微体系结构Micro-architecture是微处理器的组织结构并行体系结构是并行计算机的组织结构。冯诺依曼结构的存储程序和指令驱动执行原理是现代计算机体系结构的基础。
计算机体系结构可以有不同层次和形式的表现方式。计算机体系结构通常用指令系统手册和结构框图来表示结构框图中的方块表示计算机的功能模块线条和箭头表示指令和数据在功能模块中的流动结构框图可以不断分解一直到门级或晶体管级。计算机体系结构也可以用高级语言如C语言来表示形成结构模拟器用于性能评估和分析。用硬件描述语言如Verilog描述的体系结构可以通过电子设计自动化Electronic Design Automation简称EDA工具进行功能验证和性能分析转换成门级及晶体管级网表并通过布局布线最终转换成版图用于芯片制造。
1、冯诺依曼结构及其基本原理
1945年匈牙利籍数学家冯诺伊曼结合EDVAC计算机的研制提出了世界上第一个完整的计算机体系结构被称为冯诺伊曼结构。冯诺依曼结构的主要特点是①计算机由存储器、运算器、控制器、输入设备、输出设备五部分组成其中运算器和控制器合称为中央处理器Central Processing Processor简称CPU或处理器。②存储器是按地址访问的线性编址的一维结构每个单元的位数固定。指令和数据不加区别混合存储在同一个存储器中。③控制器从存储器中取出指令并根据指令要求发出控制信号控制计算机的操作。控制器中的程序计数器指明要执行的指令所在的存储单元地址。程序计数器一般按顺序递增但可按指令要求而改变。④以运算器为中心输入输出Input/Output简称IO设备与存储器之间的数据传送都经过运算器。
随着技术的进步冯诺依曼结构得到了持续改进主要包括①以运算器为中心改进为以存储器为中心数据流向更加合理从而使运算器、存储器和IO设备能够并行工作。②由单一的集中控制改进为分散控制。早期的计算机工作速度低运算器、存储器、控制器和IO设备可以在同一个时钟信号的控制下同步工作。现在运算器、存储器与IO设备的速度差异很大需要异步分散控制。③从基于串行算法改进为适应并行算法出现了流水线处理器、超标量处理器、向量处理器、多核处理器、对称多处理机Symmetric Multiprocessor简称SMP、大规模并行处理机Massively Parallel Processing简称MPP和机群系统等。④出现了为适应特殊需要的专用计算机如图形处理器Graphic Processing Unit简称GPU、数字信号处理器Digital Signal Processor简称DSP等。
虽然经过了长期的发展,以存储程序和指令驱动执行为主要特点的冯诺伊曼结构仍是现代计算机的主流结构。非冯诺伊曼计算机的研究成果包括依靠数据驱动的数据流计算机、图约计算机等。
2、指令系统结构
计算机系统为软件编程提供不同层次的功能和逻辑抽象主要包括应用程序编程接口Application Programming Interface简称API、应用程序二进制接口Application Binary Interface简称ABI以及ISA三个层次。
API是应用程序的高级语言编程接口在编写程序的源代码时使用。常见的API包括C语言、Fortran语言、Java语言、Javascript语言、OpenGL图形编程接口等。使用一种API编写的应用程序经重新编译后可以在支持该API的不同计算机上运行。
ABI是应用程序访问计算机硬件及操作系统服务的接口由计算机的用户态指令和操作系统的系统调用组成。为了实现多进程访问共享资源的安全性处理器设有“用户态”与“核心态”。用户程序在用户态下执行操作系统向用户程序提供具有预定功能的系统调用函数来访问只有核心态才能访问的硬件资源。当用户程序调用系统调用函数时处理器进入核心态执行诸如访问IO设备、修改处理器状态等只有核心态才能执行的指令。处理完系统调用后处理器返回用户态执行用户代码。相同的应用程序二进制代码可以在相同ABI的不同计算机上运行。
ISA是计算机硬件的语言系统也叫机器语言是计算机软件和硬件的界面反映了计算机所拥有的基本功能。计算机硬件设计人员采用各种手段实现指令系统软件设计人员使用指令系统编制各种软件用这些软件来填补指令系统与人们习惯的计算机使用方式之间的语义差距。设计指令系统就是要选择应用程序和操作系统中一些基本操作应由硬件实现还是由软件通过一串指令实现然后具体确定指令系统的指令格式、类型、操作以及对操作数的访问方式。相同的应用程序及操作系统二进制代码可以在相同ISA的不同计算机上运行。
ISA通常由指令集合、处理器状态和例外三部分组成。
指令包含操作编码和操作数编码操作编码指明操作类型操作数编码指明操作对象。常见的指令编码方式包括复杂指令系统Complex Instruction Set Computer简称CISC精简指令系统Reduced Instruction Set Computer简称RISC和超长指令字Very Long Instruction Word简称VLIW等。
指令的操作主要包括:运算指令,如加减乘除、逻辑运算、移位等;数据传送指令,如取数和存数;程序控制指令,如条件和非条件转移、函数调用和返回等;处理器状态控制指令,如系统调用指令、调试指令、同步指令等。
指令的操作数包括立即数、寄存器、存储器、IO设备寄存器等。立即数是指令中直接给出的数据。寄存器用于保存处理器最常用的数据包括通用寄存器、浮点寄存器、控制寄存器等处理器访问寄存器时直接在指令中指明要访问的寄存器号。存储器是计算机中保存指令和数据的场所计算机取指令和存取数据都要先计算指令和数据所处的存储单元地址并根据地址来读写存储器。IO设备都有专门的设备控制器设备控制器向处理器提供一组IO设备寄存器处理器通过读写IO设备寄存器来获知IO设备状态并控制IO设备处理器写入IO设备寄存器的数据会被设备控制器解释成控制IO设备的命令。
指令需要明确操作数的数据表示、编址方式、寻址方式和定位方式等。数据表示给出指令系统可直接调用的数据类型包括整数、实数、布尔值、字符等。编址方式给出编址单位、编址方法和地址空间等编址单位有字编址、字节编址和位编址普遍使用的是字节编址常见的编址方法有大尾端Big Endian和小尾端Little Endian两种地址空间包括寄存器空间、存储器空间和IO设备空间有些ISA把存储器和IO设备统一编址有些ISA把寄存器、存储器和IO设备统一编址。主要寻址方式有立即数寻址、寄存器寻址、直接寻址、间接寻址、变址寻址包括相对寻址和基址寻址和堆栈寻址等。定位方式确定指令和数据的物理地址直接定位方式在程序装入主存储器之前确定指令和数据的物理地址静态定位方式在程序装入主存储器的过程中进行地址变换确定指令和数据的物理地址动态定位方式在程序执行过程中当访问到相应的指令或数据时才进行地址变换确定指令和数据的物理地址现代计算机多采用动态定位方式。
通用计算机至少要有两种工作状态核心态和用户态。两个状态下所能使用的指令和存储空间等硬件资源有差别。一般来说只有操作系统才能工作在核心态用户程序只能工作在用户态并可以通过例外和系统调用进入核心态。有些处理器有更多工作状态如核心态Kernel、监督态Hypervisor、管理态Supervisor、用户态User等。
例外Exception系统是现代计算机的重要组成部分除了管理外部设备之外还承担了包括故障处理、实时处理、分时操作系统、程序的跟踪调试、程序的监测、用户程序与操作系统的联系等任务。发生例外时处理器需要保存包括例外原因、例外指令的程序计数器内容等信息把处理器状态切换为核心态并跳转到事先指定的操作系统例外处理入口地址执行完例外处理程序后处理器状态切换回发生例外前的状态并跳转回发生例外的指令继续执行。指令系统要指明例外源的分类组织、例外系统的软硬件功能分配、例外现场的保存和恢复、例外优先级、例外响应方式和屏蔽方式等。
3、计算机组织结构
计算机组织结构指计算机的组成部分及各部分之间的互连实现。典型计算机的基本组成包括CPU、存储器、IO设备其中CPU包括运算器和控制器IO设备包括输入设备和输出设备。计算机从输入设备接收程序和数据存放在存储器中CPU运行程序处理数据最后将结果数据通过输出设备输出。
运算器包括算术和逻辑运算部件、移位部件、寄存器等。复杂运算如乘除法、开方及浮点运算可用程序实现或由运算器实现。寄存器既可用于保存数据,也可用于保存地址。运算器还可设置条件码寄存器等专用寄存器,条件码寄存器保存当前运算结果的状态,如运算结果是正数、负数或零,是否溢出等。
控制器控制指令流和每条指令的执行内含程序计数器和指令寄存器等。程序计数器存放当前执行指令的地址指令寄存器存放当前正在执行的指令。指令通过译码产生控制信号用于控制运算器、存储器、IO设备的工作。这些控制信号可以用硬连线逻辑产生也可以用微程序产生也可以两者结合产生。为了获得高指令吞吐率可以采用指令重叠执行的流水线技术以及同时执行多条指令的超标量技术。当遇到执行时间较长或条件不具备的指令时把条件具备的后续指令提前执行称为乱序执行可以提高流水线效率。控制器还产生一定频率的时钟脉冲用于计算机各组成部分的同步。
存储器存储程序和数据又称主存储器或内存一般用动态随机存储器Dynamic Random Access Memory简称DRAM实现。CPU可以直接访问它IO设备也频繁地和它交换数据。存储器的存取速度往往满足不了CPU的快速要求容量也满足不了应用的需要为此将存储系统分为高速缓存Cache)、主存储器和辅助存储器三个层次。Cache存放当前CPU最频繁访问的部分主存储器内容可以采用比DRAM速度快但容量小的静态随机存储器Static Random Access Memory简称SRAM实现。数据和指令在Cache和主存储器之间的调动由硬件自动完成。为扩大存储器容量使用磁盘、磁带、光盘等能存储大量数据的存储器作为辅助存储器。计算机运行时所需的应用程序、系统软件和数据等都先存放在辅助存储器中在运行过程中分批调入主存储器。数据和指令在主存储器和辅助存储器之间的调动由操作系统完成。CPU访问存储器时面对的是一个高速接近于Cache的速度、大容量接近于辅助存储器的容量的存储器。现代计算机中还有少量只读存储器Read Only Memory简称ROM用来存放引导程序和基本输入输出系统Basic Input Output System简称BIOS等。现代计算机访问内存时采用虚拟地址操作系统负责维护虚地址和物理地址转换的页表集成在CPU中的存储管理部件Memory Management Unit简称MMU负责把虚拟地址转换为物理地址。
IO设备实现计算机和外部世界的信息交换。传统的IO设备有键盘、鼠标、打印机和显示器等新型的IO设备能进行语音、图像、影视的输入输出和手写体文字输入并支持计算机之间通过网络进行通信磁盘等辅助存储器在计算机中也当作IO设备来管理。处理器通过读写IO设备控制器中的寄存器来访问及控制IO设备。高速IO设备可以在处理器安排下直接与主存储器成批交换数据称为直接存储器访问Directly Memory Access简称DMA。处理器可以通过查询设备控制器状态与IO设备进行同步也可以通过中断与IO设备进行同步。
由若干个CPU、存储器和IO设备可以构成比单机性能更高的并行处理系统。
现代计算机各部件之间采用总线互连。为了便于不同厂家生产的设备能在一起工作以及设备的扩充总线的标准化非常重要。常见的总线包括片上总线如AXI总线系统总线如QPI和HT总线内存总线如SDRAM总线IO总线如PCIE、SATA、USB总线等。
4、微体系结构
半导体工艺的发展允许在单个芯片内部集成CPU称为微处理器Microprocessor。微体系结构简称微结构是微处理器的组织结构描述处理器的组成部分及其互连关系以及这些组成部分及其互连如何实现指令系统的功能。对于同一个指令系统复杂的微结构性能高功耗和成本也高简单的微结构性能低功耗和成本也低。随着半导体工艺的不断发展实现相同指令系统的处理器微结构不断升级并不断提高性能。
计算机执行指令一般包含以下过程从存储器取指令并对取回的指令进行译码从存储器或寄存器读取指令执行需要的操作数执行指令把执行结果写回存储器或寄存器。上述过程称为一个指令周期。计算机不断重复指令周期直到完成程序的执行。体系结构研究的一个永恒主题就是不断加速上述指令执行周期从而提高计算机运行程序的效率。人们提出了很多提高指令执行效率的技术包括RISC技术、指令流水线技术、高速缓存技术、转移预测技术、乱序执行技术、超标量又称为多发射技术等。
RISC技术。自从1940年代发明电子计算机以来处理器结构和指令系统经历了一个由简单到复杂由复杂到简单又由简单到复杂的否定之否定过程。早期的处理器结构及其指令系统由于工艺技术的限制不可能做得很复杂。随着工艺技术的发展1960年代后流水线技术、动态调度技术、向量机技术被广泛使用处理器结构和指令系统变得复杂。1980年代提出的RISC技术通过减少指令数目、定长编码、降低编码密度等以简化指令的取指、译码、执行的逻辑以提高频率通过增加寄存器数目及load-store结构以提高效率。后来随着深度流水、超标量、乱序执行的实现RISC结构变得越来越复杂。
RISC指令采用load-store结构运算指令从寄存器读取操作数并把结果写回寄存器访存指令则负责在寄存器和存储器间交换数据运算指令和访存指令分别在不同的功能部件执行。在load-store结构中运算器只需比较指令的寄存器号来判断指令间的数据相关访存部件只需比较访存指令的地址来判断指令间的数据相关从而支持高效的流水线、多发射及乱序执行技术。X86系列从Pentium III开始把CISC指令翻译成若干RISC微操作以提高指令流水线效率如Haswell微结构最多允许192个内部微操作乱序执行。
指令流水线技术。指令流水线把一条指令的执行划分为若干阶段(如分为取指、译码、执行、访存、写回阶段)来减少每个时钟周期的工作量,从而提高主频;并允许多条指令的不同阶段重叠执行实现并行处理(如一条指令处于执行阶段时,另一条指令处于译码阶段)。虽然同一条指令的执行时间没有变短,但处理器在单位时间内执行的指令数增加了。
指令流水线的执行单元包括算术和逻辑运算部件Arithmetic Logic Units简称ALU、浮点运算部件Floating Point Units简称FPU、向量运算部件、访存部件、转移部件等。这些部件在流水线的调度下具体执行指令规定的操作。运算部件的个数和延迟访存部件的存储层次、容量和带宽以及转移部件的转移猜测算法是决定微结构性能的重要因素。
Cache技术。随着工艺技术的发展处理器的运算速度和内存容量按摩尔定律的预测指数增加但内存速度提高非常缓慢与处理器速度的提高形成了“剪刀差”。
工艺技术的上述特点使得访存延迟成为以存储器为中心的冯诺依曼结构的主要瓶颈。Cache技术利用程序访问内存的时间局部性一个单元如果当前被访问则近期很有可能被访问和空间局部性一个单元被访问后与之相邻的单元也很有可能被访问使用速度较快、容量较小的Cache临时保存处理器常用的数据使得处理器的多数访存操作可以在Cache上快速进行只有少量访问Cache不命中的访存操作才访问内存。Cache是内存的映像其内容是内存内容的子集处理器访问Cache和访问内存使用相同的地址。从1980年代开始RISC处理器就开始在处理器芯片内集成KB级的小容量Cache。现代处理器则普遍在片内集成多级Cache典型的多核处理器每个处理器核一级指令和数据Cache各几十KB二级Cache为几百KB而多核共享的三级Cache为几MB到几十MB。
Cache技术和指令流水线技术相得益彰。访问处理器片外内存的长延迟使流水线很难发挥作用使用片内Cache可以有效降低流水线的访存时间提高流水线效率。Cache容量越大则流水线效率越高处理器性能越高。
转移预测技术。冯诺依曼结构指令驱动执行的特点使转移指令成为提高流水线效率的瓶颈。典型应用程序平均每5-10条指令中就有一条转移指令而转移指令的后续指令需要等待转移指令执行结果确定后才能取指导致转移指令和后续指令之间不能重叠执行降低了流水线效率。随着主频的提高现代处理器流水线普遍在10-20级之间由于转移指令引起的流水线阻塞成为提高指令流水线效率的重要瓶颈。
转移预测技术可以消除转移指令引起的指令流水线阻塞。转移预测器根据当前转移指令或其它转移指令的历史行为,在转移指令的取指或译码阶段预测该转移指令的跳转方向和目标地址并进行后续指令的取指。转移指令执行后,根据已经确定的跳转方向和目标地址对预测结果进行修正。如果发生转移预测错误,还需要取消指令流水线中的后续指令。为了提高预测精度并降低预测错误时的流水线开销,现代高性能处理器采用了复杂的转移预测器。
乱序执行技术。如果指令i是条长延迟指令如除法指令或Cache不命中的访存指令那么在顺序指令流水线中指令i后面的指令需要在流水线中等待很长时间。乱序执行技术通过指令动态调度允许指令i后面的源操作数准备好的指令越过指令i执行需要使用指令i的运算结果的指令由于源操作数没有准备好不会越过指令i执行以提高指令流水线效率。为此在指令译码之后的读寄存器阶段判断指令需要的操作数是否准备好。如果操作数已经准备好就进入执行阶段如果操作数没有准备好就进入称为保留站或者发射队列的队列中等待直到操作数准备好后再进入执行阶段。为了保证执行结果符合程序规定的要求乱序执行的指令需要有序结束。为此执行完的指令均进入一个称为重排序缓存Reorder Buffer简称ROB的队列并把执行结果临时写入重命名寄存器。ROB根据指令进入流水线的次序有序提交指令的执行结果到目标寄存器或存储器。CDC6600和IBM 360/91分别使用计分板和保留站最早实现了指令的动态调度。
重命名寄存器与指令访问的结构寄存器相对应。为了避免多条指令访问同一个结构寄存器而使该寄存器成为串行化瓶颈,指令流水线可以把对该结构寄存器的访问定向到重命名寄存器。乱序执行流水线把指令执行结果写入重命名寄存器而不是结构寄存器,以避免破坏结构寄存器的内容,到顺序提交阶段再把重命名寄存器内容写入结构寄存器。两组执行不同运算但使用同一结构寄存器的指令可以使用不同的重命名寄存器,从而实现并行执行。
超标量。工艺技术的发展使得在1980年代后期出现了超标量处理器。超标量结构允许指令流水线的每一阶段同时处理多条指令。例如Alpha 21264处理器每拍可以取四条指令发射六条指令写回六条指令提交11条指令。如果把单发射结构比作单车道马路多发射结构就是多车道马路。
由于超标量结构的指令和数据通路都变宽了使得寄存器端口、保留站端口、ROB端口、功能部件数都需要增加例如Alpha 21264的寄存器堆有8个读端口和6个写端口数据Cache的RAM通过倍频支持一拍两次访问。现代超标量处理器一般包含两个以上访存部件两个以上定点运算部件以及两个以上浮点运算部件。超标量结构在指令译码或寄存器重命名时不仅要判断前后拍指令的数据相关还需要判断同一拍中多条指令间的数据相关。
5、并行体系结构
并行体系结构是并行计算机系统的组织结构通过把任务划分为多个进程或线程让不同的处理器并行运行不同的进程或线程来提高性能。此外随着处理器访存延迟的增加Cache失效导致流水线长时间堵塞处理器可以在一个线程等待长时间访存时快速切换到另一个线程执行以提高流水线效率。
多进程并行存在于多个操作系统之间或一个操作系统之内。用于高性能计算的MPI并行程序以及机群数据库是存在于多个操作系统之间的多进程并行的典型应用由操作系统调度的多道程序则是操作系统之内多进程并行的典型应用。多线程并行只存在于一个操作系统之内。线程的粒度比进程小线程的上下文也比进程简单。传统的多线程切换由操作系统调度并保留上下文现代处理器通过硬件实现多份线程上下文来支持单周期的多线程切换。同时多线程Simultaneous Multi-Threading简称SMT技术甚至允许超标量指令流水线的同一流水级同时运行来自不同线程的指令。现代处理器还通过硬件实现多份操作系统上下文来支持多个操作系统的快速切换以提高云计算虚拟机的效率。
并行处理结构普遍存在于传统的大型机、服务器和高端工作站中。包含2-8个CPU芯片的小规模并行服务器和工作站一直是事务处理市场的主流产品。包含16-1024个CPU芯片的大型计算机在大型企业的信息系统中比较普遍。用于科学和工程计算的高性能计算机则往往包含上万个CPU芯片。随着集成电路集成度的不断提高把多个CPU集成在单个芯片内部的多核CPU逐渐成为主流的CPU芯片产品。多核CPU芯片最早出现在嵌入式领域把多个比较简单的CPU集成在一个芯片上。2005年个人计算机CPU芯片开始集成两个CPU核。现在的市场主流个人计算机CPU芯片一般集成2-4个CPU核服务器CPU芯片则集成8-32个CPU核专用处理器如GPU则集成几百到上千个处理核心。
并行处理系统通过互连网络把多个处理器连接成一个整体。常见的互连网络包括总线、交叉开关、环状网络、树形网络、二维或更多维网格等。并行系统的多个处理器之间需要同步机制来协同多处理器工作。常见的同步机制包括锁Lock、栅栏Barrier以及事务内存Transaction Memory计算机指令系统通常要设置专用的同步指令。
在共享存储的并行处理系统中同一个内存单元一般以Cache 行为单位在不同的处理器中有多个备份需要通过存储一致性模型Memory Consistency Model规定多个处理器访问共享内存的一致性标准。典型的存储一致性模型包括顺序一致性Sequential Consistency处理器一致性Processor Consistency弱一致性Weak Consistency释放一致性Release Consistency等。高速缓存一致性协议Cache Coherence Protocol把一个处理器新写的值传播给其它处理器以达到存储一致性的目的。在侦听协议Snoopy Protocol写共享单元的处理器把写信息通过广播告知其它处理器在基于目录的协议Directory-based Protocol每个存储单元对应一个目录项记录拥有该存储单元的副本的那些处理器号写共享单元的处理器根据目录项的记录把写信息告知其它处理器。
6、体系结构的设计目标和方法
体系结构设计的主要指标包括性能、价格和功耗其它指标包括安全性、可靠性、使用寿命等。体系结构设计的主要目标经历了大型机时代一味追求性能Performance per Second到个人计算机时代追求性能价格比Performance per Dollar再到移动互联时代追求性能功耗比Performance per Watt的转变。性能是计算机体系结构的首要设计目标。
性能的最本质定义是“完成一个或多个任务所需要的时间”。完成一个任务所需要的时间由完成该任务需要的指令数、完成每条指令需要的拍数以及每拍需要的时间三个量相乘得到。完成任务需要的指令数与算法、编译器和指令的功能有关每条指令执行拍数Cycles Per Instruction简称CPI或每拍执行指令数Instructions Per Cycle简称IPC与编译、指令功能、微结构设计相关每拍需要的时间也就是时钟周期与微结构、电路设计、工艺等因素有关。
为了满足应用需求并不断提高性能,计算机体系结构在发展过程中遵循一些基本原则和方法,包括平衡性、局部性、并行性和虚拟化。
结构设计的第一个方法就是平衡设计。计算机是个复杂系统影响性能的因素很多。结构设计要统筹兼顾使各种影响性能的因素达到均衡。通用CPU设计有一个关于计算性能和访存带宽平衡的经验法则即峰值浮点运算速度MFLOPS和峰值访存带宽MB/s为1:1左右。计算机体系结构中有一个著名的阿姆达尔Amdahl定律。该定律指出通过使用某种较快的执行方式所获得的性能的提高受限于不可使用这种方式提高性能的执行时间所占总执行时间的百分比例如一个程序的并行加速比最终受限于不能被并行化的串行部分。
结构设计的第二个方法是利用局部性。当结构设计基本平衡以后性能优化要抓主要矛盾重点改进最频繁发生事件的执行效率。结构设计经常利用局部性加快经常性事件的速度。RISC指令系统利用指令的事件局部性对频繁发生的指令进行重点优化。硬件转移预测利用转移指令跳转方向的局部性即同一条转移指令在执行时经常往同一个方向跳转。Cache和预取利用访存的时间和空间局部性优化性能。
结构设计的第三个方法是开发并行性。计算机中可以开发三种层次的并行性。第一个层次的并行性是指令级并行包括时间并行即指令流水线以及空间并行即超标量技术。1980年代RISC出现后指令级并行开发达到了一个顶峰2010年后进一步挖掘指令级并行的空间已经不大。第二个层次的并行性是数据级并行主要指单指令流多数据流Single Instruction Multiple Data简称SIMD的向量结构。二十世纪七、八十年代以Cray为代表的向量机十分流行现代通用CPU普遍支持短向量运算如X86的AVX指令支持256位短向量运算。第三个层次的并行性是任务级并行包括进程级和线程级并行。上述三种并行性在现代计算机中都存在多核CPU运行线程级或进程级并行的程序每个核采用超标量流水线结构并支持SIMD向量指令。
结构设计的第四个方法是虚拟化。所谓虚拟化就是“用起来是这样的实际上是那样的”或者“逻辑上是这样的物理上是那样的”。结构设计者宁愿自己多费事也要尽量为用户提供一个友好的使用界面。如虚拟存储为每个进程提供独立的存储空间虚实地址转换和物理内存分配都由CPU和操作系统自动完成大大解放了程序员的生产力。多线程和虚拟机技术通过硬件支持多个线程上下文或操作系统上下文的快速切换在一个CPU上“同时”运行多个线程或操作系统把单个CPU虚拟成多个CPU。此外流水线和多发射技术在维持串行编程模型的情况下提高了速度Cache技术使程序员看到一个像Cache那么快像内存那么大的存储空间Cache一致性协议在分布式存储的情况下给程序员提供一个统一的存储空间这些都是虚拟化方法的体现。
\newpage