计算机系统结构 第一章 基本概念 第二章 指令系统 第三章 存储系统 第四章 输入输出系统** 第五章 标量处理机 第六章 向量处理机 第七章 互连网络 第八章 并行处理机 第九章 多处理机
第二章 指令系统 本章主要内容: 数据表示*、寻址技术*、 指令系统设计与优化 有三种类型的指令系统: CISC:复杂指令系统 RISC:精简指令系统 VLIW:超长指令字 指令系统设计: 指令的格式设计 指令系统的功能设计 指令系统的性能评价 2.1 数据表示* 2.2 寻址技术* 2.3 指令格式的优化设计 2.4 指令系统的功能设计 2.a VLIW指令系统 本章介绍指令系统设计中2个最基本的内容:数据表示,操作码优化。
第二章 指令系统 指令系统是计算机系统结构的主要组成部分 指令系统是软件与硬件分界面的一个主要标志 指令系统是软件与硬件之间互相沟通的桥梁 指令系统与软件之间的语义差距越来越大
第二章 指令系统 2.1 数据表示
2.1.1 数据表示与数据类型 数据表示的定义: 指计算机硬件能够直接识别,可以被指令系统直接调用的那些数据类型。(由硬件实现的数据类型) 数据结构: 面向计算机系统软件、面向应用领域所需处理的数据类型。 由软件实现的数据类型 确定哪些数据类型用数据表示实现,是软件与硬件的取舍问题。 确定数据表示的原则: 1.缩短程序的运行时间 2.减少CPU与主存储器之间的通信量 3.这种数据表示的通用性和利用率 数据表示在不断发展、扩大 用软件和硬件相结合的方法实现新的数据表示
例2.2 实现A=A+B,A和B均为200×200的矩阵,分析向量数据表示的作用 解: 如果在没有向量数据表示的计算机系统上实现,一般需要6条指令,其中有4条指令要循环4万次。 因此,CPU与主存储器之间的通信量: 取指令2+4×40,000条, 读或写数据3×40,000个, 共要访问主存储器7×40,000次以上。 如果有向量数据表示,只需要一条指令。 减少访问主存(取指令)次数:4×40,000次 缩短程序执行时间一倍以上。
2.1.2 浮点数据表示 浮点数的表示方式 一个浮点数N可以用如下方式表示: m:尾数的值,包括尾数的码制(原码或补码)和数制(小数或整数) e:阶码的值,移码(偏码、增码、译码、余码等)或补码,整数 rm:尾数的基值,2进制、4进制、8进制、16进制和10进制等 re:阶码的基值,通常为2 p:尾数长度,当rm=16时,每4个二进制位表示一位尾数 q:阶码长度,阶码部分的二进制位数,p和q均不包括符号位
浮点数的存储方式 注 mf为尾数的符号位 ef为阶码的符号位 e为阶码的值 m为尾数的值 1位 q位 p位 mf ef e m
2.1.2.5浮点数格式的设计 定义浮点数表示方式的6个参数的确定原则 尾数 多数机器采用原码、小数表示 采用原码制表示 加减法比补码表示复杂,乘除法比补码简单,表示非常直观 采用小数表示能简化运算,特别是乘除法运算 尾数的基值rm选择2 阶码 一般机器都采用整数、移码表示 采用移码表示的主要原因是 浮点0与机器0一致。阶码进行加减运算时,移码的加减法运算要比补码复杂 阶码的基值re取2 浮点数格式设计的关键问题 在表数范围和表数精度给定的情况下,如何确定最短的尾数字长p和阶码字长q
例2.5 要求设计一种浮点数格式,其表数范围不小于1037,正、负数对称,表数精度不低于10-16。 解: 根据表数范围的要求: 解这个不等式: 取阶码字长q=7,据表数精度的要求,得到: 由于浮点数的字长通常为8的倍数,因此,取尾数字长p=55,总的字长为1+1+7+55 = 64,浮点数格式如下: 1位 7位 55位 mf ef e m
所设计浮点数格式的主要性能 最大尾数值 绝对值最小的尾数值 最大阶码 最小阶码 最大正数 最小正数
最大负数 最小负数 表数精度 浮点零:浮点零与机器零相同,64位全为0 表数效率:采用隐藏位,表数效率h = 100%
研究浮点数表示方式的主要目的是用尽可能短的字长实现尽可能大的表数范围和尽可能高的表数精度 通常尾数采用原码或补码纯小数表示,阶码采用移码整数表示 当浮点数的尾数长度相等时,尾数的基为2具有最高表数精度 当浮点数的字长确定后,尾数基取2或4具有最大的表数范围和最高的表数精度 规格化浮点数的表数精度最高
2.1.3 自定义数据表示 一般处理机中的数据表示方法 数据存储单元(寄存器、主存储器、外存储器等)只存放纯数据 通过指令中的操作码来解释 数据的类型(定点、浮点、字符、字符串、逻辑数、向量等) 进位制(2进制、10进制、16进制等) 数据字长(字、半字、双字、字节等) 寻址方式(直接寻址、间接寻址、相对寻址、寄存器寻址 数据的功能(地址、数值、控制字、标志等)等 同一种操作(如加法)有很多条指令 在高级语言和应用软件中,数据的属性由数据自己定义 在高级语言与机器语言之间的语义差距,要靠编译器等填补 60年代开始,Burroughs公司在大型计算机中引入自定义数据表示方式和带标志符的数据表示方式
2.1.3.1采用标志符数据表示方法的主要优缺点 采用标志符数据表示方法的主要优点 (1)简化了指令系统 (2)由硬件自动实现一致性检查和数据类型的转换 (3)简化程序设计,缩小了人与机器之间的语义差距 (4)简化编译器,使高级语言与机器语言之间的语义差距大大缩短 (5)支持数据库系统,一个软件不加修改就可适用于多种数据类型 (6)方便软件调试,在每个数据中都有陷井位 采用标志符数据表示方法的主要缺点 (1)数据和指令的长度可能不一致 (2)指令的执行速度降低。程序的设计时间、编译时间和调试时间缩 (3)硬件复杂度增加
2.1.3.2数据描述符表示法 数据描述符与标志符的区别 标志符只作用于一个数据 数据描述符要作用于一组数据 Burroughs公司生产的B-6700机中采用的数据描述符表示方法
2.2 寻址技术 寻找操作数及其他信息的地址的技术称为寻址技术 内容:编址方式、寻址方式和定位方式 对象:寄存器、主存储器、堆栈和输入输出设备 方法:分析各种寻址技术的优缺点,如何选择和确定寻址技术 2.2.1 编址方式 2.2.2 寻址方式 2.2.3 定位方式 重点是寻址方式的选择方法
2.2.1 编址方式 编址方式是指对各种存储设备进行编码的方法 2.2.1.1编址单位 常用的编址单位:字编址、字节编址、位编址、块编址等 编址单位与访问字长 一般:字节编址,字访问 部分机器:位编址,字访问 辅助存储器:块编址 2.2.1.2零地址空间个数 三个零地址空间:通用寄存器、主存储器和输入输出设备均独立编址 两个零地址空间:主存储器与输入输出设备统一编址 一个零地址空间:所有存储设备统一编址,最低端是通用寄存器,最高端是输入输出设备,中间为主存储器 隐含编址方式,实际上没有零地址空间:堆栈、Cache等
2.2.1.3输入输出设备的编址 一台设备一个地址:必须通过指令中的操作码来识别该输入输出设备上的有关寄存器 一台设备两个地址:一个地址是数据寄存器,一个地址是状态/控制寄存器 一台设备多个地址。对编程增加困难,常用于主存和输入输出设备统一编址的计算机系统 2.2.1.4并行存储器的编址技术 高位交叉编址 主要目的是用来扩大存储器容量 低位交叉编址 主要目的是提高存储器速度
2.2.2 寻址方式 寻址方式:寻找操作数及数据存放单元的方法 2.2.2.1寻址方式的设计思想 立即数寻址方式 用于数据比较短、源操作数 面向寄存器的寻址方式 OPC R OPC R,R OPC R,R,R OPC R,M 面向主存储器的寻址方式 OPC M OPC M,M OPC M,M,M 面向堆栈的寻址方式 OPC
2.2.2.2间接寻址方式与变址寻址方式的比较 目的相同:都是为了解决操作数地址的修改问题,都能做到不改变程序而修改操作数地址 原则上,一种处理机中只需设置间址寻址方式与变址寻址方式中的任何一种即可,有些处理机两种寻址方式都设置 如何选取间址寻址方式与变址寻址方式?优缺点怎样? 例2.7:一个由N个元素组成的数组,已经存放在起始地址为AS的主存连续单元中,现要把它搬到起始地址为AD的主存连续单元中。不必考虑可能出现的存储单元的重叠问题。为了编程简单,采用一般的两地址指令编写程序。
解:用间接寻址方式编写程序如下: start: move asr, asi ;保存源数组的起始地址 move adr, adi ;保存目标数组起始地址 move num, cnt ;保存数据的个数 loop: move @asi, @adi ;用间址寻址方式传送数据 inc asi ;源数组的地址增量 inc adi ;目标数组的地址增量 dec cnt ;个数减1 bgt loop ;测试n个数据是否传送完 halt ;停机 asr: as ;源数组的起始地址 adr: ad ;目标数组的起始地址 num: n ;需要传送的数据个数 asi: 0 ;当前正在传送的源数组地址 adi: 0 ;当前正在传送的源数组地址 cnt: 0 ;剩余数据的个数
用变址寻址方式编写程序如下: start: move as, x ;源数组起址送变址寄存器 move num, cnt ;保存数据个数,保证再入性 loop: move (x), ad-as(x) ;ad-as位地址偏移量, ;在汇编时计算 inc x ;增量变址寄存器 dec cnt ;个数减1 bgt loop ;测试n个数据是否传送完成 halt ;停机 num: n ;需要传送的数据个数 cnt: 0 ;剩余数据的个数
主要优缺点 采用变址寻址方式编写的程序简单、易读 对于程序员,两种寻址方式的主要差别 间址寻址方式:间接地址在主存储器中,没有偏移量 变址寻址方式:基地址在变址寄存器中,有偏移量 实现的难易程度:间址寻址方式容易 指令的执行速度:间址寻址方式慢 对数组运算的支持:变址寻址方式比较好 自动变址:在访问间接地址过程中,地址自动增减 变址与间址混合时,两种方式 前变址寻址方式:EA=((X)+A) 后变址寻址方式:EA=(X)+(A)
2.2.2.3寄存器寻址 主要优点 指令字长短、指令执行速度快、支持向量和矩阵运算 主要缺点 不利于优化编译、现场切换困难、硬件复杂 2.2.2.4堆栈寻址方式 支持高级语言,有利于编译程序;节省存储空间 支持程序的嵌套和递归调用,支持中断处理 运算速度比较低,栈顶部分设计成一个高速的寄存器堆
2.2.3 定位方式 程序的主存物理地址在什么时间确定? 采用什么方式来实现? 2.2.3.1程序需要定位的主要原因 程序的独立性;程序的模块化设计;数据结构在程序运行过程中,其大小往往是变化的;有些程序本身很大,大于分配给它的主存物理空间 2.2.3.2直接定位方式 在程序装入主存储器之前,程序中的指令和数据的主存物理就已经确定了的称为直接定位方式 2.2.3.3静态定位 在程序装入主存储器的过程中随即进行地址变换,确定指令和数据的主存物理地址的称为静态定位方式 2.2.3.4动态定位 在程序执行过程中,当访问到相应的指令或数据时才进行地址变换,确定指令和数据的主存物理地址的称为动态定位方式
2.3 指令格式的优化设计 指令系统的作用 在机器上直接运行的程序由指令组成 指令系统是计算机所有命令的集合,是软件、硬件的之间的一个主要分界面,也是它们之间互相沟通的一座桥梁 主要研究指令格式、数据表示和寻址方式 硬件设计人员采用各种手段实现指令系统,而软件设计人员则使用这些指令系统编制系统软件和应用软件,用这些软件来填补指令系统与人们习惯的使用方式之间的语义差距。指令系统发展越缓慢,需要用软件来填补的东西就越多 指令系统设计必须由软件设计人员和硬件设计人员共同来完成
2.3 指令格式的优化设计 主要目标 节省程序的存储空间 指令格式尽量规整,便于译码 研究内容 操作码的优化表示;地址码的优化表示 2.3.1 指令的组成 2.3.2 操作码的优化设计 2.3.3 地址码的优化设计 2.3.4 指令格式设计举例
2.3.1 指令的组成 一般的指令主要由两部分组成 操作码和地址码 地址码通常包括三部分内容 地址:地址码、立即数、寄存器、变址寄存器 地址的附加信息:偏移量、块长度、跳距 寻址方式:直接寻址、间接寻址、立即数寻址、变址寻址、相对寻址、寄存器寻址 操作码主要包括两部分内容 操作种类:加、减、乘、除、数据传送、移位、转移、输入输出、程序控制、处理机控制等 操作数描述 数据的类型:定点数、浮点数、复数、字符、字符串、逻辑数、向量 进位制:2进制、10进制、16进制 数据字长:字、半字、双字、字节 操作码(OPC) 地址码(A)
2.3.2 操作码的优化表示 操作码的三种编码方法 固定长度,Huffman编码、扩展编码 改进操作码编码方式能够节省程序存储空间 例如:Burroughs公司的B-1700机 操作码编码方式 整个操作系统所用 指令的操作码总位数 改进的百分比 8位固定长编码 301,248 4-6-10扩展编码 184,966 39% Huffman编码 172,346 43%
2.3.2.1 固定长操作码 就是所有指令使用相同的代码位数,其最小码长 式中 是平均码长, 是第i种指令的码长,n是指令总数 优点:规整,译码简单 缺点:浪费信息量(操作码的总长位数增加) 例:已知 n = 15,求定长编码的最小平均码长。 解: 如: IBM公司的大中型机:最左边8位为操作码 Intel公司的Intanium处理机:14位定长操作码 许多RISC处理机采用定长操作码
2.3.2.2 Huffman编码法 (1) Huffman压缩概念(最佳编码定理) 1952年由Huffman首先提出 最早用于电报报文编码,如e,t 等使用频度高,用短编码;q,x 使用频度低,用长编码 基本原理 当用n个长度不等的代码分别代表n种发生概率不等的事件时,按照短代码给高概率事件、把长代码给低概率事件的原则分配,可使平均码长达到最低,即 使用频度高的指令,短编码 使用频度低的指令,长编码
2.3.2.2 Huffman编码法 1992年由Huffman首先提出 最优Huffman编码的操作码的最短平均长度 其中:Pi表示第i种操作码在程序中出现的概率 固定长操作码相对于最优Huffman编码的信息冗余量
Huffman编码法---最小概率合并法 把所有指令按照操作码在程序中出现的概率,自左向右从排列好 选取两个概率最小的结点合并成一个概率值是二者之和的新结点,并把这个新结点与其它还没有合并的结点一起形成新结点集合 在新结点集合中选取两个概率最小的结点进行合并,如此继续进行下去,直至全部结点合并完毕 最后得到的根结点的概率值为1 每个结点都有两个分支,分别用一位代码“0” 和“1”表示 从根结点开始,沿尖头所指方向,到达属于该指令的概率结点,把沿线所经过的代码组合起来得到这条指令的操作码编码 利用Huffman树进行操作码编码的方法,又称为最小概率合并法
例p92 假设一台模型计算机共有7种不同的操作码,如果采用固定长操作码需要3位。已知各种操作码在程序中出现的概率如下表,计算采用Huffman编码法的操作码平均长度,并计算固定长操作码和Huffman操作码的信息冗余量。 指令 I1 I2 I3 I4 I5 I6 I7 概率 0.45 0.30 0.15 0.05 0.03 0.01
解 0.45 0.30 0.15 0.05 0.03 0.01 1.00 0.55 0.25 0.10 0.02 1
利用Huffman树进行操作码编码
利用Huffman树进行操作码编码
利用Huffman树进行操作码编码
利用Huffman树进行操作码编码
利用Huffman树进行操作码编码
利用Huffman树进行操作码编码
利用Huffman树进行操作码编码
利用Huffman树进行操作码编码
利用Huffman树进行操作码编码 指令序号 出现的概率 Huffman编码法 操作码长度 I1 0.45 1位 I2 0.30 1 0 2位 I3 0.15 1 1 0 3位 I4 0.05 1 1 1 0 4位 I5 0.03 1 1 1 1 0 5位 I6 0.01 1 1 1 1 1 0 6位 I7 1 1 1 1 1 1
利用Huffman树进行操作码编码 ??
采用Huffman编码法所得到的操作码的平均长度 =0.45×1+0.30×2+0.15×3+0.05×4 +0.03×5+0.01×6+0.01×6 =1.97(位) 采用最优Huffman编码法,操作码的最短平均长度 =0.45×1.152+0.30×1.737+0.15×2.737 +0.05×4.322+0.03×5.059+0.01×6.644+0.01×6.644 =1.95(位)
采用3位固定长操作码的信息冗余量 Huffman编码法的信息冗余量 与3位定长操作码的冗余量35%相比要小得多 Huffman操作码的优点:平均长度最短,信息的冗余量最小
2.3.2.3扩展编码法 Huffman操作码的主要缺点 操作码长度很不规整,硬件译码困难 与地址码共同组成固定长的指令比较困难 (1)扩展编码法:固定长操作码与Huffman编码法相结合 如例p92改为1-2-3-5扩展编码法,操作码最短平均长度 H = 0.45×1+0.30×2+0.15×3 +(0.05+0.03+0.01+0.01)×5 = 2.00 信息冗余量 例p92改为2-4等长扩展编码法,操作码最短平均长度 H = (0.45×0.30+0.15) ×2+ (0.05+0.03+0.01+0.01)×4 = 2.20
7条指令的操作码扩展编码法 指令序号 出现的概率 1-2-3-5扩展编码 2-4等长扩展编码 I1 0.45 0 0 I2 0.30 1 0 0 1 I3 0.15 1 1 0 I4 0.05 1 1 1 0 0 1 1 0 0 I5 0.03 1 1 1 0 1 1 1 0 1 I6 0.01 1 1 1 1 0 1 1 1 0 I7 1 1 1 1 1 1 1 1 1 平均长度 2.0 2.2 信息冗余量 2.5% 11.4%
(2) 等长扩展法 为了便于实现分级译码,一般采用等长扩展法 根据不同的扩展标志,对于等长扩展法还可以有多种不同的扩展方法 衡量的标准主要看这种编码方法的操作码的平均长度是否最短,或信息量的冗余量是否最小 用码长表示:例如4-8-12法 这并不能说明具体编码方法 如下面两种编码方法都是4-8-12法 用码点数表示:例如15/15/15法,8/64/512法 同属4-8-12法
每一种码长按4位分段,都有4位可编码位(前面可以有相同的扩展标识前缀),可产生16个码点(即编码组合); 15/15/15法 每一种码长按4位分段,都有4位可编码位(前面可以有相同的扩展标识前缀),可产生16个码点(即编码组合); 使用其中15个来表示事件,留下1个或多个码点组合作为更长代码的扩展标识前缀; 表事件的码点必须符合“非前缀原则”。即:已经用来表示事件的码点组合不能再作为其它更长代码的前导部分,否则接收者会混淆; 在4位的16个码点中,用15个表示最常用的15中命令,“XXXX”用1个表示扩展到下一个4位,“1111XXXX”,而第二个4位的16个码点也是如此做法,“11111111XXXX”。 0001 0000 1110 15 . 1111 15/15/15编码法
每一段中至少要留下1位或多位作为扩展标识,各段剩余的码位一起编码,所产生的码点用来对应被编码事件 8/64/512法 每一种码长按4位分段 每一段中至少要留下1位或多位作为扩展标识,各段剩余的码位一起编码,所产生的码点用来对应被编码事件 每一段中的标识位指出后面还有没有后续段。 如,用头4位的“0XXX”表示最常用的8种命令,接着操作码扩展成2个4位,用“1XXX0XXX”的64个码点表示64种指令,而后面扩展成3个4位,用“1XXX1XXX0XXX”的512个码点表示512种命令。 8 0 000 0 001 . 0 111 64 1 000 1 111 512 1 000 0 000 0 001 0 111 1 111 8/64/512编码法
操作码等长扩展编码法 等长15/15/15……扩展法 等长8/64/512……扩展法 操作码编码 说 明 0000 0001 …… 1110 等长15/15/15……扩展法 等长8/64/512……扩展法 操作码编码 说 明 0000 0001 …… 1110 4位长度的 操作码共15种 0111 操作码共8种 1111 0000 1111 0001 1111 1110 8位长度的 1000 0000 1000 0001 1111 0111 操作码共64种 1111 1111 0000 1111 1111 0001 1111 1111 1110 12位长度的 操作码共16种 1000 1000 0000 1000 1000 0001 1111 1111 0111 12位长度的操 作码共512种
(3) 不等长编码法 不等长操作码扩展编码法(4-6-10扩展编码) 编码方法 各种不同长度操作码的指令 指令种类 4位操作码 6位操作码 10位操作码 15/3/16 15 3 16 34 8/31/16 8 31 55 8/30/32 30 32 70 8/16/256 256 280 4/32/256 4 292
小结 操作码优化的主要目的:尽可能地减少各种信息冗余,即 空间、时间少、短,尽可能不要跨断 要想程序占地空间小,则应使操作码尽可能短
2.3.3 地址码的优化表示 2.3.3.1. 地址码个数的选择 地址码个数通常有3个、2个、1个及0个等4种情况 地址码个数直接、决定性地影响计算机系统的 应用领域 性能 硬件设计(存储系统,...) 处理器内部设计(寄存器,数据通路,...) 评价指令中地址码个数应该取多少的标准主要有两个 程序存储容量,包括操作码和地址码 程序执行速度,以程序执行过程中访问主存的信息量代表
例如:计算一个典型的算术表达式: ;用三地址指令编写的程序 MUL X, A, B ;X←(A)×(B) ADD X, X, C ;X←(X)+(C) SUB X, X, D ;分子的计算结果在中 Y, E, F ;计算分母,存入Y DIV X, X, Y ;最后结果在X单元中
;用普通二地址指令编写的程序 MOVE X, A ;复制临时变量到X中 MUL X, B ADD X, C SUB X, D ;X中存放分子运算结果 Y, E ;复制临时变量到Y中 Y, F ;Y中存放分母运算结果 DIV X, Y ;最后结果在X单元中
;用多寄存器结构的二地址指令编写程序 MOVE R1, A ;操作数a取到寄存器R1中 MUL R1, B ADD R1, C SUB R1, D ;R1中存放分子运算结果 R2, E R2, F ;R2中存放分母运算结果 DIV R1, R2 ;最后结果在R1中 X, R1 ;最后结果存入X中
;用一地址指令编写的程序 LOAD E ;先计算分母 ;取一个操作数到累加器中 ADD F ;分母运算结果在累加器中 STORE X ;保存分母运算结果到X中 A ;开始计算分子 MUL B C SUB D ;累加器中是分子运算结果 DIV ;最后运算结果在累加器中 ;保存最后运算结果到X中
;用0地址指令编写程序: ab*c+d-ef+/ PUSH A ;操作数a压入堆栈 B ;操作数b压入堆栈 MUL ;栈顶两数相乘,结果压回堆顶 C ADD D SUB ;栈顶是分子运算的结果 E F DIV ;栈顶是最后运算的结果 POP X ;保存最后运算结果
用不同地址个数指令编写的程序的存储容量和执行速度 地址数目 指令条数 访存次数 程序存储量 执行速度(访存信息量) 三地址 5 20 5P+15A=65B 5P+15A+15D=185B 二地址 7 26 7P+14A=63B 7P+14A+19D=215B 一地址 9 18 9P+9A=45B 9P+9A+9D=117B 零地址 12 41 12P+7A=40B 12P+7A+29D=272B 寄存器型 8 15 8P+7A+9R=40B 8P+7A+9R+7D=96B P表示操作码长度,A表示地址码长度,D表示数据长度,R表示通用寄存器的地址码长度,B表示字节数 并取:D=2A=8P=16R=8B
地址数目 指令条数 访存次数 程序存储量 执行速度(访存信息量) 零地址 12 41 12P+7A=40B 12P+7A+29D=272B P A R W ;用0地址指令编写程序: ab*c+d-ef+/ 1 PUSH ;操作数a压入堆栈 B ;操作数b压入堆栈 2 MUL ;栈顶两数相乘,结果压回堆顶 C ADD D SUB ;栈顶是分子运算的结果 E F DIV ;栈顶是最后运算的结果 POP X ;保存最后运算结果 12 7 17 17R+12W=29D
不同地址个数指令的特点及适用场合 地址数目 程序 的长度 存储量 程序执 行速度 适用场合 三地址 最短 最大 一般 向量,矩阵运算为主 二地址 较短 很大 很低 一般不宜采用 一地址 较长 较大 较快 连续运算,硬件结构简单 零地址 最长 最小 最低 嵌套,递归,变量较多 寄存器型 最快 多累加器,数据传送较多
地址码个数的结论 对于一般商用处理机,采用多寄存器结构的二地址指令是最理想的 如果强调硬件结构简单,并且以连续运算(如求累加和等)为主,宜采用一地址结构 对于以向量、矩阵运算为主的处理机,最好采用三地址结构。部分RISC处理机也采用三地址指令 对于解决递归问题为主的处理机,宜采用零地址结构。编程容易、节省程序存储量
2.3.3.2. 缩短地址码长度的方法 用一个短地址码表示一个大地址空间 用间址寻址方式缩短地址码长度 方法:在主存储器的低端开辟一个专门存放间接地址的区域 用变址寻址方式缩短地址码长度 变址寻址方式中的地址偏移量比较短 用寄存器间接寻址方式缩短地址码长度 例如:16个间址寄存器,用4位地址码就能表示很长的逻辑地址空间
2.3.4指令格式举例 略
2.4 指令系统的功能设计 完整性 是指应该具备的基本指令种类,通用计算机必须有5类基本指令 规整性 包括对称性和均匀性 对称性:所有寄存器同等对待,操作码的设置等都要对称 如:A-B与B-A 均匀性:不同的数据类型、字长、存储设备、操作种类要设置相同的指令 高效率:指令的执行速度要快;指令的使用频度要高;各类指令之间要有一定的比例 兼容性:在同一系列机内指令系统不变(可以适当增加)
2.4.1基本指令系统 指令的种类:数据传送,运算,程序控制,输入输出,处理机控制和调试
1 数据传送类指令 由三个主要因素决定 数据存储设备的种类 数据单位:字、字节、位、数据块等采用的寻址方式 指令种类(以字为传送单位,不考虑寻址方式等) 通用寄存器 --> 通用寄存器 通用寄存器 --> 主存储器 通用寄存器 --> 堆栈 主存储器 --> 通用寄存器 主存储器 --> 主存储器 主存储器 --> 堆栈 堆栈 --> 通用寄存器 堆栈 --> 主存储器
2 运算类指令 考虑四个因数的组合 (1) 操作种类:加、减、乘、除、与、或、非、异或、比较、移位、检索、转换、匹配、清除、置位等 (2) 数据表示:定点、浮点、逻辑、十进制、字符串、定点向量等 (3) 数据长度:字、双字、半字、字节、位、数据块等 (4) 数据存储设备:通用寄存器、主存储器、堆栈等 以加法指令为例,一般应设置 寄存器-寄存器型的定点单字长加法指令 寄存器-寄存器型的定点双字长加法指令 寄存器-寄存器型的定点半字加法指令 寄存器-寄存器型的字节加法指令 寄存器-寄存器型的浮点单字长加法指令 寄存器-寄存器型的浮点双字长加法指令 寄存器-寄存器型的单字长逻辑加法指令 寄存器-寄存器型的定点向量加法指令 寄存器-寄存器型的浮点向量加法指令
以移位指令为例 需要组合以下三个因素 (1)移位方向:左移(L)、右移(R) (2)移位种类:算术移位(A)、逻辑移位(L)、循环移位(R) (3)移位长度:单字长(S)、双字长(D) 组合起来共有:3×2×2=12种 其中,逻辑左移与算术左移相同 一般机器中要设置10条移位指令
一般机器中要设置10条移位指令 SLAS 单字长算术左移 SRAS 单字长算术右移 SLLS(SRLS) 单字长逻辑左移,单字长算术左移 SLRS 单字长循环左移 SRRS 单字长循环右移 SLAD 双字长算术左移 SRAD 双字长算术右移 SLLD(SRLD) 双字长逻辑左移,双字长算术左移 SLRD 双字长循环左移 SRRD 双字长循环右移
主要包括三类:转移指令、调用和返回指令、循环控制指令 条件转移指令 程序调用和返回指令:CALL 转入子程序 3 程序控制指令 主要包括三类:转移指令、调用和返回指令、循环控制指令 条件转移指令 程序调用和返回指令:CALL 转入子程序 RETURN 从子程序返回,本身可以带有条件 中断控制指令:开中断、关中断、改变屏蔽、中断返回、自陷等 转移条件:零(Z)、正负(N)、进位(C)、溢出(V)及它们的组合 主要条件转移指令 BEQ 等于零转移 BNEQ 不等于零转移 BLS 小于转移 BGT 大于转移 BLEQ 小于等于转移,或不大于转移 BGEQ 大于等于转移,或不小于转移 BLSU 不带符号小于转移 BGTU 不带符号大于转移 BLEQU 不带符号小于等于转移,或不带符号不大于转移 BGEQU 不带符号大于等于转移,或不带符号不小于转移 BCC 没有进位转移 BCS 有进位转移 BVC 没有溢出转移 BVS 有溢出转移
IBM370系列机的转移指令 条件码占用状态字PWS的34、35 PWS34 PWS35 条件 对应的屏蔽码 0 0 = 1000 0 1 > 0100 1 0 < 0010 1 1 溢出 0001 主要转移指令有2条 BC M,ADR ;若屏蔽码M符合,转向ADR BCR M,R ;若屏蔽码M符合,转向(R)
举例 指令 助记符 M 等于转移(零转移) BE(BZ) 1000 低于转移(负转移) BL(BM) 0100 高于转移(正转移) BH(BP) 0010 溢出转移 BO 0001 非等于转移(非零转移) BNE(BNZ) 0111 非高于转移(非正转移) BNH(BNP) 1101 非低于转移(非负转移) BNL(BNM) 1011 无条件转移 B 1111
复合条件转移指令 代替2条指令,首先进行运算,并根据运算的结果决定是否转移不需要条件码,与高级语言一致 例如 DNB R ADR ;R←(R)-1,如果R≠0转移 INB R ADR ;R←(R)+1,如果R≠0转移 JEQ R1,R2,ADR ;如果(R1)=(R2)转移 JAD EQ,Rd,Rs,ADR ;Rd←(Rd)+(Rs), ;如果(Rd)=0转移
循环控制指令 用1条指令完成循环的控制代替3条指令的功能:运算、比较和转移 例如 JL Rs,Rz,Ri,ADR Rs中存放循环变量,Rz中存放循环终值,Ri中存放循环的步长 地址个数太多时,可以把其中的1个或几个地址隐含起来 在IBM370下列机中,Ri隐含,循环步长放在与Rz紧相邻的下一寄存器中
隐含转移指令 应用场合:用于特殊的IF..THEN..结构中,THEN部分只有一条指令 实现方法:把IF条件取反,如果取反后的条件成立则取消下条指令,否则执行下条指令 例子:IF (a<b)THEN b=b+1 COMP >=,Ra,Rb ;若(Ra)>=(Rb)则取消 INC Rb 达到的效果 不需要专门的转移指令,程序执行效率高
程序调用和返回指令 本身可以不带条件,也可以带有条件 CALL 转入子程序 RETURN 从子程序返回 CALL CC 当条件CC满足时转入子程序 RETURN CC 当条件CC满足时从子程序返回 中断控制指令 开中断、关中断 改变屏蔽 中断返回 自陷
4 输入输出指令 主要有:启动、停止、测试、控制设备,数据输入、输出操作等采用单一的直接寻址方式 在多用户或多任务环境下,输入输出指令属于特权指令 也可以不设置输入输出指令,输入输出设备与主存储器共用同一个零地址空间
5 处理机控制和调试指令 处理机状态切换指令 处理机至少有两个或两个以上状态 硬件和软件的调试指令 硬件调试指令 钥匙位置、开关状态的读取寄存器 和主存单元的显示等 软件调试指令 断点的设置、跟踪,自陷井指令等
指令系统的优化设计 指令系统的优化设计有两个截然相反的方向 1. 复杂指令系统计算机CISC (Complex Instruction Set Computer) 增强指令功能,设置功能复杂的指令 面向目标代码、高级语言和操作系统 用一条指令代替一串指令 2. 精简指令系统计算机RISC (Reduced Instruction Set Computer) 只保留功能简单的指令 功能较复杂的指令用子程序来实现
2.4.2 CISC指令系统 2.4.2.1 目标程序的优化 2.4.2.2 对高级语言和编译程序的支持 2.4.2.3 操作系统的优化实现
2.4.2.1 目标程序的优化 优化目标程序的指标主要有两个 一是缩短程序的长度,即减少程序的空间开销 另一个是缩短程序的执行时间,即减少程序的时间开销 优化目标程序的方法 对大量的目标程序及其执行情况进行统计分析,找出那些使用频度高,执行时间长的指令或指令串 对于那些使用频度高的指令,用硬件加快其执行,就能缩短整个程序的执行时间 对于那些使用频度高的指令串,用一条新的指令来代替 缩短整个程序的执行时间 缩短整个程序的长度,从而减少程序的空间开销 优化目标程序的主要途径 (1)增强数据传送指令的功能 (2)增强运算型指令的功能 (3)增强程序控制指令的功能
(1)增强数据传送指令的功能 Intel 8088处理机 MOVE、PUSH和POP等3种数据传送指令的使用频度在程序中占40%左右,执行时间占30%以上 IBM大中型计算机的统计结果 数据传送指令所占的比例还要高 数据传送指令在整个指令系统中占有非常重要的地位 设计好数据传送指令对提高计算机系统的性能至关重要 数据块传送指令 (2)增强运算型指令的功能 在科学计算的应用程序中,经常要计算各种各样的函数 为此,在有些计算机系统设置有常用的函数运算指令 如: 开平方 ,三角函数sin(x)、cos(x)、tg(x),对数函数ln(x)、lg(x),指数函数等 这样,就能用一条指令代替软件的一个子程序来完成函数计算
(3)增强程序控制指令的功能 循环在一般程序占有相当大的比例 许多循环程序中的循环体本身往往很短 在一般高级语言中,循环体中只有一条语句的约占40% 有1至3条语句的约占70%左右 循环控制指令在整个循环程序中占据了相当大的比例 可以用一条循环控制指令来实现对循环变量的运算、测试和转移功能
2.4.2.2 对高级语言和编译程序的支持 大多数人都已经习惯用高级语言编写程序,只有在极少数有特殊要求的场合才用机器语言或汇编语言编写程序 目前在机器上实际运行的绝大多数程序,都是用高级语言编写,并经编译程序编译后生成的目标程序 大多数高级语言与一般计算机的机器语言的语义差距非常大 通常用高级语言编写的程序经编译程序编译后生成的目标程序,与直接用机器语言或汇编语言编写的程序相比,时间开销和空间开销都要大一个数量级 改进指令系统,增加对高级语言和编译程序的支持,缩小高级语言与机器语言的差距,就能提高整个计算机系统的性能。 面向高级语言和编译程序增强指令系统的途径 (1)增强对高级语言和编译程序支持的指令的功能 (2)研制高级语言计算机
(1)增强对高级语言和编译程序支持的指令的功能 在用高级语言编写的源程序中,对各种语句的使用频度和执行时间进行统计和分析 对使用频度高,执行时间长的语句,增强有关指令的的功能,或增加相关的专门指令 缩短目标程序长度 减少目标程序执行时间 同时也能缩短编译所用的时间 增强体系结构的规整性,减少体系结构中各种例外情况,是对编译程序的有力支持
(2)研制高级语言计算机 缩小高级语言与机器语言差距,如果走到极端就是把高级语言与机器语言合二为一,即所谓的高级语言计算机 在这种机器中,高级语言不需要经过编译,直接由机器的硬件来执行 如LISP计算机、PROLOG计算机 针对多种高级语言,可以研制各种VLSI芯片,在同一台机器上可以安装多种高级语言的专用芯片 也可以采用微程序技术,通过微程序存储器的动态加载来实现在同一台机器上具有多种高级语言
2.4.2.3 操作系统的优化实现 任何一种计算机系统都必须有操作系统的支撑才能工作,而操作系统又必须用指令系统来实现 指令系统对操作系统的支持主要有 (1) 处理机工作状态和访问方式的转换 (2) 进程的管理和切换 (3) 存储管理和信息保护 (4) 进程的同步和互斥,信号灯的管理等 支持操作系统的有些指令属于特权指令,对一般用户是不公开的 尽管有些指令的使用频度很低,但是,如果没有这些指令的支持,操作系统将很难实现,或根本不能实现 如处理机状态的转换,进程的切换,信号灯的管理等方面所使用的有关指令
1975年,IBM公司率先组织力量研究指令系统的合理性问题 1979年研制出世界上第一台采用RISC思想的计算机IBM 801 70年代,指令系统已经非常复杂 1975年,IBM公司率先组织力量研究指令系统的合理性问题 1979年研制出世界上第一台采用RISC思想的计算机IBM 801 1986年,IBM正式推出采用RISC体系结构的工作站IBM RT PC 机 型 (生产年代) IBM370/168 (1973) VAX-11 (1978) iAPX 432 (1982) Dorado 指令种类 208 303 222 270 微程序容量 420K 480K 64K 136K 指令长度 16-48 16-456 6-321 8-24 采用的工艺 ECL MSI TTL MSI NMOS VLSI 指令操作类型 存储器-存储器 存储器-寄存器 寄存器-寄存器 面向堆栈 Cache容量 64KB
精简指令系统计算机(RISC)是80年代提出的一种新的计算机体系结构设计思想 目前运行中的许多处理机都采用了RISC体系结构 SUN公司的SPARC、SuperSPARC、UtraSPARC SGI公司的R4000、R5000、R10000 IBM公司的Power、Power PC Intel公司的80860、80960 DEC公司的Alpha Motorola公司的88100 HP公司的HP3000/930系列、950系列等 有些典型的CISC处理机也采用了RISC设计思想 如Intel公司的80486、Pentium、Pentium Pro,Xeon等 For rendering Pixar's "Toy Story", the first full length movie to be created only by computers, Pixar used more than 100 Sun SPARCstation 20 workstations and a SPARCserver 1000 to render the whole film. They all had TMS390 SuperSPARC processors.
2.4.3.1 从CISC到RISC CISC指令系统存在的问题 1、20%与80%规律 CISC中,大约20%的指令占据了80%的处理机时间 其余80%指令:使用频度只占20%的处理机运行时间 2、VLSI技术的发展引起的问题 VLSI工艺要求规整性 CISC处理机中,为了实现大量的复杂指令,控制逻辑极不规整,给VLSI造成很大困难 RISC正好适应了VLSI工艺的要求 主存与控存的速度相当 简单指令没有必要用微程序实现, 复杂指令用微程序实现与用简单指令组成的子程序实现没有多大区别 由于VLSI的集成度迅速提高,使得生产单芯片处理机成为可能
表2.25 Intel8088处理机指令系统使用频度和执行时间统计 (C语言编译程序和PROLOG解释程序) 序号 指令 % 累计% 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 MOV PUSH CMP JMPcc ADD POP RET CALL JUMP SUB INC LES REPN IMUL DEC XOR REPNZ CLD LOOPcc TEST 24.85 10.36 10.28 9.03 6.80 4.14 3.92 3.89 2.70 2.43 2.37 1.98 1.92 1.69 1.37 1.13 0.78 0.54 0.52 0.40 35.21 45.49 54.52 61.32 65.46 69.38 73.27 75.97 78.40 80.77 82.75 84.67 86.36 87.73 88.86 89.64 90.18 90.70 91.10 JMP LDS CMPS MOVS JCXZ 19.55 17.44 11.11 10.55 7.80 7.27 4.85 3.27 3.26 2.83 2.61 1.49 1.18 1.04 0.99 0.64 0.44 0.39 0.37 36.99 48.10 58.65 66.45 73.72 78.57 81.84 85.10 87.93 90.54 92.03 93.21 94.25 95.24 95.88 96.52 96.96 97.35 97.72
表2.26 Intel 8088处理机各类指令使用频度统计 指令类型 8种应用程序 平均值 F1 F2 F3 F4 F5 F6 F7 数据传送 算术运算 逻辑运算/位操作 字符串处理 转移指令 处理器控制 34.25 24.97 3.40 2.42 34.84 0.13 35.85 22.34 4.34 4.22 32.99 0.26 28.84 45.32 7.63 2.72 15.34 0.15 20.12 43.65 7.49 2.01 17.63 0.10 25.04 45.72 6.38 2.10 20.52 0.24 24.33 45.42 3.97 2.35 25.72 0.19 34.31 28.28 4.89 30.29 0.14 30.25 36.24 5.44 2.86 25.33
3、软硬件的功能分配问题 复杂的指令使指令的执行周期大大加长 一般CISC处理机的指令平均执行周期都在4以上,有些在10以上 CISC增强了指令系统功能,简化了软件,但硬件复杂了 1981年Patterson等人研制了32位RISC I微处理器 共31种指令,3种数据类型,2种寻址方式 所有指令都在一个周期(500ns)内完成。只有LOAD/STORE这里可以访问存储器,其它指令的操作都在通用寄存器之间进行,有78个通用寄存器 采用寄存器窗口技术 研制周期10个月,比当时最先进的MC68000和Z8002快3至4倍 1983年又研制了RISC II 指令种类扩充到39种,单一的变址寻址方式,通用寄存器138个
2.4.3.2 RISC的定义与特点 卡内基梅隆大学(Carnegie Mellon)论述RISC的特点 1、大多数指令在单周期内完成 2、LOAD/STORE结构 3、硬布线控制逻辑 4、减少指令和寻址方式的种类 5、固定的指令格式 6、注重优化编译技术 从目前的发展来看,RISC体系结构还应具有如下特点 (1) 面向寄存器结构 (2) 十分重视提高流水线的执行效率 要提高RISC处理机的速度,必须采用流水线,而且,要尽量减少断流,提高流水线的效率 (3) 重视优化编译技术 优化编译技术在提高系统性能中发挥很重要的作用,改变了过去认为提高计算机速度仅仅依靠硬件的传统观点 高效率的流水线和优化编译技术是现代RISC系统必须十分注重的两点。这比卡内基梅隆大学的定义更加全面了
90年代初,IEEE的Michael Slater对RISC定义的描述 (1)简单而统一格式的指令译码 (2)大部分指令可以单周期执行完成 (3)仅Load和Store指令可以访问存储器 (4)简单的寻址方式 (5)采用延迟转移技术 (6)采用LOAD延迟技术 2、RISC为使优化编译器便于生成优化代码,应具有 (1)三地址指令格式 (2)较多的寄存器 (3)对称的指令格式
2.4.3.3 减少CPI是RISC思想的精华 程序执行时间 P = I· CPI · T 其中 P是执行这个程序所使用的总的时间 I是这个程序所需执行的总的指令条数 CPI (Cycles Per Instruction)是每条指令执行的平均周期数 T是一个周期的时间长度 RISC的速度要比CISC快3倍左右,关键是RISC的CPI减小了 类 型 指令条数I 指令平均周期数CPI 周期时间T CISC 1 2~15 33ns~5ns RISC 1.3~1.4 1.1~1.4 10ns~2ns
对于T而言 RISC一般采用硬布线逻辑实现,指令要实现的功能都比较简单 RISC的T通常要比CISC的T小 RISC处理机的工作主频一般要比CISC处理机高 对于CPI而言 RISC的大多数指令都是单期执行的,他们的CPI应该是1 由于RISC中还有LOAD和STORE指令,也还有少数复杂指令,所以,CPI要略大于1 对于 I 而言 由于CISC中复杂指令使用的频度很低,程序中使用的绝大多数指令都是与RISC一样的简单指令 因此,实际上RISC的I长度只比CISC的长30%~40% 结论 RISC的速度要比CISC快3倍左右 同类问题的程序长度,RISC比CISC长30%~40%
硬件方面 采用硬布线控制逻辑 减少指令和寻址方式的种类 使用固定的指令格式 采用LOAD/STORE结构 指令执行过程中设置多级流水线等 软件方面 十分强调优化编译技术的作用 RISC设计思想也可以用于CISC中 例如:Intel公司的80x86处理机的CPI在不断缩小 8088的CPI大于20 80286的CPI大约是5.5 80386的CPI进一步减小到4左右 80486的CPI已经接近2 Pentium处理机的CPI已经与RISC十分接近 目前,超标量、超流水线处理机的CPI已经达到0.5,实际上用IPC (Instruction Per Cycle)更确切
2.4.3.4 RISC的关键技术 1、延时转移技术 2、指令取消技术 3、重叠寄存器窗口技术 4、指令流调整技术 5、以硬件为主固件为辅
1. 延时转移技术 思想 为了使指令流水线不断流,在转移指令之后插入一条没有数据相关和控制相关的有效指令,而转移指令被延迟执行,这种技术称为延迟转移技术 采用指令延迟转移技术时,指令序列的调整由编译器自动进行,用户不必干预 采用延迟转移的程序,必须十分小心
无条件转移指令的延迟执行
条件转移指令的延迟执行 调整前的指令序列 1:MOVE R1, R2 2:CMP R3, R4 ;(R3)与(R4)比较 3:BEQ NEXT ;如果(R3)=(R4)则转移 ……… NEXT: MOVE R4, A 调整后的指令序列 1:CMP R3, R4 ;(R3)与(R4)比较 2:BEQ NEXT ;如果(R3)=(R4)则转移 3:MOVE R1,R2 ;被插入的指令 NEXT: MOVE R4, A
采用延迟转移技术的两个限制条件 1 被移动指令在移动过程中与所经过的指令之间没有数据相关 2 被移动指令不破坏条件码,至少不影响后面的指令使用条件码 如果找不到符合上述条件的指令,必须在条件转移指令后面插入空操作 如果指令的执行过程分为多个流水段,则要插入多条指令 插入1条指令成功的概率比较大 插入2条或2条以上指令成功的概率明显下降
2. 指令取消技术 采用指令延时技术,经常找不到可以用来调整的指令 可考虑采用另一种方法:指令取消技术 分为两种情况 (1)向后转移(适用于循环程序) 实现方法 循环体的第一条指令安放在两个位置,分别在循环体的前面和后面 如果转移成功,则执行循环体后面的指令,然后返回到循环体开始 否则取消循环体后面的指令
(1)向后转移(适用于循环程序) 效果 能够使指令流水线在绝大多数情况下不断流 对于循环程序,绝大多数情况下,转移是成功的 只有最后一次出循环时,转移不成功
(2)向前转移(IF THEN) 实现方法:如果转移不成功,继续执行转移指令之后的下条指令TTT,否则取消下条指令 例子 R R R …… “IF”部分的程序代码 S S S COMP R1, R2, THRU T T T …… “THEN”部分的程序代码 U U U THRU: V V V 效果:转移成功与不成功的概率, 通常各占50% 优点:不必进行指令流调整
隐含转移技术 特殊的IF..THEN..结构中,THEN部分只有一条指令 把IF条件取反,如果取反后的条件成立则取消下条指令,否则执行下条指令 例子:IF (a<b)THEN b=b+1 COMP >=,Ra,Rb ;若(Ra)>=(Rb)则取消 ;否则,继续完成INC INC Rb
3. 重叠寄存器窗口技术 (Overlapping Register Window) 原因 在RISC中,子程序比CISC中多 CALL和RETURN操作保存现场、传送参数访问存储器的信息量很大 为使CALL和RETURN操作尽量少访问存储器,美国加洲大学伯克利分校的F.Baskett提出重叠寄存器窗口技术 实现方法 设置一个数量比较大的寄存器堆,并把它划分成多个窗口 每个过程使用其中相邻的3个窗口和一个公共的窗口 有一个窗口与前一个过程共用 存放前一过程传送给本过程的参数 存放本过程传送给前一过程的计算结果 有一个窗口与下一个过程共用 存放本过程传送给下一过程的参数 存放下一过程传送给本过程的计算结果
RISC II的重叠寄存器窗口
SUN公司的SPARC、SuperSPARC、UtraSPARC等处理机,把最后一个过程与第一个过程的公用寄存器重叠起来,形成一个循环 3. 重叠寄存器窗口技术 SUN公司的SPARC、SuperSPARC、UtraSPARC等处理机,把最后一个过程与第一个过程的公用寄存器重叠起来,形成一个循环 效果:可以减少大量的访存操作 在主存中开辟一个堆栈,当调用层数超过规定层数(寄存器溢出)时,把溢出部分的寄存器中内容压入堆栈 For rendering Pixar's "Toy Story", the first full length movie to be created only by computers, Pixar used more than 100 Sun SPARCstation 20 workstations and a SPARCserver 1000 to render the whole film. They all had TMS390 SuperSPARC processors.
注:Quicksort程序的调用的次数多,深度不大,Puzzle程序正好相反 3. 重叠寄存器窗口技术 寄存器窗口技术的效果 过程调用所需开销的比较 注:Quicksort程序的调用的次数多,深度不大,Puzzle程序正好相反 程序名称 调用次数 最大 调用深度 RISC II 溢出次数 访存次数 VAX-11 Quicksort 111K(0.7%) 10 64 4K(0.8%) 696K(50%) Puzzle 43K(8.0%) 20 124 8K(1.0%) 444K(28%) 机器类型 执行指令条数 执行时间(微秒) 访问存储器次数 VAX-11 PDP-11 MC68000 RISC II 5 19 9 6 26 22 2 10 15 12 0.2
4. 指令流调整技术 目标:通过变量重新命名消除数据相关,提高流水线效率 例子 ADD R1, R2, R3 ;(R1)+(R2)→R3 ADD R1, R2, R3 ADD R3, R4, R5 ;(R3)+(R4)→R5 MUL R6, R7, R0 MUL R6. R7, R3 ;(R6)×(R7)→R3 ADD R3, R4, R5 MUL R3, R8, R9 ;(R3)×(R8)→R9 MUL R0, R8, R9 (a) 调整前的指令序列 (b) 调整后的指令序列 (a)由于存在R3寄存器的数据相关,第二条指令必须等第一条指令执行完后才能开始执行,后续的指令也是这样。如果执行一条指令需要两个机器周期,那么,每两条指令之间都要浪费一个周期 (b)是通过优化编译器调整后的指令序列。在两条乘法指令中用R0寄存器代替原来的R3寄存器,消除了两条乘法指令与两条加法指令之间的数据相关,并且重新调整指令序列 调整后的指令序列比原指令序列的执行速度快一倍
5. 以硬件为主固件为辅 固件的主要缺点是 执行速度低 目前,ROM的速度低于SRAM 一条机器指令通常要多条微指令解释执行 固件的主要优点是:便于实现复杂指令,便于修改指令系统 以硬联逻辑为主来实现指令系统,对于少数复杂的指令,目前的许多处理机也用微程序技术实现
2.4.3.5 RISC优化编译技术 RISC对编译器带来方便 (1)指令系统比较简单、对称、均匀,指令选择工作简单 (2)选择寻址方式的工作简单 (3)采用LOAD/STORE方式,省去了是否生成访问存储器指令的选择工作 (4)大多数指令在一个周期内执行完成,为编译器调整指令序列提供了极大的方便 RISC对编译器造成困难 (1)必须精心安排每一个寄存器的用法,以便充分发挥每一个通用寄存器的效率,尽量减少访问主存储器的次数 (2)做数据和控制相关性分析,要调整指令的执行序列,并与硬件相配合实现指令延迟技术和指令取消技术等 (3)要设计复杂的子程序库 RISC的子程序库通常要比CISC的子程序库大得多
2.a VLIW指令系统 2.a.1 什么是VLIW 2.a.2 指令级并行技术 2.a.3 VLIW的主要特点 2.a.4 VLIW处理机 2.a.5 目标代码兼容问题
2.a.1 什么是VLIW 1. VLIW (Very Long Instruction Word) 的背景 2. 什么是VLIW指令系统--一种显式指令级并行指令系统 由美国J. A. Fisher教授于1981年首先提出 最初来源于水平微程序 由J. A. Fisher创建的Mutiflow公司研制了的世界上第一台VLIW处理机TRACE28/300 一条指令中包含有多个能够同时执行的操作 TRACE28/300处理机的一条超长指令中最多有28条可以同时执行的指令 算法和编译技术是关键 在下一代处理机中将普遍采用
2.a.1 什么是VLIW 2. 什么是VLIW指令系统--一种显式指令级并行指令系统 在一条VLIW指令中包含有多个相同或不同的操作字段(每个操作字段的功能相当于一般处理机中的一条指令) 每个操作字段能够分别独立控制各自的功能部件同时工作 二维程序结构 指令级并行度高
2.a.2 指令级并行 提出VLIW指令系统的主要目的是要开发程序中的指令级并行性(Instruction Level Parallelism) 超标量(Superscalar)处理机 依靠设置多条指令流水线,并通过同时发射多条指令来提高处理机的运算速度 超流水线(Superpipelining)处理机 通过分时使用同一条指令流水线的不同部分来提高处理机的运算速度 VLIW处理机
2.a.3 VLIW的主要特点 1.采用显式并行指令计算 2.指令级并行度高 3. 硬件结构规整、简单 4. 编译器的实现难度大 1. 采用显式并行指令计算(EPIC:Explicitly Parallel Instruction Computing)方式 在VLIW处理机上运行的程序是一个二维指令矩阵,每一行上的所有操作组成一条超长指令,他们之间没有数据相关、控制相关和功能部件冲突,这些指令可以在VLIW处理机上同时执行 超标量处理机和超流水线处理机通常采用隐式并行指令方式。程序是一维线性的指令序列,每条指令中一般只包含一个操作
2.a.3 VLIW的主要特点 2.指令级并行度高 超标量处理机和超流水线处理机的指令级并行度一般为2左右,通常不超过4 目前多数VLIW处理机的指令级并行度在4至8之间,有的已经达到几十 VLIW通过并行编译器来开发程序中的指令级并行性 可以在一个循环、一个函数、甚至整个程序中寻找指令级并行性 可以采用软件流水、循环展开等指令级并行度很高的方法充分开发程序中的多种并行性
2.a.3 VLIW的主要特点 3. 硬件结构规整、简单 VLIW处理机主要由很规则的寄存器、存储器、运算部件和数据通路等组成 规则的控制器很简单 不需要复杂的指令并行调度窗口及多发射机制等 4. 编译器的实现难度大 VLIW并行编译器主要依靠 指令级并行算法 数据相关性分析算法 寄存器分配算法 及并行编译技术等 来显式开发程序中的指令级并行性,从而提高处理机的运行速度 要研制指令级并行度高的编译器难度很大
2.a.4 VLIW处理机 1. 安腾(Itanium)处理机 Intel公司与HP公司联合研制 在Intel公司称为IA-64处理机 安腾(Itanium)处理机有自己独立的系统软件和应用软件 2. DAISY (Dynamically Architected Instruction Set from Yorktown) 处理机 由IBM公司研制 采用动态二进制转换技术实现与X86处理机兼容
2.a.4 VLIW处理机 3. Crusoe(漂流) 、Efficeon处理机 由Transmeta(全美达)公司研制 大量应用于笔记本计算机中,一个重要特点是功耗很低 采用动态二进制转换技术把X86通用处理机的程序直接映射到Crusoe处理机的VLIW结构中执行 4. 嵌入式、DSP、JAVA虚拟机 很多专用处理机采用VLIW体系结构
2.a.5 目标代码兼容问题 1. 动态代码转换技术:两个成功的先例 IBM公司推出了开放源代码DAISY 可实现IBM的VLIW处理器与X86处理机之间的二进制兼容 可实现PowerPC、S/390、IBM的Java虚拟机与VLIW处理器之间的二进制兼容 Transmeta公司推出了“代码映射软件”(Code Morphing Software) 这种软件可以保证Transmeta公司的VLIW处理机Crusoe能够与X86处理机之间实现二进制兼容
2.a.5 目标代码兼容问题 Crusoe处理机动态转换技术
2.a.5 目标代码兼容问题 2. IBM公司的VLIW处理机
2.a.5 目标代码兼容问题 IBM公司推出的开放源代码DAISY
2.a.5 目标代码兼容问题 IBM公司的PowePC到VLIW的转换
2.a.5 目标代码兼容问题 3. 可执行代码的并行编译技术 有动态重编译和静态重编译两种方法 动态重编译:DAISY和Code Morphing 静态重编译:还没有商业化的先例 难度很大,正在研究中 目标 一种系列机的目标代码重新编译到本系列机或另一种系列机的并行目标代码 方法 串行目标代码中间表示形式数据相关性分析并行调度并行目标代码
3. 可执行代码的并行编译技术 意义 (1)编译器不再受限于程序采用的编程语言、开发工具及开发环境,不同的编程语言都呈现为统一的二进制视图 (2)将大量已有的二进制目标代码直接编译成能够在最新的超标量、超流水线或VLIW处理机上执行的并行可执行代码,充分利用最新处理机的硬件资源,大幅度缩短程序的执行时间 (3)不同机器之间的软件能够很方便地移植 (4)系统结构与软件可以同时并行发展,克服目前制约系统结构发展的限制因素
3. 可执行代码的并行编译技术 关键技术 (1)可执行代码的指令流重构和控制流重构,如非规则循环结构的整理和重构等 (2)中间代码的表示形式和表示方法 (3)如何把各种可执行代码转换成中间代码 (4)可执行代码的数据相关性分析,进行有效数组相关性分析的前提是正确重构数组下标表达式 (5)系统调用和中断指令在并行优化中的正确性及效率
本章重点 **1. 浮点数的表示方法及性质 **2. 浮点数的设计方法 **3. 浮点数的舍入方法和警戒位位数的设置 **4. 自定义数据表示方法的原理 5. 指令格式的优化设计 6. RISC思想 7. RISC关键技术
习题2.14 一台模型机共有7条指令,各指令的使用频率分别为35%,25%,20%,10%,5%,3%和2%,有8个通用数据寄存器,2个变址寄存器。 (1)要求操作码的平均长度最短,请设计操作码的编码,并计算所设计操作码的平均长度。 (2)设计8字长的寄存器-寄存器型指令3条,16位字长的寄存器-存储器型变址寻址方式指令4条,变址范围不小于±127。请设计指令格式,并给出各字段的长度和操作码的编码。
[解答] (1)要使得到的操作码长度最短,应采用Huffman编码,构造Huffman树如下: 0.35 0.25 0.20 0.10 0.05 0.03 0.02 0.40 0.60 1.00
由此可以得到7条指令的编码分别如下: 指令 出现的频率 编 码 1 35% 00 2 25% 01 3 20% 10 4 10% 110 5 5% 1110 6 3% 11110 7 2% 11111
这样,采用Huffman编码法得到的操作码的平均长度为: + 5×(0.03 + 0.02) = 1.6+0.3+0.2+0.25 =2.35
(2)设计8位字长的寄存器-寄存器型变址寻址方式指令如下,因为只有8个通用寄存器,所以寄存器地址需3位,操作码只有两位,设计格式如下: 三条指令的操作码分别为00,01,10 设计16位字长的寄存器-存储器型变址寻址方式指令如下: 四条指令的操作码分别为1100, 1101,1110,1111
[习题2.15] 某处理机的指令字长为16位,有双地址指令、单地址指令和零地址指令三类,并假设每个地址字段的长度均为6位。 (1)如果双地址指令有15条,单地址指令和零地址指令的条数基本相同,问单地址指令和零地址指令各有多少条?并且为这三类指令分配操作码。 (2)如果要求三类指令的比例大致为1:9:9,问双地址指令、单地址指令和零地址指令各有多少条?并且为这三类指令分配操作码。
首先,我们可以根据指令地址的数量来决定各种指令在指令空间上的分布: 如果我们按照从小到大的顺序分配操作码,这样,按照指令数值从小到大的顺序,分别为双地址指令、单地址指令和零地址指令。 其次可以根据指令的条数来大致的估计操作码的长度: 双指令15条,需要4位指令来区分,剩下的12位指令平均分给单地址和零地址指令,每种指令可以用6位指令来区分,这样,各指令的条数为: 双地址指令15条,地址码:0000~1110; 单地址指令26-1=63条,地址码:1111 000000~1111 111110; 零地址指令64条,地址码:1111 111111 000000~1111 111111 111111。
(2)与上面的分析相同,可以得出答案: 双地址指令14条,地址码:0000~1101; 单地址指令26 x 2-2 = 126条, 1110 000000~1110 111110, 1111 000000~1111 111110; 零地址指令128条 1111 111111 000000~1111 111111 111111