RISC处理器设计
RISC系统结构
基本思想:简单结构的高效实现
体:指令系统结构
操作:简单
数据:Load-Store结构,寻址方式简单
编码:定长
相:实现与使用方式
简化硬件,提高主频
指令流水线技术:寄存器操作容易解决相关
编译技术
用:性能及兼容性
性能:每条指令周期数差不多,主频高,CPI高
流水及多发射技术在提高性能的前提下不影响兼
容性
指令系统结构
指令系统的设计原则
指令系统在计算机中的位置
硬件和软件的界面
设计要求
兼容性:在很长时间内保持不变
通用性:适合于各种应用
方便:编译器或程序员觉得好用,有较多功
能
高效:便于CPU设计的优化,不同的实现方
法得到不同的性能
指令系统与系统结构
50-60年代
Computer Architecture=Computer
Arithmetic
70-80年代
Computer Architecture=Instruction Set
Design
90年代以后
Computer Architecture=Design of CPU,
Memory System, I/O System,
Multiprocessors
Searching the space of possible designs at
all levels of computer systems
影响指令系统设计的因素
工艺技术
早期的硬件昂贵,简化硬件是指令系统设计的
主要因素
如何发挥存储层次的效率,如何利用芯片面积
系统结构
增加指令功能还是提高主频?
并行性:SIMD、向量、多发射(兼容性好)、
PIM
操作系统
多进程支持、虚地址空间等
编译技术与程序设计语言
指令的表达能力
应用程序
兼容性
工艺技术的发展(1)
工艺技术是处理器技术发展的源动力
集成度及CPU主频提高快,访存延迟提高慢
1990年: 33MHz Intel 386, 80ns访存延迟
1996年:266MHz Intel PII, 60ns访存延迟
上述趋势影响系统结构研究的内容
并行技术:流水线、多处理器、磁盘阵列
存储层次
网络
工艺技术的发展(2)
Moore定律
Intel的创始人之一Gordon Moore在1971年
预言每18个月芯片集成度增加一倍。
30年来这个预言基本正确,普遍认为这个定
律可以适用到2010年
2002年达到每个芯片100,000,000个晶体管
2910年达到每个芯片1,000,000,000个晶体
管
这么多晶体管用来做什么?=>系统结构的
研究
工艺技术的发展(3)
Moore定律:处理器集成度提高
工艺技术的发展(4)
Moore定律:存储器集成度的提高
工艺技术对指令系统的影响
早期的指令系统设计主要考虑如何减少
硬件
随着集成度的提高,如何有效利用芯片
面积成为系统结构重要研究内容,一些
新的并行结构如PIM、SIMD等必然影响
指令系统
多发射技术的兼容性好
由于CPU与存储器的速度差距,指令系统
的设计应能较好地利用存储层次,如通
过并行或流水容忍延迟。
微处理器技术的发展(1)
通常微处理器指单片上的处理器
1971年Intel设计出第一个商品化微处理器。
70年代以来,微处理器的性能提高速度远大
于大型机或小型机。
目前几乎所有的计算机系统都基于微处理器
微处理器性能的提高不仅得益于微电子技术,
更加得益于系统结构技术(近年来尤其如此)
。
主频每3年增加一倍,微处理器速度每18个
月增加一倍(约每年增加50%)。性能价格
比每年增加70%。
微处理器技术的发展(2)
微处理器与其它计算机的性能提高速度
微处理器技术的发展(3)
微处理器性能提高越来越快
系统结构对指令系统的影响
指令系统本身是系统结构设计的一部分
不改变指令系统的前提下提高性能,如
流水、多发射等
指令系统的兼容性与系统结构发展的矛
盾关系
Intel的做法
编译技术对指令系统的影响
指令是编译器的工作结果
早期的指令系统主要考虑如何便于编程
编译器的影响
寄存器分配
堆栈用于存放局部变量,全局数据区用于存放静
态数据,堆用于存放动态数据。
寄存器分配要考虑一致性问题,可以被aliased的
数据不能分配在寄存器中(C中的volatile)。
为使编译器有效使用graph coloring启发式算法,
至少需要16个通用寄存器。
规整:所有访存指令都可用所有寻址方式
简单:简化trade-offs,允许编译时确定常
量,只提供基本的通用操作。
设计指令系统考虑的因素
操作
操作种类
操作数
堆栈型、累加器型、寄存器型
操作数个数和类型
访存操作数的寻址方式:寄存器、立即数、
直接、间接...
指令编码
定长、变长
指令系统的类型(1)
根据指令使用数据的方式,指令系统分为以下
几类
堆栈型(Stack):操作数在栈顶,运算操作不用指
定操作数
累加器型(Accumulator):一个操作数总在累加器
中,结果也写回累加器
寄存器型(Register),每个操作数都由指令指定
Register-Register型,又称为Load-Store型,所有运算
操作的操作数都在寄存器中
Register-Memory型,
Memory-Memory型,
上述三种指令系统类型也可以分别称为0地址
指令,单地址指令,以及多地址指令
指令系统的类型(2)
例子:不同指令系统完成C=A+B的指令
序列,假设A、B、C在内存中不同的单元
指令系统的类型(3)
早期的计算机多用堆栈和累加器型指令
出于降低硬件复杂度的考虑
现在已经不用(Intel有点例外)
80年代后的机器主要是寄存器型
访问寄存器比访问存储器快
便于编译器使用和优化
寄存器可以用来存放变量,减少访存次数
寄存器指令再分类
分类标准
运算操作中操作数的个数
运算操作中存储器操作数的个数
存储访问的表示
两个方面
如何表示地址:寻址方式
给定一个地址,访问目标及其长度
访存对象
存储器按字节编址:所有地址都是字节地
址
访问长度:字节、半字、字、双字
地址对齐简化硬件设计:如字地址最低两
位为0
Big Endian和Little Endian:影响不同机器
间的数据兼容性。
Little Endian地址指向一个字的最右字节,Big
Endian 反之
寻址方式(1)
如何在指令中表示访存地址
寻址方式(2)
至少支持Register, Immediate,
Displacement, 和Register indirect四种寻
址方式
地址偏移量位数12-16位
立即数位数8-16位
指令操作
Rule of Thumb:最常用的指令是简单指
令
SPECint92的X86指令统计
把这些简单指令做得快一点,其它慢一点没
关系
转移指令特点
条件转移最多
偏移量至少要8位
转移条件简单:与0比较的最多
指令编码
需要考虑的因素
操作码部分比较简单
操作数的个数、类型对指令长度影响很大
变长指令程序代码短、定长指令实现简单
编码方法
定长:RISC
变长:VAX的指令1-53字节,其中ADD指令3-
19字节
混合
从上述分析可以看出
简单操作和简单寻址方式用得最多
10简单操作指令占96%
寄存器, 立即数, 偏移寻址, 寄存器间接寻址四
种寻址方式
简单指令便于高效实现和使用
load-store结构简化硬件设计,提高主频
定长简化译码
符合编译器“常用的做得快,少用的只要对”的
原则
硬件优化应充分考虑兼容性
流水、多发射不改变指令系统
流水、多发射技术在load-store指令系统上容易
实现,否则相关性分析困难
上述原因呼唤RISC系统结构
一个“典型”的RISC
32位定长指令
32个32位通用寄存器
三寄存器操作数运算指令
Load-Store指令,基址+偏移量寻址方式
简单转移条件
Delay-Branch
MIPS指令格式
OP(6) RS1(5) RS2(5) RD(5) SA(5) OPX(6)R-type
OP(6) RS(5) RD(5) ImmediateI-type
OP(6) targetJ-type
RISC发展过程(1)
1964年CDC公司推出的CDC 6600是第一
台超级计算机,具备了RISC的一些基本
特征
CDC 6600的设计者认识到为了实现有效的
流水技术,需要简化体系结构
Load-Store结构
记分板(Score-Boarding)动态流水线调度
乱序执行(Out-of-Order)技术
1976年的Cray-1向量机使用了与CDC
6600类似的想法
Cray是CDC 6600的主要设计者之一
上述简化结构以高效实现的想法在60-70
年代没有受到小型机和微处理器设计者
的重视
RISC发展过程(2)
1968年John Cocke在IBM的San Jose研究中心
开始ASC(Advanced Scientific Computer)项目
的研究
基本思想是让编译器做更多的指令调度以减少硬件
复杂度
还提出了每个周期发射多条指令的思想
ASC计划后来被取消,Cocke在1971年到Future
System
1975年Cocke到IBM的Yorktown研究中心开始
研制IBM 801,801是最早开始设计的RISC处
理器
Cocke获得了Eckert-Mauchly和Turing奖
801是PowerPC的前身
比801稍晚开始的有Patterson在Berkeley的
RISC-I及RISC-II与Hennessy在Standford的
MIPS项目
这两个大学的研究生曾参与801项目的研究,后来
返回大学
RISC-II是SPARC的前身,MIPS项目是MIPS处理器
前身
RISC发展过程(3)
801的项目经理Joel Birnbaum到HP创立了PA-
RISC
DEC在推出Alpha之前曾经使用MIPS处理器三
年
1994年Intel和HP宣布使用相同的系统结构
从上述发展过程不难解释刚开始时五个RISC
处理器的相似性
后来每个RISC处理器有了不同的发展
如Alpha的指令简单,超流水结构,流水级多,主
频高,“a speed demon”
PowerPC指令功能强,灵活,甚至有点象CISC,
“a brainiac”
常见RISC指令系统比较
通过比较常见RISC处理器的指令系统加
深对RISC的了解
MIPS IV (Alpha与MIPS很象)
PA-RISC and
PowerPC
SPARC
通过以下方面进行比较
指令格式
寻址方式
指令功能
RISC指令系统的发展
寻址方式比较
指令功能比较
所有RISC处理器都有一些公共指令
load/store指令
算术运算及逻辑指令
控制流指令
不同处理器在比较及转移指令时有较大
不同
比较及条件转移(1)
转移条件
SPARC 使用4位条件码(CC),该条件码在程序
状态字中
整数运算指令设置CC,条件转移指令检测CC
浮点运算有另外两位CC
为了支持64位运算增加了4位整数CC,3位浮点CC
MIPS直接比较寄存器内容判断是否转移
浮点部件有一位条件码,记录cmp指令的结果
PowerPC有4位CC,一个条件寄存器中有8份4位CC
整数和浮点运算各1位,其它用于比较指令。
Branch指令需指定根据哪一位进行转移
运算指令中有一位指定该指令是否影响CC
PA-RISC有多中选择,最常用的是比较两个寄存器
的值并根据结果决定是否转移
比较及条件转移(2)
Delayed Branch技术
紧挨Branch指令后面的指令视为Branch前面的指
令执行可以避免流水线断流。
转移不成功时取消已执行的delay slot指令可以把
转移目标的指令安排在delay slot中。
转移成功时取消已执行的delay slot指令可以把转
移不成功的指令安排在delay slot中。
指令系统的其它功能
下面指令在前述的指令系统中也很常见(至少
在两个指令系统中出现)
Atomic Swap指令
64位指令,ALPHA本来就是64位的,因此不区分64
位指令
预取指令
Big Endian与Little Endian的切换
共享存储同步指令
等
Atomic Swap指令
以MIPS的LL和SC指令 为例
LL(Load Linked)取数且置系统中LLbit为1
LL为1时,处理器检查相应单元是否被修改,如果
其它处理器或设备访问了相应单元或执行了ERET操
作,LLbit置为0
执行SC(Store Conditional)时若Llbit为1,则成功,
目标寄存器为1;否则存数不成功,目标寄存器为0
L1: LL R1, (R3)
ADD R2, R1, 1
SC R2, (R3)
BEQ R2, 0, L1
NOP
MIPS部分指令特色(1)
作为比较早期的RISC系统,MIPS的指令系统
已经发展了四代,不断增加新指令,包括
边界不对齐的数据传送
TLB指令(在MIPS中TLB失效由软件解决)
TLBI,TLBR,TLBW,TLBP
SYSCALL
CTCi, CFCi
NOR指令
JUMP/CALL指令,绝对跳转,指令中的立即数左移
两位替换PC的低28位地址
条件过程调用,BGEZAL, BLTZAL
LL/SC指令用于原子操作
RECIP和RSQRT(Reciprocal)
D A V
E
M[100]
M[104]
J O H NR2
初始值
D A V NR2
D A V ER2
执行“LWL, R2, 101”后
执行“LWR, R2, 104”后
D
A V E
M[200]
M[204]
J O H NR2
初始值
D O H NR2
D A V ER2
执行“LWL, R2, 203”后
执行“LWR, R2, 206”后
MIPS部分指令特色(2)
边界不对齐的数据传送
SPARC部分指令特色(1)
寄存器窗口
多组寄存器用于不同进程,8个全局寄存器用于传
递参数等
2-32个寄存器穿口,每个24个寄存器
过程调用和退出不用把现场保留到存储器
SAVE和RESTORE指令
SAVE做加法,源寄存器来自调用过程(caller),目标寄
存器来自被调用过程(callee),该指令可用于自动修改
堆栈指针。
RESTORE做加法,源寄存器来自被调用过程(callee),
目标寄存器来自调用过程(caller),该指令用来自动释
放堆栈
“标志”加减指令
数据的低两位指出数据类型
适用于LIPS和Smalltalk等
SPARC部分指令特色(2)
其它特色
转移指令JMPL把返回地址存在Rd中,Rd为R0时
相当于JR,Rd为R31时相当于JALR
128浮点运算和数据传送指令
转移指令给出转移是否成功的预测
POPC计算一个操作数中“1”的个数
CASA指令用于原子操作,把一个寄存器的值与
一个内存单元的值比较,如果相等,把内存的值
与另一个寄存器的值交换
ILLTRAP:非法指令错
等等
PowerPC部分指令特色
Link和Count寄存器
Link寄存器用于保存返回地址,实现快速过
程调用
Count寄存器用于循环计数,每次自动递减
这两个寄存器还可以放转移地址
PowerPC不用Delay Slot
其它特色
Load和Store指令同时存取多个寄存器(多
达32个)
Load和Store字符串(变长或定长、对齐或
不对齐)
乘加和乘减指令
LWARX/STWCX实现原子操作,类似于
LL/SC
把数据预取到CACHE的指令
多种移位指令,比较灵活。
PA-RISC部分指令特色
Nullification
不仅是条件转移指令,其它指令也可以根据
执行结果确定下一条指令是否执行
寻址方式、指令格式、转移指令多而灵
活,在所有RISC结构中最多
其它特色
支持十进制
Load and Clear指令用于原子操作
在寄存器中选择或插入任意位
PA-RISC 增加的功能
64位指令
乘加和乘减指令
预取数据到CACHE的指令