§4 指令系统的发展和改进 CISC和RISC 按CISC方向发展和改进指令系统 按RISC方向发展和改进指令系统
指令系统的优化设计 优化指令系统设计的3个阶段: 关键在软硬件的功能分配,系统的综合性能时间与空间;执行、编译、编写时间 CISC:复杂指令系统60年代至70年代中期 RISC:精简指令系统70年代后期至现在 VLIW:80年代初期至现在 关键在软硬件的功能分配,系统的综合性能时间与空间;执行、编译、编写时间
复杂指令系统计算机 方法:用一条指令代替一串指令 优化的途径: Complex Instruction Set Computer CISC 增强原有指令的功能,设置更为复杂的新指令取代原先由软件子程序完成的功能,实现软件功能的硬化。 IBM 370、VAX-11/780、VAX 8600、Intel i486、MC 68040 方法:用一条指令代替一串指令 增加新的指令 增强指令功能,设置功能复杂的指令 增加寻址方式 增加数据表示方式 优化的途径: 面向目标代码 面向高级语言 面向操作系统
指令系统复杂的原因 当高级语言(如C语言)取代汇编语言后,就不断增加新的复杂指令来支持高级语言程序的高效实现; 由于访主存的速度显著低于访CPU寄存器的速度,因此在功能相同时,不断用一条功能复杂的新指令来取代原先需一连串指令完成的功能,将程序软件固化和硬化; 系列机软件要求向上兼容和向后兼容,使得指令系统不断扩大和增加;
精简指令系统计算机 Reduced Instruction Set Computer RISC 减少指令总数和简化指令的功能,降低硬件设计的复杂性,提高指令的执行速度。 Sun SPARC、Intel i860、MC 88100、IBM 6150 只保留功能简单的指令 功能较复杂的指令用软件实现 提高流水线效率
超长指令字 Very Long Instruction Word VLIW 一种显式指令级并行指令系统 二维程序结构 指令级并行度高
按CISC方向发展与改进指令系统 面向目标程序的优化实现改进 面向高级语言的优化实现改进 面向操作系统的优化实现改进
面向目标程序的优化实现来改进 对使用频度高的指令增强其功能 提高运算型指令功能 提高传送指令功能 增加程序控制指令功能 静态使用频度---减少存储空间 动态使用频度---减少执行时间 提高运算型指令功能 提高传送指令功能 增加成组取、成组传送指令 增加条件转移指令 增加程序控制指令功能
举例 ST REG,SAVE L REG,VARIABLE 增设一条指令 LA REG,N,(REG) 增量 N X2 B2 D2 IBM360指令串: (VARIABLE)+N->(VARIABLE) ST REG,SAVE L REG,VARIABLE 增设一条指令 LA REG,N,(REG) 增量 N X2 B2 D2 ST REG VARIABLE L REG,SAVE 5条,20个字节,8.8微秒 1条,4个字节,2.7微秒
面向高级语言的优化实现来改进 增加对高级语言和编译系统支持的指令功能 高级语言计算机指令系统 对源程序中各种高级语言语句的使用频度进行统计 面向编译,优化代码生成 改进指令系统,减少语义差距 让机器具有分别面向各种高级语言的多种指令系统、多种系统结构,并能动态切换 发展高级语言计算机; 间接执行高级语言机器:高级语言直接成为机器的汇编语言 直接执行高级语言机器:让高级语言本身作为机器语言,由硬件或固件对高级语言源程序的语句逐条进行解释执行;
各种语言与传统机器指令系统结构的语义差距 Von Neumann结构 COBOL PL/1 APL FORTRAN BASIC
各种机器的语义差距 高级语言程序 汇编 间接执行 编译 面向 高级语言 机 器 传统 机器 解释 微程序机器级 直 接 执 行 高 级 语 机 器 传统 机器 间接执行 解释 汇编 编译 直 接 执 行 高 级 语 言 机 器 解 释
面向操作系统的优化实现来改进 通过对操作系统中常用的指令和指令串的使用频度进行统计和分析来改进 专用于操作系统的新指令,举例: 测试与置定 自学 比较与交换 自学 把操作系统由软件子程序实现的某些功能进行硬化或固化,改用硬件和固件实现 发展让操作系统由专门的处理机来完成的功能分布处理系统结构
按RISC方向发展与改进指令系统 精简指令系统思想的提出 IBM公司的John Cocke设计一个电话交换系统的控制器,1979年研制出32位的IBM 801 小型计算机,120条指令,10MIPS(1千万条指令/秒)。 1979年,美国加州大学伯克利分校David Patterson研究小组开始研究RISC系统。 1981年Patterson等人研制了32位RISC I微处理器,共31种指令,3种数据类型,2种寻址方式;研制周期10个月,比当时最先进的MC68000和Z8002快3至4倍; 1983年又研制了RISC II,指令种类扩充到39种,单一的变址寻址方式,通用寄存器138个
CISC的主要特点 指令系统庞大,指令功能复杂,指令格式、寻址方式多; 绝大多数指令需多个机器周期完成; 各种指令都可访问存储器; 采用微程序控制; 有专用寄存器,少量; 难以用优化编译技术生成高效的目标代码程序;
CISC存在的问题 指令系统庞大,指令功能复杂,指令格式、寻址方式多; 执行速度慢; 难以优化编译,编译程序复杂; 80%的指令在20%的运行时间使用; 无法并行; 无法兼容;
导致CISC指令系统复杂的主要原因 减少语义差距 带来的后果 减少存储空间,提高速度 电路复杂,编译效率低 为了向上兼容 无法并行; 无法兼容
典型的CISC产品 项 目 VAX11/780 1978年 Intel 80386 1985年 MC68020 1984年 指令条数 304 项 目 VAX11/780 1978年 Intel 80386 1985年 MC68020 1984年 指令条数 304 111 101 寻址方式 24 11 16 指令格式 变长 (2-57byte) (1-17byte)
从CISC到RISC CISC指令系统存在的问题: 20%与80%规律 VLSI技术的发展引起的问题 VLSI工艺要求规整性,RISC正好适应了VLSI工艺的要求 主存与控存的速度相当,简单指令没有必要用微程序实现,复杂指令用微程序实现与用简单指令组成的子程序实现没有多大区别; 由于VLSI的集成度迅速提高,使得生产单芯片处理机成为可能。
二八法则 1897年,意大利经济学家帕累托(1848~1923)偶然注意到英国人的财富和收益模式,于是潜心研究这一模式,并于后来提出了著名的二八法则。 一般情况下,我们付出的80%的努力,也就是绝大部分的努力,都没有创造收益和效果,或者是没有直接创造收益和效果。而我们80%的收获却仅仅来源于20%的努力,其他80%的付出只带来20%的成果。
二八法则 为公司创造80%收益的客户实际上只占所有客户的20%;而在企业中,20%的员工为企业创造了80%的收益。 80%的交通事故是被那些20%的违规驾驶者造成的;家里的地毯有20%遭受了80%程度的磨损;你所有衣服中的20%占据了你全部生活时间的80%;你的电脑80%的故障是由20%的原因导致的;你一生使用的80%的文句是用字典里20%的字组成的。而在考试中,20%的知识能为你带来80%的分数。同样的道理,你20%的朋友,占据了你80%与朋友见面的时间……
二八法则 20%时间赢得80%的快乐 研究二八法则的专家理查德·科克认为:凡是洞悉了二八法则的人,都会从中受益匪浅,有的甚至会因此改变命运。 传统的智慧教你不要把所有的鸡蛋放在同一个篮子里,可是二八法则却要你小心选定一个篮子,将你所有的鸡蛋放进去,然后像老鹰一样盯紧它。
二八法则 在CISC中,大约20%的指令占据了80%的处理机执行时间。 例如:8088处理机的指令种类大约100种 前11种(11%)指令的使用频度已经超过80% 前8种(8%)指令的运行时间已经超过80% 前20种(20%)指令:使用频度达到91.1%,运行时间达到97.72% 其余80%的指令:使用频度只有8.9%,2.28%的处理机运行时间
从CISC到RISC(续) 软硬件的功能分配问题
RISC的定义 卡内基梅隆(Carnegie Mellon)大学论述RISC的特点如下: 大多数指令在单周期内完成 LOAD/STORE结构 硬布线控制逻辑 减少指令和寻址方式的种类 固定的指令格式 注重编译的优化
RISC的定义 90年代初,IEEE的Michael Slater对RISC定义的描述: RISC为使流水线高效率执行,应具有: 简单而统一格式的指令译码 大部分指令可以单周期执行完成 仅Load和Store指令可以访问存储器 简单的寻址方式 采用延迟转移技术 采用LOAD延迟技术 RISC为使优化编译器便于生成优化代码,应具有: 三地址指令格式、较多的寄存器、对称的指令格式
减少CPI是RISC思想的精华 程序执行时间的计算公式: P = I· CPI · T 其中: CPI (Cycles Per Instruction)是每条指令执行的平均周期数 T是一个周期的时间长度。 RISC的速度要比CISC快3倍左右,关键是RISC的CPI减小了
同类问题的程序长度,RISC比CISC长30%~40% CPI,RISC比CISC少2倍~10倍 类型 CISC 指令条数 I 指令平均周 期数CPI 周期时间 T 1 2~15 33ns~5ns RISC 1.3~1.4 1.1~1.4 10ns~2ns 同类问题的程序长度,RISC比CISC长30%~40% CPI,RISC比CISC少2倍~10倍 RISC的速度要比CISC快3倍左右,关键是RISC的CPI减小了
硬件方面: 软件方面:十分强调优化编译技术的作用 RISC设计思想也可以用于CISC中 采用硬布线控制逻辑 减少指令和寻址方式的种类 使用固定的指令格式 采用LOAD/STORE结构 指令执行过程中设置多级流水线等。 软件方面:十分强调优化编译技术的作用 RISC设计思想也可以用于CISC中
例如:Intel公司的80x86处理机的CPI在不断缩小. 8088的CPI大于20. 80286的CPI大约是5. 5 例如: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)更确切。
Simple is fast,Small is fast RISC的设计原则 Simple is fast,Small is fast 使用频度很高的指令 大大减少寻址方式 所有指令在一个机器周期完成 扩大通用寄存器个数 采用硬联控制实现 通过精简指令和优化设计编译程序,易简单有效的方式支持高级语言
CISC与RISC的主要特征对比 功 能 CISC RISC 指令系统 复杂、庞大 简单、精确 指令条数 >200 <100 功 能 CISC RISC 指令系统 复杂、庞大 简单、精确 指令条数 >200 <100 指令格式 >4 <4 寻址方式 指令字长 不固定 32bit 可访存指令 不加限制 只有LOAD/STORE 各种指令使用频率 相差太大 相差不大 各种指令执行时间 绝大多数一周期完成 优化编译系统 很难 较容易 程序源代码长度 短 长 控制逻辑实现方式 绝大多数微程序控制 绝大多数为硬连线控制
主要RISC产品 DEC公司 MIPS公司(SGI公司) IBM, Motorola ,Apple HP公司 SUN公司 Alpha 21064,21066, 21164 ,21264,21364-end MIPS公司(SGI公司) R3000,R4000,R8000,R10000,R12000, R14000,R18000 IBM, Motorola ,Apple PowerPC 601,602,603,603E,604,615,620,630,640 Power3、Power4、Power4+、Power5 HP公司 PA-RISC8000:8800,8700,8900 SUN公司 SPARC MicroSPARC, SuperSPARC,UltraSPARC I,II,III,IV,V
RISC结构采用的基本技术 遵循按RISC机器一般原则设计的技术 在逻辑上采用硬联实现和微程序固件实现相结合的技术 在CPU中设置数量较大的寄存器组,并采用重叠寄存器窗口的技术 指令的执行采用流水和延迟转移技术 采用认真设计和优化编译系统设计的技术
重叠寄存器窗口技术 目标:缩短CALL、RETURN操作时间 方法:将设置的大量的寄存器,分成多个组和全局区;每个组中分高、本地、低三个区;相邻组的高、低区重叠,加速参数与结果的传递。 结果:节省了保存现场和恢复现场等辅助时间。
延迟转移技术(Delayed Branch) 将转移指令与其前面的一条指令对换位置,让成功转移总是在紧跟的指令执行之后发生,从而使预取的指令不作废,节省一个机器周期。
举例 地 址 指 令 功 能 210 取X,Rd (X)->Rd 211 加Rd,#1,Rd (Rd)+1->Rd 212 指 令 功 能 210 取X,Rd (X)->Rd 211 加Rd,#1,Rd (Rd)+1->Rd 212 条转(条件),215 条件满足转215,否则执行213 213 加Rd,R0,Rb (Rd)->Rb 214 减Rb,Rc,Rb (Rb)-(Rc)->Rb 215 存Rd,Y (Rd)->Y 216 ……
举例 210 取X,Rd 211 加Rd,#1,Rd 条转(条件)215 212 条转(条件)216 213 加R0,R0,R0 加Rd,R0,Rb 214 减Rb,Rc,Rb 215 存Rd,Y 216 ……
采用比较转移指令 在RISC机中,把比较和转移(在CISC机中需用两条指令完成的功能)合并成一条指令。该指令将直接对两个对象(寄存器-寄存器或存储器-立即数)进行相等或不等比较,然后根据比较结果判别是否进行转移。这样就可省去一条指令,并不受条件码的约束。
优化编译技术 使用大量寄存器,优化寄存器的分配和使用,提高效率,减少访存次数。 减少局部变量和工作变量的中间传递。 优化调整指令的执行次序,减少机器的空等时间。
举例 设A,A+1,B,B+1为主存单元。 取A,Ra (A)->Ra 存Ra,B (Ra)->B 取A+1,Rb 存Rb,B+1 (Rb)->B+1
RISC技术的发展 采用RISC后的好处 RISC的不足 简化指令系统设计 提高机器的执行速度和效率 降低设计成本,提高系统可靠性 提供直接支持高级语言的能力,简化编译程序的设计 RISC的不足 指令少,加重汇编程序员的负担 浮点运算和虚拟存储器支持不足 编译程序难写
典型的RISC型机器的基本特征
代表性的RISC处理机特征
代表性的RISC处理机特征(续)
VLIW 由美国J. A. Fisher教授于1981年首先提出最初来源于水平微程序 由J. A. Fisher创建的Mutiflow公司研制了的世界上第一台VLIW处理机TRACE28/300 一条指令中包含有多个能够同时执行的操作TRACE28/300处理机的一条超长指令中最多有28条可以同时执行的指令。 算法和编译技术是关键 在下一代处理机中将普遍采用
一种显式指令级并行指令系统。 在一条VLIW指令中包含有多个相同或不同的操作字段(每个操作字段的功能相当于一般处理机中的一条指令)。 每个操作字段能够分别独立控制各自的功能部件同时工作。 二维程序结构 指令级并行度高
VLIW的主要特点 采用显式并行指令计算(EPIC:Explicitly Parallel Instruction Computing)方式。 在VLIW处理机上运行的程序是一个二维指令矩阵,每一行上的所有操作组成一条超长指令,他们之间没有数据相关、控制相关和功能部件冲突,这些指令可以在VLIW处理机上同时执行 超标量处理机和超流水线处理机通常采用隐式并行指令方式。程序是一维线性的指令序列,每条指令中一般只包含一个操作。
指令级并行度高 超标量处理机和超流水线处理机的指令级并行度一般为2左右,通常不超过4, 目前多数VLIW处理机的指令级并行度在4至8之间,有的已经达到几十。 由于在VLIW中通过并行编译器来开发程序中的指令级并行性,可以在一个循环、一个函数、甚至整个程序中寻找指令级并行性,而且,可以采用软件流水、循环展开等指令级并行度很高的方法充分开发程序中的多种并行性
硬件结构规整、简单 VLIW处理机主要由很规则的寄存器、存储器、运算部件和数据通路等组成,不规则的控制器很简单,而且,不需要复杂的指令并行调度窗口及多发射机制等。 编译器的实现难度大 VLIW并行编译器主要依靠指令级并行算法、数据相关性分析算法、寄存器分配算法及并行编译技术等来显式开发程序中的指令级并行性,从而提高处理机的运行速度。要研制指令级并行度高的编译器难度很大。
VLIW处理机 安腾(Intanium)处理机 Intel公司与HP公司联合研制在Intel公司称为IA-64处理机 安腾(Intanium)处理机有自己独立的系统软件和应用软件 DAISY (Dynamically Architected Instruction Set from Yorktown) 处理机 由IBM公司研制 采用动态二进制转换技术实现与X86处理机兼容 Crusoe处理机 由Transmeta公司研制 已经大量应用于笔记本计算机中,一个重要特点是功耗很低。 采用动态二进制转换技术把X86通用处理机的程序直接映射到Crusoe处理机的VLIW结构中执行。 嵌入式、DSP、JAVA虚拟机很多专用处理机采用VLIW体系结构
EPIC Explicitly Parallel Instruction Computing 显性并行指令计算 Intel和HP合作研发 Itanium 、Itanium 2 IA-64指令系统的统称。 集成RISC和VLIW各自的优势技术,指令字长为128位,包含三个40位的指令和一个8位的模版代码。 每个指令分为多个独立的操作字段,每个字段可分别控制各个功能部件并行工作,而模版中包含各指令间并行处理的信息,依据模版代码信息,可同时在不同的执行单元中执行三条没有相关性的指令,控制并行处理关系,提高并行处理能力
HP Integrity Superdome Itanium 2 SGI Altix 3700 Linux HP Integrity Superdome HP-UX,Win2000,Linux
IA-64面临的问题 操作系统的准备有待充分 64位的全面应用非一日之功 编译器开发困难 效益上要承担风险 面临其他硬件厂商的激烈竞争 64位的API,64位的地址空间,64位的文件系统。 Windows 2000、Linux64 64位的全面应用非一日之功 编译器开发困难 效益上要承担风险 面临其他硬件厂商的激烈竞争 AMD公司的Opteron
小结 名词解释 数据表示的含义及与数据结构的关系 定义数据表示,标识符、描述符,两者的区别 引入数据表示的原则 数据表示 RISC CISC 数据表示的含义及与数据结构的关系 定义数据表示,标识符、描述符,两者的区别 引入数据表示的原则 Huffmann编码与扩展编码 RISC的设计原则、基本技术及存在的问题