程序的执行程序执行和指令执行概述数据通路基本结构和工作原理流水线方式下指令的执行1PPT学习交流程序的执行机制•主要教学目标–理解CPU如何控制程序的执行流–了解一条指令的执行过程–了解CPU的主要功能和内部结构–了解数据通路的基本组成和定时方式–理解指令执行时数据通路中信息的流动过程–了解指令流水线的基本概念–了解内部异常和外部中断的基本概念简要介绍,详细内容参看《计算机组成与系统结构(第2版)》2PPT学习交流教材特点1.强调软件和硬件的关联2.细化流水线CPU设计3.注重用实例图表阐述概念4.提供丰富的教辅资源提供配套的辅助教材:《计算机组成与系统结构习题解答与教学指导》第2版的改进部分3PPT学习交流程序的执行机制•分以下三个部分介绍•第一讲:程序执行概述•程序及指令的执行过程•CPU的基本功能和基本组成•第二讲:数据通路基本结构和工作原理•数据通路基本结构•数据通路的时序控制•数据通路基本工作原理•第三讲:流水线方式下指令的执行•指令流水线的基本原理•适合流水线的指令集特征•CISC和RISC风格指令集•指令流水线的实现•高级流水线实现技术4PPT学习交流程序及指令的执行过程•程序和指令的关系•程序由一条一条指令组成,指令按顺序存放在内存连续单元•程序的执行:周而复始地执行一条一条指令•正常情况下,指令按其存放顺序执行•遇到需改变程序执行流程时,用相应的转移指令(包括无条件转移指令、条件转移指令、调用指令和返回指令等)来改变程序执行流程•程序的执行流的控制•将要执行的指令所在存储单元的地址由程序计数器PC给出,通过改变PC的值来控制执行顺序•指令周期:CPU取出并执行一条指令的时间5PPT学习交流程序及指令的执行过程对于3.6.1中的例子#include"stdio.h"#include"string.h"voidoutputs(char*str){charbuffer[16];strcpy(buffer,str);printf("%s\n",buffer);}……intmain(intargc,char*argv[]){outputs(argv[1]);return0;}Strcpy的栈帧main:……calloutputsmoveax,………retoutputs:……callstrcpy……callprintf……retstrcpy:程序执行流:……calloutputs……callstrcpy……callprintf…...retmov%eax,………6PPT学习交流程序及指令的执行过程反汇编得到的outputs汇编代码080483e4:push%ebp080483e5:mov%esp,%ebp080483e7:sub$0x18,%esp080483ea:mov0x8(%ebp),%eax080483ed:mov%eax,0x4(%esp)080483f1:lea0xfffffff0(%ebp),%eax080483f4:mov%eax,(%esp)080483f7:call0x8048330<__gmon_start__@plt+16>080483fc:lea0xfffffff0(%ebp),%eax080483ff:mov%eax,0x4(%esp)08048403:movl$0x8048500,(%esp)0804840a:call0x80483100804840f:leave08048410:ret将strcpy的两个实参入栈将printf的两个实参入栈7PPT学习交流程序及指令的执行过程在内存存放的指令实际上是机器代码(0/1序列)08048394:8048394:55push%ebp8048395:89e5mov%esp,%ebp8048397:8b450cmov0xc(%ebp),%eax804839a:034508add0x8(%ebp),%eax804839d:5dpop%ebp804839e:c3ret°对于add函数ü指令按顺序存放在0x08048394开始的存储空间。
ü各指令长度可能不同,如push、pop和ret指令各占一个字节,第2行mov指令占两个字节,第3行mov指令和第4行add指令各占3字节ü各指令对应的0/1序列含义有不同的规定,如“push%ebp”指令为01010101B,其中01010为push指令操作码,101为EBP的编号,“pop%ebp”为01011101B,其中01011为pop指令的操作码如何判定每条指令有多长?如何判定操作类型、寄存器编号、立即数等?如何区分第2行和第3行mov指令的不同?如何确定操作数是在寄存器中还是在存储器中?一条指令执行结束后如何正确读取到下一条指令?123456程序执行需要解决的问题:8PPT学习交流程序及指令的执行过程CPU运行程序的过程就是执行一条一条指令的过程CPU执行指令的过程中,包含CPU操作、访问内存或I/O端口的操作两类访存或I/O:涉及存储系统、总线和I/O接口等内容(以后章节内容)CPU内部操作:涉及CPU内部数据通路(本章节内容)9PPT学习交流机器指令的执行过程•CPU执行指令的过程•取指令•PC+“1”•指令译码•进行主存地址运算•取操作数•进行算术/逻辑运算•存结果•以上每步都需检测“异常”•若有异常,则自动切换到异常处理程序•检测是否有“中断”请求,有则转中断处理指令执行过程问题:“取指令”一定在最开始做吗?PC+“1”一定在译码之前做吗?“译码”须在指令执行前做吗?你能说出几种“异常”事件?“异常”和“中断”的差别是什么?异常是在CPU内部发生的,中断是由外部事件引起的取指阶段执行阶段“1”:指一条指令的长度,定长指令字每次都一样;变长指令字每次可能不同定长指令字通常在译码前做,变长指令字在译码后做!10PPT学习交流机器指令的执行过程•取指令:从PC所指单元取出指令送指令寄存器(IR),并增量PC。
•如add函数,开始PC(IA-32的EIP)中存放的是0x0848394,CPU根据PC取指令送IR,每次总是取最长指令字节数,假定最长指令是4个字节,即IR为32位,此时,也即5589E58BH被取到IR中•指令译码:不同指令其功能不同,因而需要不同的操作控制信号•CPU根据不同操作码译出不同控制信号对于上述取到IR中的5589E58BH译码时,可根据高5位01010译码得到push指令的控制信号•源操作数地址计算并取操作数:根据寻址方式确定源操作数地址计算方式,若是存储器数据,则需一次或多次访存;若为间接寻址或两操作数都在存储器的双目运算,则需多次访存;若是寄存器数据,则直接从寄存器取数•执行数据操作:在ALU或加法器等运算部件中对取出的源操作数进行运算•目的操作数地址计算并存结果:根据寻址方式确定目的操作数地址计算方式,若是存储器数据,则需要一次或多次访存(间接寻址时);若是寄存器数据,则在进行数据操作时直接存结果到寄存器•指令地址计算并将其送PC顺序执行时,PC加上当前指令长度;遇到转移类指令时,则需要根据条件码、操作码和寻址方式等确定下条指令地址11PPT学习交流机器指令的执行过程•每条指令的功能总是由以下四种基本操作来实现:读取某一主存单元的内容,并将其装入某个寄存器(取指,取数)把一个数据从某个寄存器存入给定的主存单元中(存结果)把一个数据从某寄存器送到另一寄存器或者ALU(取数,存结果)进行算术或逻辑运算(PC+”1”,计算地址,运算)指令执行过程中查询各种异常情况,并在发现异常时转异常处理指令执行结束时查询中断请求,并在发现中断请求时响应中断•操作功能可形式化描述描述语言称为寄存器传送语言RTL(RegisterTransferLanguage)12PPT学习交流回顾:冯.诺依曼结构模型机控制器CPUPC输入设备输出设备MARMDRALU标志寄存器IR地址数据控制GPRs0123存储器01234567你妈会做的菜和厨师会做的菜不一样,同一个菜谱的做法也可能不同如同不同架构支持的指令集不同,同一种指令的实现方式和功能也可能不同13PPT学习交流控制器ALU标志寄存器地址数据控制GPRs017ffffffff80483d680483d580483d405589e5EIPbfff0000MDRIRMARbeeefffc回顾:IA-32的体系结构是怎样的呢?8个GPR(0~7),一个EFLAGs,PC为EIP可寻址空间4GB(编号为0~0xFFFFFFFF)指令格式变长,操作码变长由若干字段(OP、Mod、SIB等)组成14PPT学习交流回顾:IA-32的寄存器组织15PPT学习交流回顾:IA-32的寄存器组织反映了体系结构发展的轨迹,字长不断扩充,指令保持兼容ST(0)~ST(7)是80位,MM0~MM7使用其低64位16PPT学习交流typedefstruct{union{struct{uint32_teax;uint32_tecx;uint32_tedx;uint32_tebx;uint32_tesp;uint32_tebp;uint32_tesi;uint32_tedi;};union{uint32_t_32;uint16_t_16;uint8_t_8[2];}gpr[8];};swaddr_teip;}CPU_state;externCPU_statecpu;enum{R_EAX,R_ECX,R_EDX,R_EBX,R_ESP,R_EBP,R_ESI,R_EDI};enum{R_AX,R_CX,R_DX,R_BX,R_SP,R_BP,R_SI,R_DI};enum{R_AL,R_CL,R_DL,R_BL,R_AH,R_CH,R_DH,R_BH};#definereg_l(index)(cpu.gpr[index]._32)#definereg_w(index)(cpu.gpr[index]._16)#definereg_b(index)(cpu.gpr[index&0x3]._8[index>>2])PA中模拟的IA-32的寄存器组织17PPT学习交流回顾:IA-32的标志寄存器•6个条件标志•OF、SF、ZF、CF各是什么标志(条件码)?•AF:辅助进位标志(BCD码运算时才有意义)•PF:奇偶标志•3个控制标志•DF(DirectionFlag):方向标志(自动变址方向是增还是减)•IF(InterruptFlag):中断允许标志(仅对外部可屏蔽中断有用)•TF(TrapFlag):陷阱标志(是否是单步跟踪状态)•……808680286/38618PPT学习交流回顾:IA-32的寻址方式•寻址方式•根据指令给定信息得到操作数或操作数地址•操作数所在的位置•指令中:立即寻址•寄存器中:寄存器寻址•存储单元中(属于存储器操作数,按字节编址):其他寻址方式•存储器操作数的寻址方式与微处理器的工作模式有关•两种工作模式:实地址模式和保护模式•实地址模式(基本用不到)•为与8086/8088兼容而设,加电或复位时•寻址空间为1MB,20位地址:(CS)<<4+(IP)•保护模式(需要掌握)•加电后进入,采用虚拟存储管理,多任务情况下隔离、保护•80286以上高档微处理器最常用的工作模式•寻址空间为232B,32位线性地址分段(段基址+段内偏移量)19PPT学习交流回顾:保护模式下的寻址方式•SR段寄存器(间接)确定操作数所在段的段基址•有效地址给出操作数在所在段的偏移地址•寻址过程涉及到“分段虚拟管理方式”,将在第6章讨论存储器操作数跳转目标指令地址20PPT学习交流位移量和立即数都可以是:1B/2B/4BSIB中基址B和变址I都可是8个GRS中任一个;SS给出比例因子操作码:opcode;W:与机器模式(16/32位)一起确定寄存器位数(AL/AX/EAX);D:操作方向(确定源和目标)寻址方式(ModRM字节):mod、r/m、reg/op三个字段与w字段和机器模式(16/32)一起确定操作数所在的寄存器编号或有效地址计算方式回顾:回顾: IA-32机器指令格式机器指令格式8d0402lea(%edx,%eax,1),%eax100011010000010000000010存储器操作数21PPT学习交流typedefunion{struct{uint8_tR_M:3;uint8_treg:3;uint8_tmod:2;};struct{uint8_tdont_care:3;uint8_topcode :3;};uint8_tval;}ModR_M;typedefunion{struct{uint8_tbase:3;uint8_tindex:3;uint8_tss:2;};uint8_tval;}SIB;PA中模拟的中模拟的IA-32指令的指令的ModRM和和SIB22PPT学习交流程序由指令序列组成080483d4 : 80483d4: 55 push %ebp 80483d5: 89 e5 mov %esp, %ebp 80483d7: 83 ec 10 sub $0x10, %esp 80483da: 8b 45 0c mov 0xc(%ebp), %eax 80483dd: 8b 55 08 mov 0x8(%ebp), %edx 80483e0: 8d 04 02 lea (%edx,%eax,1), %eax 80483e3: 89 45 fc mov %eax, -0x4(%ebp) 80483e6: 8b 45 fc mov -0x4(%ebp), %eax 80483e9: c9 leave 80483ea: c3 ret test代码从80483d4开始!“objdump-dtest”结果起始EIP=?EIP←0x80483d4若i=2147483647,j=2,则程序执行结果是什么?每一步如何执行?想想妈妈怎么做菜的?根据EIP取指令指令译码取操作数指令执行回写结果修改EIP的值取并执行指令OP23PPT学习交流指令执行过程控制器ALU标志寄存器地址数据控制GPRs017bfff002080483d680483d580483d40080483d4:80483d4:55push%ebp80483d5:89e5mov%esp,%ebp5589e5EBPESPEIPbfff0020bfff0000bfff000080483d480483d45589e583Rd5589e58355MDR5589e58380483d4S1:取指令IR5589e583RdS2:指令译码S3:指令执行MARbeeefffc55功能:R[esp]← R[esp]-4,M[R[esp]]←R[ebp]4524PPT学习交流指令执行过程控制器ALU标志寄存器地址数据控制GPRs017bfff002080483d680483d580483d40080483d4:80483d4:55push%ebp80483d5:89e5mov%esp,%ebp5589e5EBPESPEIPbfff0020bfff000080483d455MDR80483d4S1:取指令IRS2:指令译码S3:指令执行beeefffcMARbeeefffc功能:R[esp]← R[esp]-4,M[R[esp]]←R[ebp]4525PPT学习交流指令执行过程控制器ALU标志寄存器地址数据控制GPRs017bfff002080483d680483d580483d40080483d4:80483d4:55push%ebp80483d5:89e5mov%esp,%ebp5589e5EBPESPEIPbfff0020bfff000080483d455MDRS1:取指令IRS2:指令译码S3:指令执行beeefffcMARbeeefffcbeeefffc功能:R[esp]← R[esp]-4,M[R[esp]]←R[ebp]5426PPT学习交流指令执行过程控制器ALU标志寄存器地址数据控制GPRs017bfff002080483d680483d580483d40080483d4:80483d4:55push%ebp80483d5:89e5mov%esp,%ebp5589e5EBPESPEIPbfff0020bfff000080483d4Wr55MDRS1:取指令IRWrS2:指令译码S3:指令执行beeefffcMARbeeefffcbeeefffcbfff0020bfff0020beeefffc功能:R[esp]← R[esp]-4,M[R[esp]]←R[ebp]4527PPT学习交流指令执行过程控制器ALU标志寄存器地址数据控制GPRs017bfff002080483d680483d580483d40080483d4:80483d4:55push%ebp80483d5:89e5mov%esp,%ebp5589e5EBPESPEIPbfff0020bfff0000Wr55MDRS1:取指令IRWrS2:指令译码S3:指令执行beeefffcMARbeeefffcbeeefffcbfff0020bfff0020beeefffc2000ffbf80483d4功能:R[esp]← R[esp]-4,M[R[esp]]←R[ebp]4528PPT学习交流指令执行过程控制器ALU标志寄存器地址数据控制GPRs017bfff002080483d680483d580483d40080483d4:80483d4:55push%ebp80483d5:89e5mov%esp,%ebp5589e5EBPESPEIPbfff0020bfff000080483d555MDRS1:取指令IRS2:指令译码S3:指令执行、EIP增量beeefffcMARbeeefffcbeeefffcbfff0020bfff0020beeefffc2000ffbf开始执行下一条指令45WrWr29PPT学习交流程序由指令序列组成080483d4 : 80483d4: 55 push %ebp 80483d5: 89 e5 mov %esp, %ebp 80483d7: 83 ec 10 sub $0x10, %esp 80483da: 8b 45 0c mov 0xc(%ebp), %eax 80483dd: 8b 55 08 mov 0x8(%ebp), %edx 80483e0: 8d 04 02 lea (%edx,%eax,1), %eax 80483e3: 89 45 fc mov %eax, -0x4(%ebp) 80483e6: 8b 45 fc mov -0x4(%ebp), %eax 80483e9: c9 leave 80483ea: c3 ret test代码从80483d4开始!“objdump-dtest”结果执行add时,起始EIP=?EIP←0x80483d4若i=2147483647,j=2,则程序执行结果是什么?每一步如何执行?OPEDX和EAX中各是什么?R[edx]=i=0x7fffffffR[eax]=j=0x230PPT学习交流回顾:IA-32的寄存器组织反映了体系结构发展的轨迹,字长不断扩充,指令保持兼容ST(0)~ST(7)是80位,MM0~MM7使用其低64位31PPT学习交流指令执行过程控制器ALU标志寄存器地址数据控制GPRs017bfff002080483d680483d580483d4080483da:8b450cmov0xc(%ebp),%eax80483dd:8b5508mov0x8(%ebp),%edx80483e0:8d0402lea(%edx,%eax,1),%eax5589e5EBPESPEIPbfff000080483e0MDRS1:取指令IRWrS2:指令译码S3:指令执行、EIP增量MAR7fffffffbeeefffc2000ffbf228d04028945功能:R[eax]← R[edx]+R[eax]*132PPT学习交流ALU长啥样呢?•试想一下ALU中有哪些部件?(想想厨房做菜用什么工具?)•补码加/减器(可以干什么?)•带符号加、带符号减•无符号加、无符号减•乘法器?(为什么可以没有?)•可用加/减+移位实现,也可有独立乘法器•带符号乘和无符号乘是独立的部件•除法器?(为什么可以没有?)•可用加/减+移位实现,也可有独立除法器•带符号除和无符号除是独立的部件•各种逻辑运算部件(可以干什么?)•非、与、或、非、前置0个数、前置1个数…….大家能否画出ALU框图?33PPT学习交流ALU结构原理ALU的符号是什么样的?ALUABRFlagsALUctrnnn4猜猜这是什么?补码加/减器与门nnnFlagsR或门右移非门ABAA∧BA>>1A∨B4ALUctr多路选择器34PPT学习交流指令执行过程控制器ALU标志寄存器地址数据控制GPRs017bfff002080483d680483d580483d4080483da:8b450cmov0xc(%ebp),%eax80483dd:8b5508mov0x8(%ebp),%edx80483e0:8d0402lea(%edx,%eax,1),%eax5589e5EBPESPEIPbfff000080483e0MDRS1:取指令IRWrS2:指令译码S3:指令执行、EIP增量MAR7fffffffbeeefffc2000ffbf28d04028945功能:R[eax]← R[edx]+R[eax]*1(执行前)235PPT学习交流指令执行过程控制器ALU标志寄存器地址数据控制GPRs017bfff002080483d680483d580483d4080483da:8b450cmov0xc(%ebp),%eax80483dd:8b5508mov0x8(%ebp),%edx80483e0:8d0402lea(%edx,%eax,1),%eax5589e5EBPESPEIPbfff000080483e0MDRS1:取指令IRWrS2:指令译码S3:指令执行、EIP增量MAR7fffffffbeeefffc2000ffbf28d04028945功能:R[eax]← R[edx]+R[eax]*1(执行后)36PPT学习交流lea指令执行的结果intadd(inti,intj){returni+j;}intmain(){int t1=2147483647;intt2=2;int sum=add(t1,t2);printf(”sum=%d”,sum);}sum=-2147483647sum=0x80000001sum的机器数和值分别是什么?咦,怎么会两个正数相加结果为负数呢?为什么?37PPT学习交流程序的执行机制•分以下三个部分介绍•第一讲:程序执行概述•程序及指令的执行过程•CPU的基本功能和基本组成•第二讲:数据通路基本结构和工作原理•数据通路基本结构•数据通路的时序控制•数据通路基本工作原理•第三讲:流水线方式下指令的执行•指令流水线的基本原理•适合流水线的指令集特征•CISC和RISC风格指令集•指令流水线的实现•高级流水线实现技术38PPT学习交流数据通路的位置•计算机的五大组成部分:•什么是数据通路(DataPath)?•指令执行过程中,数据所经过的路径,包括路径中的部件。
它是指令的执行部件•控制器(Control)的功能是什么?•对指令进行译码,生成指令对应的控制信号,控制数据通路的动作能对执行部件发出控制信号,是指令的控制部件ControlMemoryCPUInputOutputDatapathDatapath39PPT学习交流数据通路的基本结构•数据通路由两类元件组成•组合逻辑元件(也称操作元件)•时序逻辑元件(也称状态元件,存储元件)•元件间的连接方式•总线连接方式•分散连接方式•数据通路如何构成?•由“操作元件”和“存储元件”通过总线方式或分散方式连接而成•数据通路的功能是什么?•进行数据存储、处理、传送因此,数据通路是由操作元件和存储元件通过总线方式或分散方式连接而成的进行数据存储、处理、传送的路径40PPT学习交流操作元件:组合逻辑电路•加法器(Adder)多路选择器(MUX)算逻部件(ALU)32AB32Y32SelectMUX3232AB32ResultZeroOPALU3232AB32SumCarryAdderCarryIn3Decoderout0out1out7out2°译码器(Decoder)何时要用到adder,ALU,MUXorDecoder?控制信号组合逻辑元件的特点:其输出只取决于当前的输入。
即:若输入一样,则其输出也一样定时:所有输入到达后,经过一定的逻辑门延时,输出端改变,并保持到下次改变,不需要时钟信号来定时加法器需要什么控制信号?41PPT学习交流状态元件:时序逻辑电路•状态(存储)元件的特点:•具有存储功能,在时钟控制下输入被写到电路中,直到下个时钟到达•输入端状态由时钟决定何时被写入,输出端状态随时可以读出•定时方式:规定信号何时写入状态元件或何时从状态元件读出•边沿触发(edge-triggered)方式:•状态单元中的值只在时钟边沿改变每个时钟周期改变一次•上升沿(risingedge)触发:在时钟正跳变时进行读/写•下降沿(fallingedge)触发:在时钟负跳变时进行读/写•最简单的状态单元(回顾:数字逻辑电路课程内容):•D触发器:一个时钟输入、一个状态输入、一个状态输出时钟周期上升沿下降沿42PPT学习交流存储元件中何时状态被改变?切记:状态单元的输入信息总是在一个时钟边沿到达后的“Clk-to-Q”时间才被写入,此时的输出才反映新的状态值数据通路中的状态元件有两种:寄存器(组)+存储器(LatchProp-锁存延迟)Q总是在clock-to-Q后跟着D变化这期间D的变化不影响Q43PPT学习交流数据通路与时序控制Clk寄存器的输入可变化SetupHold............Setup Hold数据通路由“…+状态元件+操作元件(组合电路)+状态元件+…”组成只有状态元件能存储信息,操作元件须从状态元件接收输入,并将输出写入状态元件。
其输入为前一时钟生成的数据,输出为当前时钟所用的数据现代计算机的时钟周期ClkClkCycleTime=Clk-to-Q时间+LongestDelay+建立时间+时钟偏移44PPT学习交流早期累加器型指令系统数据通路•最简单的数据通路结构•取指令数据路径为:PC→MAR,ReadM,M→MBR→IBR→IR•取操作数、运算、送结果的数据路径为:操作数地址→MAR,ReadM,M→MBR→ALU输入端,AC→ALU输入端,ALU操作,ALU结果→AC,AC→MBR,WriteMIAS计算机(冯.诺依曼等设计)是现代计算机的原型AC:累加器MQ:乘商寄存器PC、IR、ALU、IBR、MBR:?分散连接方式!45PPT学习交流单总线数据通路四种基本操作的时序控制信号在寄存器之间传送数据R0out,Yin完成算术、逻辑运算R1out,YinR2out,Add,ZinZout,R3in从主存取字R1out,MARinRead,WMFC(等待MFC)MDRout,R2in写字到主存R1out,MARinR2out,MDRinWrite,WMFCR[R2]←M[R[R1]] M[R[R1]]←R[R2]CPU访存有两种通信方式早期:直接访问MM,“异步”方式,用MFC应答信号;现在:先Cache后MM,“同步”方式,无需应答信号。
问题:时钟周期的宽度如何确定?以上四种操作各需要几个时钟周期?取指阶段的操作与时序控制信号?IR←M[PC],PC←PC+“1”1Cycle3Cycles>3CyclesRead/Write时间最长,故以此为准或划分为多个时钟周期通用寄存器总线连接方式!内总线内总线内总线外总线外总线>3Cycles46PPT学习交流三总线数据通路•单总线中一个时钟内只允许传一个数据,因而指令执行效率很低•可采用多总线方式,同时在多个总线上传送不同数据,提高效率•例如:三总线数据通路•总线A、B分别传送两个源操作数,总线C传送结果•单总线中的暂存器Y和Z在此可取消,Why?•采用双口通用寄存器组•如何实现R[R3]←R[R1]opR[R2]R1outA,R2outB,op,R3inC只要一个时钟周期(节拍)即可!目前大都采用流水线方式执行指令,单总线或三总线的总线式数据通路很难实现指令流水执行 ZY以下以MIPS指令系统为例简介CPU的工作原理三个总线各自传不同数据,不会发生冲突,故无需Y和Z通用寄存器组47PPT学习交流MIPS的三种指令类型•ADDandSUBSTRACT•addrd,rs,rt•subrd,rs,rt•ORImmediate:•orirt,rs,imm16•LOADandSTORE•lwrt,rs,imm16•swrt,rs,imm16•BRANCH:•beqrs,rt,imm16•JUMP:•jtargetoptarget address026316 bits26bitsoprsrtrdshamtfunc0611162126316bits6bits5bits5bits5 bits5 bitsoprsrtimmediate0162126316bits16bits5bits5 bitsMIPS有三种指令格式:R-型、I-型、J-型R-型指令格式I-型指令格式J-型指令格式本节内容无需掌握,仅为理解指令的执行过程而补充48PPT学习交流取指令部件(InstructionFetchUnit)•每条指令都有的公共操作:•取指令:M[PC]•更新PC:PC←PC+4转移(BranchandJump)时,PC内容再次被更新为“转移目标地址”32Instruction WordAddressInstructionMemoryPCClkNext AddrLogic顺序:先取指令,再改PC的值(具体实现时,可以并行)绝不能先改PC的值,再取指令下地址逻辑取指后,各指令功能不同,数据通路中信息流动过程也不同取指令部件49PPT学习交流RR(R-type)型指令的数据通路功能:R[rd]←R[rs]opR[rt],如:addrd,rs,rt32ResultClkbusW3232busA32busB555RwRa Rb3232-bitRegistersrsrtrdALU不考虑公共操作,仅R-Type指令执行阶段的数据通路如下:Ra,Rb,Rw分别对应指令的rs,rt,rdoprsrtrdshamtfunc0611162126316bits6bits5bits5bits5 bits5 bits溢出时,不写结果并转异常处理程序溢出典型的三总线结构!busA、busB、busW50PPT学习交流带立即数的逻辑指令的数据通路R[rt]←R[rs]opZeroExt[imm16]]Ex:orirt,rs,imm1632ResultClkbusW3232busA32busB555Rw Ra Rb3232-bitRegistersRsDon’t Care(Rt)ALUR-型结果写入RdR-型操作数来自busBRtRdMux01零扩展Mux1632imm1601oprsrtimm160162126316bits16bits5bits5 bits51PPT学习交流单周期数据通路的基本结构32ClkbusW3232busA32busB555Rw Ra Rb 3232 bitRegistersRsRtRtRdExtMuxMux3216imm16MuxClkDataInWrEn32AdrDataMemory32ALU取指部件ClkZeroInstruction<31:0>010101<21:25><16:20><11:15><0:15>Imm16RdRtRs指令执行结果总是在下个时钟到来时开始保存在寄存器或存储器或PC中!52PPT学习交流单周期数据通路中的关键路径(Load操作)Clk5Rw Ra Rb32 32-bitRegistersRdALUClkDataInDataOutDataAddressIdealDataMemoryInstructionbusInstruction AddressIdealInstructionMemoryClkPC5Rs5Rt16Imm32323232关键路径(Load)=Clk-to-Q+取指令时间+取寄存器数据时间+ALU中运算时间+取存储器数据时间+写寄存器时间(建立时间)+时钟扭斜Load操作:R[Rt]←M[R[Rs]+Imm16]53PPT学习交流单周期,多周期和流水线比较Clk周期 1MultipleCycle Implementation(多周期实现):IfetchRegExecMemWr周期 2 周期 3周期 4 周期 5周期 1 周期 2 周期 3 周期 4 周期 1Load IfetchRegExecMemWrIfetchRegExecMemLoadStorePipelineImplementation(流水线实现):IfetchRegExecMemWrStoreClkSingleCycleImplementation(单周期实现):LoadStoreWasteIfetchR-typeIfetchRegExecMemWrR-type周期 1周期 1前述的单总线结构CPU一定是多周期实现的CPU!54PPT学习交流程序的执行机制•分以下三个部分介绍•第一讲:程序执行概述•程序及指令的执行过程•CPU的基本功能和基本组成•第二讲:数据通路基本结构和工作原理•数据通路基本结构•数据通路的时序控制•数据通路基本工作原理•第三讲:流水线方式下指令的执行•指令流水线的基本原理•适合流水线的指令集特征•CISC和RISC风格指令集•指令流水线的实现•高级流水线实现技术55PPT学习交流•LaundryExample•Ann,Brian,Cathy,Daveeachhaveoneloadofclothestowash,dry,andfold•Washertakes30minutes•Dryertakes40minutes•“Folder”takes20minutesABCDPipelining:It’sNatural!一个日常生活中的例子—洗衣服如果让你来管理洗衣店,你会如何安排?56PPT学习交流SequentialLaundry(串行方式)•串行方式下4批衣服需花费6小时(4x(30+40+20)=360分钟)•N批衣服,需花费的时间为Nx(30+40+20)=90N•如果用流水线方式洗衣服,则花多少时间呢?ABCD3040 20 3040 20 3040 20 3040 206PM7891011MidnightTaskOrderTime57PPT学习交流PipelinedLaundry:(StartworkASAP)串行为90分钟x4=6小时N批则为90xN分钟ABCD6PM7891011MidnightTaskOrderTime3040404040 20流水线方式下,需30+4x40+20=210分(3.5小时)如果有N批衣服呢?30+Nx40+20分钟假定每一步时间均衡,则比串行方式提高约3倍!流水方式下,所用时间主要与最长阶段的时间有关!58PPT学习交流指令流水线的基本概念•五段流水线取指令(IF):根据PC的值从存储器取出指令。
指令译码(ID):产生指令执行所需的控制信号取操作数(OF):读取存储器操作数或寄存器操作数执行(EX):对操作数完成指定操作写回(WB):将操作结果写入存储器或寄存器59PPT学习交流单周期数据通路中指令的执行假定:最复杂指令执行过程①取指:200ps;②译码和读操作数:50ps;③ALU操作:100ps;④读存储器:200ps;⑤结果写寄存器:50ps200+50+100+200=550单周期:每条指令在单个时钟周期内完成,故CPI=1,时钟周期=600ps每秒执行指令条数:1/600ps=1/(600×10-15)=1.67×1012CPI=1,指令延时为600ps指令吞吐率为1.67GIPS指令串行执行,程序执行时间为:指令条数×600ps60PPT学习交流流水线数据通路中指令的执行假定:最复杂指令执行过程①取指:200ps;②译码和读操作数:50ps;③ALU操作:100ps;④读存储器:200ps;⑤结果写寄存器:50ps取指令译码/读数ALU运算读/写存储器写结果最长段为200ps指令延时为:250ps×5=1.25ns指令吞吐率为4GIPS61PPT学习交流流水线指令集的设计•具有什么特征的指令集有利于流水线执行呢?•长度尽量一致,有利于简化取指令和指令译码操作•MIPS指令32位,下址计算方便:PC+4•X86指令从1字节到17字节不等,使取指部件极其复杂•格式少,且源寄存器位置相同,有利于在指令未知时就可取操作数•MIPS指令的rs和rt位置一定,在指令译码时就可读rs和rt的值若位置随指令不同而不同,则需先确定指令类型才能取寄存器编号•load/Store指令才能访问存储器,有利于减少操作步骤,规整流水线•lw/sw指令的地址计算和运算指令的执行步骤规整在同一个周期•X86运算类指令操作数可为内存数据,需计算地址、访存、执行•内存中”对齐”存放,有利于减少访存次数和流水线的规整总之,规整、简单和一致等特性有利于指令的流水线执行oprsrtrdshamtfunc0611162126316bits6bits5bits5bits5 bits5 bits62PPT学习交流按指令格式的复杂度来分早期CISC设计风格的主要特点(1)指令系统复杂变长操作码/变长指令字/指令多/寻址方式多/指令格式多(2)指令周期长绝大多数指令需要多个时钟周期才能完成(3)各种指令都能访问存储器除了专门的存储器读写指令外,运算指令也能访问存储器(4)采用微程序控制(5)有专用寄存器(6)难以进行编译优化来生成高效目标代码例如,VAX-11/780小型机16种寻址方式;9种数据格式;303条指令;一条指令包括1~2个字节的操作码和下续N个操作数说明符。
一个说明符的长度达1~10个字节按指令格式的复杂度来分,有两种类型计算机:复杂指令集计算机CISC(ComplexInstructionSetComputer)精简指令集计算机RISC(ReduceInstructionSetComputer)63PPT学习交流复杂指令集计算机CISC•对CISC进行测试,发现一个事实:•在程序中各种指令出现的频率悬殊很大,最常使用的是一些简单指令,这些指令占程序的80%,但只占指令系统的20%而且在微程序控制的计算机中,占指令总数20%的复杂指令占用了控制存储器容量的80%•1982年美国加州伯克利大学的RISCⅠ,斯坦福大学的MIPS,IBM公司的IBM801相继宣告完成,这些机器被称为第一代RISC机uCISC的缺陷–日趋庞大的指令系统不但使计算机的研制周期变长,而且难以保证设计的正确性,难以调试和维护,并且因指令操作复杂而增加机器周期,从而降低了系统性能u1975年IBM公司开始研究指令系统的合理性问题,JohnCocks提出精简指令系统计算机RISC(ReduceInstructionSetComputer)。
SKIP64PPT学习交流Top1080x86Instructions(简单指令占主要部分,使用频率高!)BACKMOVMtoRMOVRtoMJccCMP65PPT学习交流RISC设计风格的主要特点(1)简化的指令系统指令少/寻址方式少/指令格式少/指令长度一致(2)以RR方式工作除Load/Store指令可访存外,其余指令都只访问寄存器(3)指令周期短以流水线方式工作,因而除Load/Store指令外,其他简单指令都只需一个或一个不到的时钟周期就可完成(4)采用大量通用寄存器,以减少访存次数(5)采用硬连线路控制器,不用或少用微程序控制(6)采用优化的编译系统,力求有效地支持高级语言程序MIPS是典型的RISC处理器,82年以来新的指令集大多采用RISC体系结构x86因为“兼容”的需要,保留了CISC的风格,同时也借鉴了RISC思想66PPT学习交流指令流水线的实现假定:最复杂指令执行过程①取指:200ps;②译码和读操作数:50ps;③ALU操作:100ps;④读存储器:200ps;⑤结果写寄存器:50ps。
取指令IFetch读数/译码Reg/DecALU运算Exec读/写存储器Mem写结果Write可以分5个流水段,最长阶段为200ps67PPT学习交流五段流水线数据通路IF/IDRegisterID/ExRegisterEx/Mem RegisterMem/Wr RegisterPCDataMemWADiRA DoIUnitAIRFileDiRaRbRwExecUnitbusAbusBImmMux1010RtRdImmPC+4PC+4RsRtPC+4Zero10ClkIfetch(IF)Reg/Dec(ID)Exec(Ex)MemWrClock-to-Qdelay流水段寄存器:保存每个时钟周期执行的结果!68PPT学习交流指令流水线的执行举例End ofCycle 4EndofCycle5End ofCycle 6End ofCycle7ClockCycle 1 Cycle 2Cycle 3 Cycle 4Cycle 5Cycle 6Cycle 7Cycle 8IfetchReg/DecExecMemWr0:LoadIfetchReg/DecExecMemWr4:R-typeIfetchReg/DecExecMemWr8: StoreIfetchReg/DecExecMemWr12:Beq周期4结束:Load的Mem,R-type的Exec,Store的Reg,Beq的Ifetch周期5结束:Load的Wr,R-type的Mem,Store的Exec,Beq的Reg周期6结束:R-type的Wr,Store的Mem,Beq的Exec周期7结束:Store的Wr,Beq的Mem考察以下几个点的情况:69PPT学习交流指令流水线的执行举例lw指令与beq、sub、or指令关于$8数据相关sub与or关于$9数据相关可通过转发解决数据相关可通过前半周期写后半周期读解决数据相关Load-use数据相关不能通过转发解决指令lw与beq是load-use数据相关beq指令条件满足时,应转200处执行,但在此之前已有3条指令正在执行,需从流水线中冲刷掉延迟损失时间片C=370PPT学习交流•Hazards:指流水线遇到无法正确执行后续指令或执行了不该执行的指令•结构冒险(hardwareresourceconflicts,硬件资源冲突):现象:同一个部件同时被不同指令所使用•一个部件每条指令只能使用1次,且只能在特定周期使用•设置多个部件,以避免冲突。
如指令存储器IM和数据存储器DM分开•数据冒险(datadependencies,数据相关):现象:后面指令用到前面指令结果数据时,前面指令的结果还没产生•转发(Forwarding/Bypassing旁路)或前半周期读后半周期写•Load-use冒险不能通过转发解决,需阻塞(stall)一个时钟周期•编译程序优化指令顺序•控制(分支)冒险(changesinprogramflow,改变控制流):现象:转移或异常改变执行流程,后继指令在目标地址产生前已被取出•采用静态或动态分支预测•编译程序优化指令顺序(分支延迟)流水线的冲突/冒险(hazard)情况本PPT内容只需大概了解71PPT学习交流以下源程序可生成两种不同的代码,优化的代码可避免Load阻塞a=b+c;d=e–f;假定a,b,c,d,e,f在内存编译器优化指令顺序解决数据冒险Fastcode:lw$2,blw$3,clw$5,eadd$1,$2,$3lw$6,fsw$1,asub$4,$5,$6sw$4,d Slowcode:lw$2,blw$3,cadd$1,$2,$3sw$1,alw$5,elw$6,fsub$4,$5,$6sw$4,d调整后编译器的优化很重要!如果硬件不支持阻塞处理的话,则编译器可以将顺序调整和插入NOP指令结合起来,在找不到可插入的指令时,插入NOP指令!72PPT学习交流编译器优化以避免阻塞的情况调查由此可见,优化调度后load阻塞现象大约降低了1/2~1/373PPT学习交流编译器优化指令顺序解决控制冒险•基本思想:把分支指令前面的与分支指令无关的指令调到分支指令后面执行,以填充延迟时间片(也称分支延迟槽BranchDelayslot),不够时用nop填充如何对以下程序段进行分支延迟调度?(假定时间片为2)调度后,无需在硬件线路中阻塞branch指令后面指令的执行lw$3,0($2)add$6,$4,$2beq$3,$5,2lw$1,0($2)add$3,$3,$2sw$1,0($2) …… lw$1,0($2)lw$3,0($2)add$6,$4,$2beq$3,$5,2add$3,$3,$2sw$1,0($2) …… 调度后可能带来其他问题:产生新的load-use数据冒险若分支延迟时间片减少为1调度后lw$3,0($2)add$6,$4,$2beq$3,$5,2lw$1,0($2)nopadd$3,$3,$2sw$1,0($2) 74PPT学习交流提高性能措施—实现指令级并行•实现指令流内部的并行流水线称为指令级并行(ILP)•有两种指令级并行策略•超流水线(Super-pipelining)•级数更多的流水线•理想情况下,流水线的加速比与流水段的数目成正比(即:理想情况下,流水段越多,时钟周期越短,指令吞吐率越高)但是,它会增加开销,且是有极限的!可以怎样突破极限呢?•多发射流水线(Multipleissuepipelining)•多条指令(如整数、浮点、装入/存储等)同时启动并独立运行•前提:有多个执行部件。
如定点、浮点、乘/除、取数/存数部件等•结果:能达到小于1的CPI,定义CPI的倒数为IPC(例如:理想的四路多发射流水线的IPC为4)•两种实现方法▫静态多发射:由编译器在编译时静态完成指令打包和冒险处理▫动态多发射:由硬件在执行时动态完成指令打包和冒险处理CPI=?CPI=1N段流水线说明一个时钟周期内最多有几条指令同时并行执行?N条!故N越大并行度越高!75PPT学习交流静态多发射处理器•由编译器在编译时进行相关性分析和静态分支预测,以静态完成指令打包•指令打包(将同时发射的多条指令合并到一个长指令中)•将同一个时钟周期内发射的多个指令看成是一条多个操作的长指令,称为一个“发射包”•“静态多发射”也被称为“超长指令字”(VLIW-VeryLongInstructionWord),采用这种技术的处理器被称为VLIW处理器•在同一个周期内发射的指令类型是受限制的(举例:干洗/水洗)例如,只能是一条ALU指令/分支指令、一条Load/Store指令•IA-64采用这种方法,Intel称其为EPIC(ExplicitlyParallelInstructionComputer—显式并行指令计算机)静态打包时,一定要保证指令内部不会出现冒险!安腾、安腾276PPT学习交流动态多发射处理器•由硬件在执行时动态完成指令打包或冒险处理•通常被称为超标量处理器(Superscalar)•同一个时钟动态发射多条指令,一个周期内可执行一条以上指令•与VLIW处理器的不同点:•VLIW处理器:与机器结构密切相关,在结构有差异机器上要重新编译•超标量处理器:编译器仅进行指令顺序调整(还是串行序列),不进行指令打包,而是由硬件根据机器结构决定同时发射哪几条指令。
因此,编译后的代码能够被不同结构的机器正确执行•超标量多结合动态流水线调度(Dynamicpipelinescheduling)技术•通过指令相关性检测和动态分支预测等手段,投机性地不按指令顺序执行,当发生流水线阻塞时,可以到后面找指令来执行(乱序执行)•举例说明动态流水线调度技术:sub指令可提前到addu指令前执行如果不将sub调到前面,则会影响slti指令的执行,而且还会发生load-use冒险左边指令序列中,哪条指令可以提前执行?77PPT学习交流本章小结•CPU的基本功能是周而复始地执行指令,并处理异常和中断•CPU最基本的部分是数据通路和控制单元•数据通路(datapath)中包含组合逻辑元件和存储信息的状态元件•组合逻辑(如加法器、ALU、扩展器、多路选择器以及状态元件的读操作逻辑等)用于对数据进行处理;•状态元件包括触发器、寄存器和存储器等,用于对指令执行的中间状态或最终结果进行存储•控制单元(controlunit):对取出的指令进行译码,与指令执行得到的条件标志或当前机器的状态、时序信号等组合,生成对数据通路进行控制的控制信号•指令执行过程主要包括取指、译码、取数、运算、存结果。
•通常把取出并执行一条指令的时间称为指令周期,它由机器周期或直接由时钟周期组成现代计算机已经没有机器周期的概念78PPT学习交流本章小结•现代计算机的每个指令周期直接由时钟周期(节拍)组成•时钟信号是CPU中用于控制同步的信号•每条指令功能不同,因此每条指令执行时数据在数据通路中所经过的部件和路径也可能不同但是,每条指令在取指令阶段都一样•早期计算机中数据通路采用总线方式,通过CPU的内部总线把CPU中的通用寄存器、ALU、暂存器、指令寄存器等互连,有单总线、二总线和三总线结构数据通路•现代计算机的数据通路都采用流水线方式实现,将每条指令的执行过程分解成功能段相同的几个流水段,每个流水段的执行时间也被设置成完全相同•流水线方式下,同时有多条指令重叠执行,因此程序的执行时间比串行执行方式下缩短很多在有些情况下会发生流水线冒险,包括结构冒险、数据冒险和控制冒险三类•高级流水线:超流水、静态多发射(VLIW)、超标量、动态调度•编译器优化:静态调度、循环展开、…79PPT学习交流此课件下载可自行编辑修改,供参考!感谢您的支持,我们努力做得更好!80PPT学习交流。