V 指令集及简单实现   分类:其他 | 上传于: 2019-12-06 19:22:23

1."计算机体系结构
周学海
xhzhou@ustc.edu.cn
0551-63606864
中国科学技术大学
" 2."03/06-review-性能
性能度量
响应时间 (response time)
吞吐率 (Throughput)
CPU 执行时间 = IC × CPI × T
CPI ( Cycles per Instruction)
MIPS = Millions of Instructions Per Second
Latency versus Bandwidth
Latency指单个任务的执行时间,Bandwidth 指单位时间完成的任务量(rate)
Latency 的提升滞后于带宽的提升 (在过去的30年)
Amdahl’s Law 用来度量加速比(speedup)
性能提升受限于任务中可加速部分所占的比例
应用于多处理器系统的基本假设:在给定的问题规模下,研究随着处理器数目的增加性能的变化
Benchmarks:指一组用于测试的程序
比较计算机系统的性能
SPEC benchmark : 针对一组应用综合性能值采用SPEC ratios 的几何平均
2019/11/1 Friday
2
" 3."03/06-review-能耗/功耗
给定负载情况下能耗越少,能效越高 4. 特别是对电池供电的移动设备。
功耗已经成为系统设计的重要约束条件之一
A chip might be limited to 120 watts (cooling power supply)
Power Consumed = Dynamic Power Static Power
晶体管开和关的切换导致的功耗为动态功耗
由于晶体管静态漏电流导致的功耗称为静态功耗
通过降低频率可节省功耗
降低电压可降低功耗和能耗
2019/11/1 Friday
3
" 5."Recap:指令集架构
软件子系统与硬件子系统的关键界面
一组直接由硬件执行的指令,包括
程序员可见的机器状态
程序员可见的指令集合(操作机器状态的指令)
应具备的特性
成本
简洁性
架构和具体实现分离:可持续多代,以保持向后(backward) 兼容
可扩展空间:可用于不同应用领域(desktops 6. servers 7. embedded applications)
易于编程/编译/链接:为高层软件的设计与开发提供方便的功能
性能:方便低层硬件子系统高效实现
IBM 360 是第一个将ISA与其实现分离的系列机
给定一个ISA,可以有不同的实现方式;例如AMD/Intel CPU 都是X86-64指令集。ARM ISA 也有不同的实现方式
2019/11/1 Friday
4
instruction set
software
hardware
" 8."用户级ISA和特权级ISA
重要的系统界面(System Interface)
ISA界面(Instruction Set Architecture)
ABI界面(Application Binary Interface)
ISA:用户级ISA 特权级ISA
用户级ISA 适用于操作系统和应用程序
特权级ISA 适用于硬件资源的管理(操作系统)
2019/11/1 Friday
5
" 9."ISA的实现
ISA 通常设计时会考虑特定的微体系结构(实现)方式。
Accumulator  hardwired 10. unpipelined (硬布线、非流水)
CISC\t microcoded (微程序)
RISC\t hardwired 11. pipelined(硬布线、流水线)
VLIW \t fixed-latency in-order parallel pipelines (固定延时、顺序执行、多条流水线并行)
JVM \t software interpretation(软件解释)
ISA 理论上可以用任何微体系结构(实现)方式
Intel Ivy Bridge: hardwired pipelined CISC (x86) machine (with some microcode support) (硬布线流水化(部分微程序支持))
Spike: Software-interpreted RISC-V machine (模拟器)
ARM Jazelle: A hardware JVM processor
2019/11/1 Friday
6
" 12."Recap:ISA 的演进
2019/11/1 Friday
7
" 13."Recap:ISA必须说明哪些东西?
指令格式或编码方式。即如何编码?
操作数和操作结果的存放位置
存放位置?
多少个显式操作数?
存储器操作数如何定位?
哪些操作数可以或不可以放到存储器中?
寻址方式
数据类型和大小
支持哪些操作
下一条指令地址
jumps 14. conditions 15. branches
fetch-decode-execute is implicit!
2019/11/1 Friday
8
Instruction
Fetch
Instruction
Decode
Operand
Fetch
Execute
Result
Store
Next
Instruction
" 16."Recap: 有关ISA的若干问题
存储器寻址
操作数的类型与大小
所支持的操作
控制转移类指令
指令格式
2019/11/1 Friday
9
" 17."Recap: 存储器寻址
80年以来几乎所有机器的存储器都是按字节编址
一个存储器地址可以访问:
一个字节、2个字节、4个字节、更多字节…..
不同体系结构对字的定义是不同的
16位字(Intel X86)32位字(MIPS)
如何读32位字,两种方案
每次一个字节,四次完成;每次一个字,一次完成
问题:
(1)如何将字节地址映射到字地址 (尾端问题)
(2)一个字是否可以存放在任何字节边界上(对齐问题)
2019/11/1 Friday
10
" 18."Recap: 尾端问题
little endian 19. big endian 20. 在一个字内部的字节顺序问题
如地址xxx00指定了一个字(int) 21. 存储器中从xxx00处连续存放ffff0000 22. 则有两种方式:
Little endian 方式下xxx00位置是字的最低字节,整数值为0000ffff 23. Intel 80x86 24. DEC Vax 25. DEC Alpha (Windows NT)
Big endian 方式下xxx00位置是字的最高字节,整数值为ffff0000 26. IBM 360/370 27. Motorola 68k 28. MIPS 29. Sparc 30. HP PA
2019/11/1 Friday
11
" 31."Recap: 对齐问题
对s字节的对象访问地址为A,如果A mod s =0 称为边界对齐。
边界对齐的原因是存储器本身读写的要求,存储器本身读写通常就是边界对齐的,对于不是边界对齐的对象的访问可能要导致存储器的两次访问,然后再拼接出所需要的数。(或发生异常)
2019/11/1 Friday
12
" 32."Recap: 寻址方式
寻址方式:如何说明要访问的对象地址
有效地址:由寻址方式说明的某一存储单元的实际存储器地址。有效地址 vs. 物理地址
2019/11/1 Friday
13
" 33."各种寻址方式的使用情况? (忽略寄存器直接寻址)
2019/11/1 Friday
14
三个SPEC89程序在VAX结构上的测试结果: 立即寻址,偏移寻址使用较多
" 34."偏移寻址
主要问题:偏移的范围(偏移量的大小)
2019/11/1 Friday
15
Alpha Architecture with full optimization for Spec CPU2000 35. showing the average of integer programs(CINT2000) and the average of floating-point programs (CFP2000)
" 36."立即数寻址
2019/11/1 Friday
16
Alpha Architecture with full optimization for Spec CPU2000 37. showing the average of integer programs(CINT2000) and the average of floating-point programs (CFP2000)
" 38."立即数的大小
2019/11/1 Friday
17
The distribution of immediate values. About 20% were negative for CINT2000 and about 30% were negative for CFP2000. These measurements were taken on a Alpha 39. where the maximum immediate is 16 bits 40. for the spec cpu2000 programs. A similar measurement on the VAX 41. which supported 32-bit immediates 42. showed that about 20% to 25% of immediates were longer than 16 bits.
" 43."寻址方式小结
重要的寻址方式:
偏移寻址方式 44. 立即数寻址方式 45. 寄存器间址方式
SPEC测试表明,使用频度达到 75%--99%
偏移字段的大小应该在 12 - 16 bits
可满足75%-99%的需求
立即数字段的大小应该在 8 -16 bits
可满足50%-80%的需求
2019/11/1 Friday
18
" 46."操作数的类型、表示和大小
操作数类型和操作数表示是软硬件的主要界面之一。
操作数类型:是面向应用、面向软件系统所处理的各种数据类型。
整型、浮点型、字符、字符串、向量类型等
类型由操作码确定或数据附加硬件解释的标记,一般采用由操作码确定
数据附加硬件解释的标记,现在已经不采用
操作数的表示:操作数在机器中的表示,硬件结构能够识别,指令系统可以直接使用的表示格式
整型:原码、反码、补码
浮点:IEEE 754标准
十进制:BCD码/二进制十进制表示
2019/11/1 Friday
19
" 47."常用操作数类型
ASCII character = 1 byte (64-bit register can store 8 characters
Unicode character or Short integer = 2 bytes = 16 bits (half word)
Integer = 4 bytes = 32 bits (word size on many RISC Processors)
Single-precision float = 4 bytes = 32 bits (word size)
Long integer = 8 bytes = 64 bits (double word)
Double-precision float = 8 bytes = 64 bits (double word)
Extended-precision float = 10 bytes = 80 bits (Intel architecture)
Quad-precision float = 16 bytes = 128 bits
2019/11/1 Friday
20
" 48."操作数的大小
2019/11/1 Friday
21
基准测试的结论:(1)对单字、双字的数据访问具有较高的频率
(2)支持64位双字操作,更具有一般性
" 49."小结:指令集架构
ISA需考虑的问题
Class of ISA
Memory addressing
Types and sizes of operands
Operations
Control flow instructions
Encoding an ISA
……
ISA的类型
通用寄存器型占主导地位
寻址方式
重要的寻址方式: 偏移寻址方式 50. 立即数寻址方式 51. 寄存器间址方式
SPEC测试表明,使用频度达到 75%--99%
偏移字段的大小应该在 12 - 16 bits 52. 可满足75%-99%的需求
立即数字段的大小应该在 8 -16 bits 53. 可满足50%-80%的需求
操作数的类型和大小
对单字、双字的数据访问具有较高的频率
支持64位双字操作,更具有一般性
2019/11/1 Friday
22
" 54."MIPS
MIPS是最典型的RISC 指令集架构
Stanford, 1980年提出,主要受到IBM801 小型机的影响
第一个商业实现是R2000(1986)
最初的设计中,其整数指令集仅有58条指令,直接实现单发射、顺序流水线
30年来,逐步增加到约400条指令。
主要特征:
Load/Store型结构,专门的指令完成存储器与寄存器之间的传送
ALU类指令的操作数来源于寄存器或立即数(指令中的特定区域)
降低了指令集和硬件的复杂性,依赖于优化编译技术,方便了简单流水线的实现
2019/11/1 Friday
23
" 55."主要缺陷:
针对特定的微体系架构的实现方式(5级流水、单发射、顺序流水线)进行过度的优化设计
延迟转移问题导致超标量等复杂流水线的实现难度,当无法有效填充延迟槽时会导致代码尺寸变大
MIPS-I中暴露出其他流水线冲突(load、乘除引起的冲突)采用简单的Interlocking 简单又高效,但为了保持兼容性,仍然保留了延迟转移
ISA对位置无关的代码(position-independent code 56. PIC)支持不足。
直接跳转没有提供PC相对寻址,需要通过间接跳转方式实现PIC,增加了代码尺寸,降低了性能
2014年MIPS的修订,改进了PC-相对寻址(针对数据),但仍然要多条指令才能完成
16位位宽立即数消耗了大量编码空间,只有少量的编码空间可供扩展指令
2014修订版,保存有1/64的编码空间供扩展
架构师如果想采用压缩指令编码来降低代码空间,就不得不采用新的指令编码
乘除指令使用了特殊的寄存器(HI 57.LO),导致上下文切换内容、指令条数、代码尺寸增加,微架构实现复杂
2019/11/1 Friday
24
" 58."ISA假设浮点操作部件是一个独立的协处理器,使得单芯片实现无法最优
例如,整型数与浮点数的转换结果写到浮点数寄存器,使用结果时,需要额外的mov指令,更糟糕的是浮点数寄存器文件与整型数寄存器文件之间的传输,需要有显式的延迟槽
在标准的ABI中,保留两个整型寄存器用于内核程序,减少了用户程序可用的寄存器数
使用特殊指令处理未对齐的load和store会消耗大量的操作码空间,并使除了最简单的实现之外的其他实现复杂化。
时钟速率/CPI 的权衡使得架构师省略了整数大小比较和分支指令。随着分支预测和静态CMOS逻辑的出现,这种权衡在今天已经不太合适了。
除了技术方面,MIPS是非开放的专属指令集,不能自由使用
2019/11/1 Friday
25
" 59."SPARC
Sun Microsystems的专属指令集
可追溯到Berkeley RISC-I和RISC-II项目 ; 最近的32位版本的ISA SPARC V8
SPARC V8 主要特征
用户级 整型ISA 90条指令; 硬件支持IEEE 754-1985标准的浮点数(50条) ;特权级指令 20条
主要问题
SPARC使用了寄存器窗口来加速函数调用
当函数调用所需的栈空间超过了窗口的寄存器数,性能会急剧下降。对于所有的实现来说,寄存器窗口都消耗很大的面积和功耗
分支使用条件码
这些条件码由于在一些指令之间创建了额外的依赖关系,增加了体系结构状态并使实现复杂化
load和store相邻寄存器对的指令
对于简单的微体系结构很有吸引力,可以在很少增加硬件复杂性的情况下提高吞吐量。
遗憾的是当使用寄存器重命名使实现复杂化,因为在寄存器文件中数据在物理上可能不再相邻
浮点寄存器文件和整数寄存器文件之间的移动必须使用内存系统作为中介,限制了系统性能
2019/11/1 Friday
26
" 60."SPARC
ISA通过体系结构公开的延迟陷阱队列支持非精确浮点异常,该队列向系统监控程序提供信息,以恢复此类异常上的处理器状态
唯一的原子内存操作是fetch-and-store,这对于实现许多无等待的数据结构是不够的
SPARC与其他80年代RISC结构的许多有缺陷的特性
ISA设计面向单发射、顺序、五级流水线的微体系架构;
SPARC具有分支延迟插槽和许多显式的数据和控制冲突,这些冲突使代码生成复杂化,无助于更积极的实现;
缺乏位置无关的寻址方式(相对寻址)
由于SPARC缺乏足够的自由编码空间,因此不能方便地对其进行改进以支持压缩ISA扩展
2019/11/1 Friday
27
" 61."Alpha (DEC)
DEC公司的架构师在20世纪90年代初定义了他们的RISC ISA 62. Alpha
摒弃了当时非常吸引人的特性,如分支延迟、条件码、寄存器窗口等
创建了64位寻址空间、设计简洁、实现简单、高性能的ISA
Alpha架构师仔细地将特权体系结构和硬件平台的大部分细节隔离在抽象接口(特权体系结构库)后面(PALcode)
主要问题:尽管如此,DEC对顺序微架构的Alpha进行了过度优化,并添加了一些不太适合现代实现的特性
为了追求高时钟频率,ISA的原始版本避免了8位和16位的加载和存储,实际上创建了一个字寻址的内存系统。为了在广泛使用这些操作的应用程序上性能,添加了特殊的未对齐的加载和存储指令以及一些整数指令,以加速重新组合过程。
为了方便长延迟浮点指令的乱序完成,Alpha 有一个非精确的浮点陷阱模型。这个决定可能是可以单独接受的,但是ISA还定义了异常标记和默认值(如果需要的话)必须由软件例程提供。
Alpha缺少整数除法指令,建议使用软件牛顿迭代法实现,导致浮点除法速度高于整数除法
2019/11/1 Friday
28
" 63."与它的前辈RISC一样,没有预先考虑可能的压缩指令集扩展,因此没有足够的操作码空间来进行更新
ISA包含有条件的移动,这使得微架构与寄存器重命名复杂化
如果移动条件不满足,指令仍然必须将旧值复制到新的物理目标寄存器中。这实际上使条件移动成为ISA中惟一读取三个源操作数的指令。
实际上,DEC的第一个乱序执行的实现使用了一些技巧来避免该指令的额外数据路径。 Alpha 21264通过将条件移动指令分解为两个微操作来执行,第一个微操作评估移动条件,第二个微操作执行移动。这种方法还要求物理寄存器文件加宽一位以保存中间结果
使用商业Alpha ISAs的一个重要风险:它们可能会被摒弃。康柏在上世纪90年代末收购了摇摇欲坠的DEC后不久,他们选择逐步淘汰Alpha,转而采用英特尔的安腾架构。康柏将Alpha的知识产权出售给了英特尔,此后不久,惠普收购了康柏,并在2004年完成了Alpha的最终实现
2019/11/1 Friday
29
" 64."ARMv7
32位 RISC ISA
目前世界上使用最广的体系结构。当我们权衡是否要设计自己的指令集时,ARMv7是一个自然的选择,大量的软件已经被移植到该ISA上,而且它在嵌入式和移动设备中无处不在。
是一个封闭的标准,剪裁或扩充是不允许的,即使是微架构的创新也仅限于那些能够获得ARM所称的架构许可的人
ARMv7十分庞大复杂。整型类指令600 条
即使知识产权不是问题,它仍然存在一些技术缺陷
不支持64位地址, ISA缺乏硬件支持IEEE754-2008标准( ARMv8 纠正了这些缺陷)
特权体系结构的细节渗透到用户级体系结构的定义中
2019/11/1 Friday
30
" 65."ARMv7附带一个压缩ISA,具有固定宽度的16位指令,称为Thumb。
Thumb虽然提供了有竞争力的代码尺寸,但性能较差
Thumb-2 虽然提供了较高的性能,但32位的Thumb-2编码方式与基本的ISA编码方式不同 66.16位的Thumb-2的编码方式与基本的16位编码方式也不同。导致译码器需要理解三种编码格式,使得能耗、延迟以及设计成本增加
ISA中包含了许多实现复杂的特性。
程序计数器是可寻址寄存器之一,这意味着几乎任何指令都可以改变控制流。
更糟糕的是,程序计数器的最低有效位反映ISA当前正在执行(ARM或Thumb)哪个ISA——简单的ADD指令可以更改ISA当前在处理器上执行的指令!
分支使用条件码以及谓词指令进一步使高性能实现复杂化。
2019/11/1 Friday
31
" 67."ARMv8
2011年,ARM发布新的ISA ARMv8 
64位地址; 扩展了整型寄存器组。
摒弃了ARMv7中实现复杂的一些特性
PC不再是整形寄存器组的成员;
不再有谓词指令
删除了load-multiple和store-multiple 指令
指令编码归一化
主要问题
使用条件码
存在许多特殊的寄存器
2019/11/1 Friday
32
" 68."增加了一些缺陷,包括大量的subword-SIMD架构
指令集更加厚重:1070条指令,53种格式,8种寻址方式。说明文档达到了5778页
与其他大多数ISA一样,通常以暴露底层实现的方式将用户和特权架构紧密地结合在一起
此外,随着ARMv8的引入,ARM不再支持压缩指令编码
最后,和它的以前版本一样,ARMv8也是一个封闭的标准
2019/11/1 Friday
33
" 69."OpenRISC
OpenRISC项目是一个开放源码处理器设计项目
来源于Hennessy和Patterson的体系结构教科书。
适用于教学、科研和工业界的实现。
主要问题
OpenRISC项目主要是开源处理器设计项目,而不是开源的ISA 规格说明,ISA和实现是紧密耦合的
固定的32位编码与16位立即数阻碍了压缩ISA扩展
硬件不支持IEEE 754-2008标准
用于分支和条件转移的条件码使高性能实现复杂化
ISA对位置无关的寻址方式支持较弱
OpenRISC不利于虚拟化。从异常返回的指令L.RFE,定义为在用户模式下功能,而不是捕获
值得一提的是:2010年这两个问题都得到了解决:延迟插槽已经成为可选的,64位版本已经定义(但是,据我们所知,从未实现过)。最终,我们(UCB)认为最好从头开始,而不是相应地修改OpenRISC。
2019/11/1 Friday
34
" 70."在过去的四十年里,英特尔的8086架构已经成为笔记本电脑、台式机和服务器市场上最流行的指令集。
在嵌入式系统领域之外,几乎所有流行的软件都被移植到x86上,或者是为x86开发的
它受欢迎的原因有很多:该架构在IBM PC诞生之初的偶然可用性; 英特尔专注于二进制兼容性; 它们积极的卓有成效的微结构实现; 以及他们的前沿制造技术
指令集设计质量并不是它流行的原因之一。
主要问题:
1300条指令,许多寻址方式,很多特殊寄存器,多种地址翻译方式,从AMD K5微架构开始,所有的Intel支持乱序执行的微结构,都是动态地将x86指令翻译为内部的RISC-风格的指令集。
ISA不利于虚拟化,因为一些特权指令在用户模式下会无声地失败,而不是被捕获。VMware的工程师们用复杂的动态二进制翻译软件解决了这一缺陷
ISA的指令长度为任意整数字节数,最多为15个字节,但是数量较少的短操作码已经被随意使用
80x86
2019/11/1 Friday
35
" 71."ISA有数量极少的寄存器组
大多数整数寄存器在ISA中执行特殊功能,这加剧了体系结构寄存器的不足
更糟糕的是,大多数x86指令只有一种破坏性的指令格式,它会覆盖其中一个源操作数
一些ISA特性,包括隐式条件代码和带有谓词的移动操作,在微架构中实现复杂
这些ISA决策对静态代码大小有深刻的影响。尽管存在所有这些缺陷,x86通常比RISC体系结构使用更少的动态指令完成相同的功能,因为x86指令可以编码多个基本操作。
最后,80x86是一个专有指令集
2019/11/1 Friday
36
" 72."ISA Summary
2019/11/1 Friday
37
" 73."03/11:指令集架构
ISA需考虑的问题
Class of ISA
Memory addressing
Types and sizes of operands
Operations
Control flow instructions
Encoding an ISA
……
ISA的类型
通用寄存器型占主导地位
寻址方式
重要的寻址方式: 偏移寻址方式 74. 立即数寻址方式 75. 寄存器间址方式
SPEC测试表明,使用频度达到 75%--99%
偏移字段的大小应该在 12 - 16 bits 76. 可满足75%-99%的需求
立即数字段的大小应该在 8 -16 bits 77. 可满足50%-80%的需求
操作数的类型和大小
对单字、双字的数据访问具有较高的频率
支持64位双字操作,更具有一般性
2019/11/1 Friday
38
" 78."ISA的操作
CISC 指令集结构的功能设计
RISC 指令结构的功能设计
2019/11/1 Friday
39
" 79."典型操作类型
一般计算机都支持前三类所有的操作;
不同计算机系统 对系统支持程度不同,但都支持基本的系统功能。
对最后四类操作的支持程度差别也很大,有些机器不支持,有些机器还在此基础上做一些扩展,这些指令有时作为可选的指令。
2019/11/1 Friday
40
" 80."Top 10 80x86 Instructions
2019/11/1 Friday
41
" 81."ISA对操作类型的选择
需考虑的因素:速度、价格和灵活性
基本要求:指令系统的完整性、规整性、高效率和兼容性
完整性设计:具备基本指令种类
兼容性:系列机
高效率:指令执行速度快、使用频度高
规整性
让所有运算部件都能对称、均匀的在所有数据存储单元之间进行操作。
对所有数据存储单元都能同等对待,无论是操作数或运算结果都可以无约束地存放到任意数据存储单元中
正交性
数据类型独立于寻址方式
寻址方式独立于所要完成的操作
当前对这一问题的处理有两种截然不同的方向
CISC和RISC
2019/11/1 Friday
42
" 82."CISC计算机ISA的功能设计
目标:强化指令功能,减少指令条数,以提高系统性能
基本优化方法
1. 面向目标程序的优化是提高计算机系统性能最直接方法
优化目标
缩短程序的长度
缩短程序的执行时间
优化方法
统计分析目标程序执行情况,找出使用频度高,执行时间长的指令或指令串
优化使用频度高的指令
用新的指令代替使用频度高的指令串
2019/11/1 Friday
43
" 83."优化目标程序的主要途径(1/2)
1)增强运算型指令的功能
如sin(x) 84. cos(x) 85. SQRT(X),甚至多项式计算
如用一条三地址指令完成
P(X) = C(0) C(1)X C(2)X2 C(3)X3 …..
2) 增强数据传送类指令的功能
主要是指数据块传送指令
R-R 86. R-M 87. M-M之间的数据块传送可有效的支持向量和矩阵运算,如IBM370
R-Stack之间设置数据块传送指令,能够在程序调用和程序中断时,快速保存和恢复程序现场,如 VAX-11
2019/11/1 Friday
44
" 88."优化目标程序的主要途径(2/2)
3) 增强程序控制指令的功能
在CISC中,一般均设置了多种程序控制指令,正常仅需要转移指令和子程序控制指令
2. 面向高级语言和编译程序改进指令系统
优化目标:主要是缩小HL-ML之间的差距
优化方法:
1)增强面向HL和Compiler支持的指令功能
统计分析源程序中各种语句的使用频度和执行时间
增强相关指令的功能,优化使用频度高、执行时间长的语句
增加专门指令,以缩短目标程序长度,减少目标程序执行时间,缩短编译时间
2019/11/1 Friday
45
" 89."FORTRAN语言和COBOL语言中各种主要语句的使用频度
观察结果:
(1)一元赋值在其中比例最大,增强数据传送类指令功能,缩短这类指令的执行时间是对高级语言非常有力的支持,
(2)其他赋值语句中,增1操作比例较大,许多机器都有专门的增1指令
(3)条件转移和无条件转移占22%,38.2% 90.因此增强转移指令的功能,增加转移指令的种类是必要的
2019/11/1 Friday
46
" 91."2)高级语言计算机系统
缩小HL和ML的差别时,走到极端,就是把HL和ML合二为一,即所谓的高级语言计算机。在这种机器中,高级语言不需要经过编译,直接由机器硬件来执行。如LISP机,PROLOG机
3)支持操作系统的优化实现-些特权指令
任何一种计算机系统通常需要操作系统,而OS又必须用指令系统来实现,指令系统对OS的支持主要有
处理器工作状态和访问方式的转换
进程的管理和切换
存储管理和信息保护
进程同步和互斥,信号量的管理等
2019/11/1 Friday
47
" 92."-Review (续)
ISA的功能设计
任务:确定硬件支持哪些操作
方法:统计的方法
两种类型:CISC和RISC
CISC(Complex Instruction Set Computer)
目标:强化指令功能,减少运行的指令条数,提高系统性能
方法:面向目标程序的优化,面向高级语言和编译器的优化
RISC(Reduced Instruction Set Computer)
目标:通过简化指令系统,用高效的方法实现最常用的指令
方法:充分发挥流水线的效率,降低(优化)CPI
2019/11/1 Friday
48
" 93."RISC指令集结构的功能设计
采用RISC体系结构的微处理器
SUN Microsystem: SPARC 94. SuperSPARC 95. Ulta SPARC
SGI: MIPS R4000 96. R5000 97. R10000 98.
IBM: Power PC
Intel: 80860 99. 80960
DEC: Alpha
Motorola 88100
HP HP300/930系列,950系列
ARM,MIPS
RISC-V
2019/11/1 Friday
49
" 100."RISC的定义和特点
RISC是一种计算机体系结构的设计思想,它不是一种产品。RISC是近代计算机体系结构发展史中的一个里程碑,直到现在,RISC没有一个确切的定义
早期对RISC特点的描述
大多数指令在单周期内完成
采用Load/Store结构
硬布线控制逻辑
减少指令和寻址方式的种类
固定的指令格式
注重代码的优化
从目前的发展看,RISC体系结构还应具有如下特点:
面向寄存器结构
十分重视流水线的执行效率-尽量减少断流
重视优化编译技术
减少指令平均执行周期数是RISC思想的精华
2019/11/1 Friday
50
" 101."问题
RISC的指令系统精简了,CISC中的一条指令可能由一串指令才能完成,那么为什么RISC执行程序的速度比CISC还要快?
ExecuteTime = CPI X IC X T
IC CPI T
CISC 1 2~15 33ns~5ns
RISC 1.3~1.4 1.1~1.4 10ns~2ns
IC : 实际统计结果,RISC的IC只比CISC 长30%~40%
CPI: CISC CPI一般在4~6之间,RISC 一般CPI =1 102.
Load/Store 为2
T: RISC采用硬布线逻辑,指令要完成的功能比较简单
2019/11/1 Friday
51
" 103."RISC为什么会减少CPI
硬件方面:
硬布线控制逻辑
减少指令和寻址方式的种类
使用固定格式
采用Load/Store
指令执行过程中设置多级流水线。
软件方面:十分强调优化编译的作用
2019/11/1 Friday
52
" 104."控制类指令
四种类型的控制流改变:
条件分支( Conditional branch) 、跳转(Jump)、过程调用(Procedure calls)、过程返回(Procedure returns)
2019/11/1 Friday
53
Alpha Architecture with full optimization for Spec CPU2000 105. showing the average of integer programs(CINT2000) and the average of floating-point programs (CFP2000)
" 106."控制流类指令中的寻址方式
PC-relative 方式 (相对寻址)
例如:条件转移
说明动态的转移地址方式(通过寄存器间接跳转):
编译时不知道目标地址,程序执行时动态确定
Case or switch statements
Virtual function or methods
High-order functions or function pointers
Dynamically shared libraries
转移地址放到某一寄存器中,通过寄存器间接跳转
2019/11/1 Friday
54
" 107."转移目标地址与当前指令的距离
2019/11/1 Friday
55
Alpha Architecture with full optimization for Spec CPU2000 108. showing the average of integer programs(CINT2000) and the average of floating-point programs (CFP2000)
建议:PC-relative 寻址,偏移地址至少8位
" 109."分支比较类型比较
2019/11/1 Friday
56
Alpha Architecture with full optimization for Spec CPU2000 110. showing the average of integer programs(CINT2000) and the average of floating-point programs (CFP2000)
" 111."指令编码
2019/11/1 Friday
57
Variable:
Fixed:
Hybrid:


