复旦大学计算机科学和工程系

上传人:仙*** 文档编号:241998890 上传时间:2024-08-09 格式:PPT 页数:71 大小:359KB
返回 下载 相关 举报
复旦大学计算机科学和工程系_第1页
第1页 / 共71页
复旦大学计算机科学和工程系_第2页
第2页 / 共71页
复旦大学计算机科学和工程系_第3页
第3页 / 共71页
点击查看更多>>
资源描述
Click to edit Master title style,Click to edit Master text styles,Second level,Third level,Fourth level,Fifth level,*,Machine Structure,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,CPU的基本部件,计算机的基本模型有两个部件,内存,存储需要处理的数据,存储处理好的数据,存储程序,CPU,执行存储在内存中的程序,把需要处理的数据变换成所期望的新格式或内容(处理好的数据),结构比内存复杂得多,内存,CPU,8/9/2024,1,Machine Structure,CPU的基本部件,CPU究竟需要哪些部件?,CPU的工作:执行程序(program),程序:一系列的指令(instruction),指令:对一个或多个数进行某个操作,Z =X +Y,A =B *C,操作(operator),操作数(operand),让,CPU,工作的第一步:告诉它操作和操作数的信息,CPU只认识二进制数,把指令编码成二进制数,8/9/2024,2,Machine Structure,CPU的基本部件,指令编码,编码操作,常用操作个数:20-30个,用4-5位二进制数即可编码,8/9/2024,3,Machine Structure,CPU的基本部件,指令编码,编码操作数,操作数存储在内存中,内存用地址索引,用地址编码操作数?,32位平台,地址一般是32位,3操作数指令的话,地址要32*3=96位!,现代内存相对于现代CPU的速度来说也太慢了,把操作数放到快而小的存储空间,指令中只编码一个地址,8/9/2024,4,Machine Structure,CPU的基本部件,指令编码,编码操作数,操作数放在哪里?,比较小,可以用很短的地址编码,非常快,和CPU的计算速度相当,要快,就要小!,寄存器(register),8/9/2024,5,Machine Structure,CPU的基本部件,指令编码,寄存器(register),CPU中存放操作数的空间,小:一般不超过32个,快:一般一个CPU周期可访问多次(2到10多次),编码操作数,编码寄存器的地址,32个寄存器须用5位二进制编码,3个操作数需要3*5=15位二进制数,CPU,寄,存,器,内存,8/9/2024,6,Machine Structure,CPU的基本部件,指令编码,寄存器中的数从何而来?,数据总是存储在内存中的,数据必须从内存读,内存访问指令:只编码一个地址,RISC类CPU甚至只编码半个地址,一个32位地址须由两条指令装载到寄存器并拼接而成,CPU需要内存访问单元(memory unit),CPU,寄,存,器,内存,MU,8/9/2024,7,Machine Structure,CPU的基本部件,指令所指定的操作需要执行,CPU需要有执行部件,不同功能的执行部件有不同的名字,ALU:算术逻辑单元(执行整数算术逻辑运算),FPU:浮点单元(执行浮点运算),CPU,寄,存,器,MU,ALU,FPU,为何ALU/FPU要接到MU上?,CISC,类,CPU,允许指令使用内存操作数,现代,CPU,为优化执行速度而这么设计,8/9/2024,8,Machine Structure,CPU的基本部件,指令也必须从内存中读取,存储程序,取指部件(instruction fetch),CPU,寄,存,器,MU,ALU,FPU,IF,IF,要读内存,连上MU?,较老的CPU是这么设计的,较新的CPU其MU被分裂成多个部件以提高速度,8/9/2024,9,Machine Structure,CPU的基本部件,指令从哪个内存单元取?,IP/PC,Instruction Pointer,Program Counter,CPU,寄,存,器,MU,ALU,FPU,IF,PC,每次取到指令后,IP/PC自动加适当的值指向下一条指令,分支指令怎么办?,8/9/2024,10,Machine Structure,CPU的基本部件,控制器(Control Unit),控制指令执行过程,协调各部件工作,CPU,寄,存,器,MU,ALU,FPU,IF,PC,CU,CPU,核心逻辑,最难设计的部分。设计优劣直接影响CPU的性能。,8/9/2024,11,Machine Structure,CPU,指令执行过程,第一步:取指,把IP/PC的值交给MU,MU读到指令给IF,IP/PC增加,指向下一条指令,寄,存,器,MU,ALU,FPU,IF,PC,CU,.,8/9/2024,12,Machine Structure,指令执行过程,第二步:指令译码(decode),解出指令的操作和操作数,并从寄存器读出需要的操作数,寄,存,器,MU,ALU,FPU,IF,PC,CU,add r1,r2,r3,指令寄存器,8/9/2024,13,Machine Structure,指令执行过程,第三步:运算,执行指令所指定的运算,寄,存,器,MU,ALU,FPU,IF,PC,CU,add r1,r2,r3,8/9/2024,14,Machine Structure,指令执行过程,第四步:内存访问,如果是要读写内存的指令:读写内存,如果不是?,暂停等待一周期,或跳过,寄,存,器,MU,ALU,FPU,IF,PC,CU,add r1,r2,r3,8/9/2024,15,Machine Structure,指令执行过程,第五步:写回,把结果写回寄存器,寄,存,器,MU,ALU,FPU,IF,PC,CU,add r1,r2,r3,8/9/2024,16,Machine Structure,MIPS的指令执行,简化表示,IFtch,Dcd,Exec,Mem,WB,ALU,I$,Reg,D$,Reg,PC,instruction,memory,+4,rt,rs,rd,register,ALU,Data,memory,imm,1.取指,2.译码,3.执行,4.内存,5.写回,8/9/2024,17,Machine Structure,程序的执行,程序是多条指令的序列,一条接一条地执行,较老的CPU是这么设计的,但很慢,ALU,I$,Reg,D$,Reg,ALU,I$,Reg,D$,Reg,8/9/2024,18,Machine Structure,加速程序执行的方法,流水线(pipeline),流水线是工业化生产的重要概念,极大地提高了劳动生产率,也可以提高CPU部件的“劳动生产率”,流水线为什么有效?,指令执行各步骤占用的部件不同,如果各步骤串行进行,则大部分部件在大部分时间都空闲,各步骤并行,让各部件都忙起来,8/9/2024,19,Machine Structure,加速指令执行的方法,指令执行各步骤部件占用情况,第一步:取指,IP/PC,MU,IF,第二步:译码,寄存器,第三步:运算,ALU/FPU,第四步:内存访问,MU,第五步:写回,寄存器,8/9/2024,20,Machine Structure,加速指令执行的方法,一条指令执行中占用资源情况,寄,存,器,MU,ALU,FPU,IF,PC,CU,第一条指令开始译码的时候,取指的资源已经空闲,此时已经可以开始取第二条指令了,8/9/2024,21,Machine Structure,加速指令执行的方法,指令流水线,把多条指令的各执行步骤并行,ALU,I$,Reg,D$,Reg,ALU,I$,Reg,D$,Reg,ALU,I$,Reg,D$,Reg,ALU,I$,Reg,D$,Reg,8/9/2024,22,Machine Structure,加速指令执行的方法,周期(cycle),指令执行一步所需要的时间,要使用流水线技术,各不同步骤的执行时间必须相同:都是一周期,在同一个周期,有多条指令在流水线中,每条指令在不同的执行步骤,占用不同的部件,8/9/2024,23,Machine Structure,加速指令执行的方法,流水线的性能,例:执行10条指令,每指令5步骤,每步骤一周期,不用流水线:5*10=50周期,5级流水线:10+(5-1)=14周期,加速比:50/14=3.57,流水线的理论最高加速比=级数,指令数越多,加速比越高,无限多条指令,加速比=级数,一条指令?,加速比为1 不能加速!,8/9/2024,24,Machine Structure,加速指令执行的方法,流水线的性能,指令的延迟(latency),执行一条指令所需时间,流水线不能减少,单条指令,的延迟,流水线可以减少,程序,的延迟,指令的产出(throughput),单位时间内系统处理的指令数,流水线可以增加指令的产出,8/9/2024,25,Machine Structure,加速指令执行的方法,流水线问题,结构竞争:同一个周期使用相同的部件,1.内存访问竞争,ALU,I$,Reg,D$,Reg,ALU,I$,Reg,D$,Reg,ALU,I$,Reg,D$,Reg,ALU,I$,Reg,D$,Reg,8/9/2024,26,Machine Structure,加速指令执行的方法,内存访问竞争,在同一个周期,需要同时读取数据和指令,用两个不同的内存:DSP、嵌入式CPU等,用两个高速缓存(cache):通用CPU,寄,存,器,ALU,FPU,IF,PC,MU,CU,I-Cache,.,?,Load/Store,D-Cache,内存,?,MU,MU,L2 Cache,CPU控制核心设计难点,8/9/2024,27,Machine Structure,加速指令执行的方法,流水线问题,结构竞争,2.寄存器访问竞争,ALU,I$,Reg,D$,Reg,ALU,I$,Reg,D$,Reg,ALU,I$,Reg,D$,Reg,ALU,I$,Reg,D$,Reg,同时读和写,同时读两个值,8/9/2024,28,Machine Structure,加速指令执行的方法,寄存器访问竞争,给寄存器加高速缓存?,不现实,寄存器非常快,单个周期可以完成一次读和一次写,前半个周期写,后半个周期读,为何写在前?,写操作是在前面的指令执行的,寄存器很小,可以做多个读端口,寄,存,器,ALU,FPU,IF,PC,CU,I-Cache,Load/Store,D-Cache,内存,MU,L2 Cache,8/9/2024,29,Machine Structure,机器语言与汇编语言,CPU只能识别二进制数,把指令编码成二进制数,编码操作、操作数和其它信息,机器语言,8/9/2024,30,Machine Structure,机器语言与汇编语言,MIPS的机器语言例,6,5,5,5,6,5,opcode,rs,rt,rd,funct,shamt,32位,opcode:操作码 funct :操作码第二部分,rs :Source Register rt :Target Register,rd :Destination Register shamt:移位位数,8/9/2024,31,Machine Structure,机器语言与汇编语言,MIPS的机器语言例,add$8,$9,$10,opcode,=0(查表),funct,=32(查表),rs,=9(操作数1),rt,=10(操作数2),rd,=8(目的操作数),shamt,=0(非移位指令),8/9/2024,32,Machine Structure,机器语言与汇编语言,MIPS的机器语言例,add$8,$9,$10,0,9,10,8,32,0,000000,01001,01010,01000,100000,00000,二进制表示:,机器语言指令,十进制表示:,MIPS,还有其它格式的指令,8/9/2024,33,Machine Structure,机器语言与汇编语言,机器语言适合CPU使用,但不适合程序员,人类对长串的数字不敏感,但对符号敏感,用符号表示指令的各种信息,汇编语言,8/9/2024,34,Machine Structure,机器语言与汇编语言,汇编语言(assembly),机器指令与汇编指令一一对应,在机器语言需要让人看的时候,常常实际使用汇编语言,使用与机器语言相同的概念,操作,操作数,,允许使用名字来索引变量,比地址方便得多,8/9/2024,35,Machine Structure,机器语言与汇编语言,MIPS的汇编语言,add$8,$9,$10,操作 操作数(寄存器),add,sub,beq,$0$31(32,个寄存器),8/9/2024,36,Machine Structure,机器语言与汇编语言,汇编语言程序设计,用汇编语言写程序,可以有最高的效率(如果程序员合格),比之机器语言前进了一大步,被称为第二代程序设计语言,问题,机器指令相对简单,程序员希望用较复杂的表达式,与硬件相关,移植到不同的CPU非常不方便,8/9/2024,37,Machine Structure,程序语言,什么才是适合程序设计的语言?,接近人类的思维特性,看起来象人类语言,学习较容易,机器无关,同一个程序可以在不同硬件运行,无需学习机器相关内容,如果不关注最佳性能的话,程序语言,8/9/2024,38,Machine Structure,程序语言,计算机如何执行程序语言程序?,解释(interpret),逐条读取程序语句并立即执行,各种script:.bat,.vbs,.js,.py,由解释器处理(interpreter),翻译(translate),把程序语言程序翻译成机器程序,C/C+,FORTRAN,Pascal,由编译器处理(Compiler),为何一般不叫translator?,不仅仅是翻译的工作,8/9/2024,39,Machine Structure,程序语言,为何解释和编译都存在?,各有优缺点,解释,无需专门开发工具,易于扩充,灵活性大,升级解释器就可以改善所有已有程序,执行效率低,编译,执行效率高,开发较复杂,不便扩充,编译程序升级后所有现有程序必须重新编译才能得到更新,8/9/2024,40,Machine Structure,程序语言,程序语言设计原则,尽可能接近人的思维习惯,为何不用自然语言?,目前的计算机软硬件平台还不能很好地理解自然语言,程序语言是机器思维与人类思维之间的折衷,机器思维 人类思维,机器语言 汇编语言 程序语言 自然语言,8/9/2024,41,Machine Structure,程序语言,程序语言设计原则,越接近自然语言,更容易被程序员使用,更容易学习,程序设计效率高,更远离计算机设计原理,更难以被计算机有效处理,执行效率低,越接近机器语言,更容易被计算机处理,执行效率高,更难使用,程序设计效率低,8/9/2024,42,Machine Structure,程序语言,早期程序语言,强调执行效率,一次设计,多次运行,运行时间远多于设计时间,机器慢、少,任务多,程序少,一般由专业人员设计,FORTRAN,很容易被翻译成高效率的机器程序,不太容易使用,8/9/2024,43,Machine Structure,程序语言,现代程序语言,有侧重各方面因素的语言,现代计算机已经非常快,对很多任务已经可以不考虑执行效率,程序语言可以考虑其它方面的因素,设计效率,可移植性,,各种面向对象程序语言,Java,现代软件技术可以兼顾多个因素,较大范围内都适用的程序语言,及其开发工具,结合C+的一些开发工具,8/9/2024,44,Machine Structure,程序语言,程序语言对计算机设计思想的影响,程序语言出现后,迅速替代汇编语言成为程序设计的主要语言,计算机必须针对程序语言优化?!,复杂指令集计算机(CISC:Complex Instruction Set Computer),复杂的指令:尽量向程序语言的语句靠拢,完备的指令:尽量实现程序语言使用的所有语句,正交指令集,编译优化技术尚不完善,不能很好优化程序,主要用硬件设计填补程序语言和硬件间的差异,8/9/2024,45,Machine Structure,程序语言,程序语言对计算机设计思想的影响,精简指令集(RISC:Reduced Instruction Set Computer),只实现少数必须的指令,利用编译优化技术生成优化的程序,指令数量少,简单,可以编码成等长格式,可以实现得非常快,主要用编译器填补程序语言和硬件间的差异,8/9/2024,46,Machine Structure,程序语言,RISC支持者开发了大量的优化指令执行速度的技术,高速缓存,深度流水线,分支预测,寄存器重命名,超标量,乱序执行,RISC支持者开发了大量的编译优化技术,循环展开,软件流水,相关分析,CISC支持者把这些技术都用上了,“伪CISC”:不再以指令集为目标,x86依靠“事实上的工业标准”获得了空前成功,RISC vs.CISC,结果,8/9/2024,47,Machine Structure,程序语言,现代计算机开发模式,软件和硬件结合考虑,同时设计硬件和编译器,并照顾操作系统的需要,研究热点:指令级并行,程序语言改变了整个计算机产业,8/9/2024,48,Machine Structure,程序语言,程序语言类型,说明型(例:Prolog),程序员描述程序的问题本身,而不是解决问题的算法,对简单的问题:描述问题本身比算法更麻烦,对复杂的问题:现有硬件必须要用特定的算法才能解决,通用解决算法难以胜任,说明型程序语言只在较窄的范围使用,8/9/2024,49,Machine Structure,程序语言,程序语言类型,命令型,用命令序列描述程序,函数型,用嵌套的函数描述程序,面向对象型,用对象描述程序,以上都是现实世界某个侧面的抽象,广泛使用的程序语言应包含以上所有方面,C+及其派生语言,8/9/2024,50,Machine Structure,程序语言要素,语句(statement),构成程序的原子,声明语句(declarative statement),程序的规格说明:数据类型,参数,,命令语句(imperative statement),程序的算法说明,注释(comment),8/9/2024,51,Machine Structure,程序语言要素,变量(variable)与数据类型(type),变量:在程序执行过程中可以改变的量,用于存储各类信息,是对内存的抽象,用名索引,不必使用地址索引,有类型,不同类型有不同的运算,不兼容类型之间不能进行运算,例:float*string,8/9/2024,52,Machine Structure,程序语言要素,基本数据类型(primitive data type),编译器缺省支持的数据类型,int float char,某些语言还有string,数据结构(data structure),由基本数据类型组成的有结构的数据类型,数组(array),结构(structure),8/9/2024,53,Machine Structure,程序语言要素,数组(array),一系列相同类型的数据,定义,int Rooms10;,引用,Rooms0=101;,MyRoom =Rooms5;,下标(index),名,8/9/2024,54,Machine Structure,程序语言要素,结构(structure),由不同类型的数据组成的数据类型,又叫异构数组(heterogeneous array),struct TZoomInfo,int ID;,float w,h;,;,TZoomInfo MyZoom;,MyZoom.ID=110;,合理划分程序的所有数据为恰当的结构会极大简化程序设计,8/9/2024,55,Machine Structure,程序语言要素,字面量(literal),在程序语言中,其值等于其文字串的本来含义的量,与变量相对:表示变量的文字串是其名字,其值和名字无关,在程序中还可以改变,例:整数650,字符串Smith,常量(constant),给字面量的名字,const int RoomNo=517;,8/9/2024,56,Machine Structure,程序语言要素,运算,处理数据所需要的操作,四则运算+-*/,逻辑运算&|!,关系运算 =!=,位运算&|,计算机硬件特有的运算,但在很多算法中有很大的用处,所以很多程序语言都有,8/9/2024,57,Machine Structure,程序语言要素,运算,赋值运算=,把一个表达式的值赋给某个变量,注意与相等关系的区别,=才是相等关系运算,与数学上使用的=有所不同,某些语言使用不同的符号,Pascal:=,APL,8/9/2024,58,Machine Structure,程序语言要素,控制结构,程序有各种不同的执行顺序,顺序(sequence),分支(branch),循环(loop),必须有不同的控制语句(control statement),if(),else,switch(),case 1:,.,case 2:.,for(;),8/9/2024,59,Machine Structure,程序语言要素,过程(procedure)与函数(function),人类解决复杂问题的方法:分治(divide&conquer),分解成多个较小的问题,然后逐一解决,最后把小问题的解拼接成大问题的解,程序语言也必须有类似的功能,过程与函数,程序语言中非常重要的概念,极大地方便了程序设计,8/9/2024,60,Machine Structure,程序语言要素,过程与函数,把程序总的任务分解成多个小的部分,然后逐一解决每个小问题,再把小问题的解拼接起来以解决总的任务,过程与函数的区别,过程不返回值,函数要返回值,微不足道(subtle),C/C+中不加以区别,程序 过程/函数,8/9/2024,61,Machine Structure,程序语言要素,函数的要素,bool DrawCircle(int x,int y,int radix),return true;,返回值类型,名,参数(parameter),实现,8/9/2024,62,Machine Structure,程序语言要素,调用函数,if(DrawCircle(10,10,5)=false ),直接用名,返回值可直接使用,实际使用来执行函数的参数,实参(actual parameter),函数定义中的参数?,形参(formal parameter),8/9/2024,63,Machine Structure,程序语言要素,参数传递,void DrawFilledCircle(int x,int y,int radix),DrawCircle(x,y,radix);,FillCircleWithPattern(x,y,radix,pattern);,bool DrawCircle(int x,int y,int radix),x+;,是一个变量吗?,值会变吗?,8/9/2024,64,Machine Structure,程序语言要素,参数传递,参数传递的方式,按值传递(pass by value),被调用函数(callee)的参数和调用函数(caller)所用的变量是两个不同的变量,被调用函数中改变形参的值,调用函数所用实参的值是不会改变的,void DrawFilledCircle(int x,int y,int radix),DrawCircle(x,y,radix);,bool DrawCircle(int x,int y,int radix),x+;,两个不同的变量,修改后的值不会影响DrawFilledCircle中的x,8/9/2024,65,Machine Structure,程序语言要素,参数传递,如果想要把改变后的值传回来?,void GetRoomSize(int w,int h),w=5;h=10;,void main(),int w,h;,GetRoomSize(w,h);,两个不同变量!,8/9/2024,66,Machine Structure,程序语言要素,参数传递,按引用传递(pass by reference),void GetRoomSize(int&w,int&h),w=5;h=10;,void main(),int rw,rh;,GetRoomSize(rw,rh);,同一个变量,8/9/2024,67,Machine Structure,程序语言要素,参数传递,按引用传递,void GetRoomSize(int&w,int&h),w=5;h=10;,void main(),GetRoomSize(x2-x1,y2-y1);,?,编译警告:,Temporary used for parameter w in call to,这种用法原则上是错误的,如果一个函数的某个参数是引用类型,应当准备一个同类型的变量给该参数以存储函数中该变量被修改后的值,8/9/2024,68,Machine Structure,谢谢!,8/9/2024,69,Machine Structure,谢谢!,供娄浪颓蓝辣袄驹靴锯澜互慌仲写绎衰斡染圾明将呆则孰盆瘸砒腥悉漠堑脊髓灰质炎,(,讲课,2019),脊髓灰质炎,(,讲课,2019),供娄浪颓蓝辣袄驹靴锯澜互慌仲写绎衰斡染圾明将呆则孰盆瘸砒腥悉漠堑脊髓灰质炎,(,讲课,2019),脊髓灰质炎,(,讲课,2019),
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 管理文书 > 施工组织


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!