" 112."指令格式选择策略
如果代码规模最重要,那么使用变长指令格式
如果性能至关重要,使用固定长度指令
有些嵌入式CPU附加可选模式,由每一应用自己选择性能还是代码量
窄指令支持更少的操作、更短的地址和立即数字段、更少的寄存器以及双地址格式,而不是传统的RISC计算机的三地址格式
例如:RISC-V 的 RV32IC, C表示压缩表示
ARM Thumb , microMIPS
有些机器使用边执行边解压的方式
例如 IBM 的CodePack PowerPC
2019/11/1 Friday
58
" 113."MIPS 寻址方式/指令格式
2019/11/1 Friday
59
所有指令都是32位宽
op
rs
rt
rd
immed
register
Register (direct)
op
rs
rt
register
Base index

Memory
immed
op
rs
rt
Immediate
immed
op
rs
rt
PC
PC-relative

Memory
Register Indirect?
" 114."小结
ISA的功能设计:任务为确定硬件支持哪些操作。方法是统计的方法。存在CISC和RISC两种类型
CISC(Complex Instruction Set Computer)
目标:强化指令功能,减少指令的指令条数,以提高系统性能
基本方法:面向目标程序的优化,面向高级语言和编译器的优化
RISC(Reduced Instruction Set Computer)
目标:通过简化指令系统,用最高效的方法实现最常用的指令
主要手段:充分发挥流水线的效率,降低(优化)CPI
控制转移类指令
指令编码(指令格式)
2019/11/1 Friday
60
" 115."ISA的演进
2019/11/1 Friday
61
" 116."Recap: MIPS指令集结构
MIPS64的一个子集,简称为MIPS
MIPS的寄存器
32个64位通用寄存器(GPRs)
R0,R1,…,R31
也被称为整数寄存器
R0的值永远是0
32个64位浮点数寄存器(FPRs)
F0,F1,…,F31
用来存放32个单精度浮点数(32位),也可以用来存放32个双精度浮点数(64位)。
存储单精度浮点数(32位)时,只用到FPR的一半,其另一半没用
一些特殊寄存器
它们可以与通用寄存器交换数据。
例如,浮点状态寄存器用来保存有关浮点操作结果的信息。
2019/11/1 Friday
62
" 117."Recap:MIPS的数据表示
整数
字节(8位) 半字(16位)字(32位) 双字(64位)
浮点数
单精度浮点数(32位) 双精度浮点数(64位)
字节、半字或者字在装入64位寄存器时,用零扩展或者用符号位扩展来填充该寄存器的剩余部分。装入以后,对它们将按照64位整数的方式进行运算。
2019/11/1 Friday
63
" 118."Recap:MIPS的寻址方式
立即数寻址与偏移量寻址
立即数字段和偏移量字段都是16位的。
寄存器间接寻址是通过把0作为偏移量来实现的
16位绝对寻址是通过把R0(其值永远为0)作为基址寄存器来完成的
MIPS的存储器是按字节寻址的,地址为64位
所有存储器访问都必须是边界对齐的
2019/11/1 Friday
64
" 119."Recap:存储器中的数据存放(存储字长为 32 位)
2019/11/1 Friday
65
地址(十进制)
0
4
8
12
16
20
24
28
32
36
双字
双字(地址32)
双字
双字(地址24)
半字(地址20)
半字(地址22)
半字(地址16)
半字(地址18)
字节(地址 8)
字节(地址 9)
字节(地址10)
字节(地址11)
字(地址 4)
字(地址 0)
字节(地址14)
字节(地址15)
字节(地址13)
字节(地址12)
边界对准
地址(十进制)
0
4
8
字节( 地址7)
字节( 地址6)
字( 地址2)
半字( 地址10)
半字( 地址8)
半字( 地址0)
字( 地址4)
边界未对准






" 120."Recap:MIPS的指令格式
寻址方式编码到操作码中
所有的指令都是32位的
操作码占6位
3种指令格式
I类
R类
J类
2019/11/1 Friday
66
" 121."Recap:I类指令
包括所有的load和store指令、立即数指令,分支指令、寄存器跳转指令、寄存器链接跳转指令。
立即数字段为16位,用于提供立即数或偏移量。
2019/11/1 Friday
67
" 122."Recap:具体的I类指令
load指令
访存有效地址:Regs[rs

查看更多