文档详情

处理器性能提高技术

jiups****uk12
实名认证
店铺
PPT
261.50KB
约51页
文档ID:57021205
处理器性能提高技术_第1页
1/51

第 9 章 处理器性能提高技术,9.1 精简指令集计算机技术 9.2 指令流水线技术 9.3 浮点数据处理单元 9.4 多媒体指令,9.1 精简指令集计算机技术,精简指令集计算机技术起源 向量巨型机CRAY-I:精简指令、面向寄存器操作 IBM 801小型机:单周期固定格式指令、高速缓冲存储器以及编译技术相结合 RISC-I:第一个精简指令集计算机处理器芯片 在高档的工程工作站得到广泛应用 最新开发的处理器普遍采用精简指令集计算机设计思想,Simple but elegant,9.1.1 复杂指令集和精简指令集,复杂指令集计算机CISC 指令系统丰富、程序设计方便、程序短小、执行性能高 处理器硬件复杂,不易使用先进的流水线技术,导致其执行速度和性能难以进一步提高 精简指令集计算机RISC 指令系统很简单,只有少数简单、常用的指令 处理器硬件简单,比较方便地实现优化,80%和20%规律,处理器性能公式,处理器执行时间=IC×CPI×T IC=程序的指令条数 CPI=执行每条指令所需的平均时钟周期数 T=每个时钟周期的时间(时钟频率的倒数) 处理器执行程序时间越少,计算机性能越高 减少时钟周期时间T,即提高时钟频率 CISC通过使用复杂指令减少IC RISC使用简单指令减少CPI,相互借鉴、共同提高,9.1.2 RISC技术的主要特点,指令条数较少 寻址方式简单 面向寄存器操作 指令格式规整 单周期执行 先进的流水线技术 编译器优化 ……,Load-Store结构,9.2 指令流水线技术,洗衣房的流水作业 三个阶段: 1. 水洗(30) 2. 烘干(40) 3. 熨烫(20),9.2.1 指令流水线,1. 流水线思想,指令流水线技术:把执行指令这个过程分解成多个子过程,执行指令的功能单元也设计成多个相应的处理单元,多个子过程在多个处理单元并行操作,同时处理多条指令 没有减少每个指令的执行时间 有助于减少整个程序(多条指令)的执行时间 指令流水线开始需要“填充时间(Fill)”,最后有一个“排空时间(Drain)”,要发挥流水线效率需要连续不断地处理指令,不要断流,时空图,指令流水线的时空图,返回,执行N条指令 串行顺序执行方式:5N 理想的流水线操作:N+4,2. 流水线中的指令相关,指令相关:指令之间存在相互依赖关系 常使下一条指令无法在设计的单位时间内执行 导致流水线的“断流”,性能降低 有三种类型的指令相关 资源冲突:当指令重叠执行过程中,硬件资源满足不了指令重叠执行的要求 数据相关:在同时执行的多条指令中,一条指令依赖前一条指令的执行结果(数据)无法得到 控制相关:流水线遇到分支指令或其他改变PC值的指令,数据旁路,分支预测,预取分支目标,9.2.2 80486的指令流水线,5级指令流水线,每级1个时钟周期  PF指令预取(prefetch)  D1指令译码1(decode stage 1) 对所有操作码和寻址方式信息进行译码  D2指令译码2(decode stage 2) 将操作码扩展为ALU控制信号,存储器地址计算  EX指令执行(execute) 完成ALU操作和Cache存取  WB回写(write back) 更新在EX步骤得到的寄存器数据和状态标志,数据旁路(直通),MOV reg1, mem1 ADD reg1, reg2 MOV mem2, reg1,数据相关,流水线停顿,MOV reg1, mem1 ADD reg2, [reg1],数据相关,预取分支目标,CMP reg, immJC target…… target:,结构相关,9.3 浮点数据处理单元,传统的处理器或简单的微控制器只有整数处理单元 有些实数经过移动小数点位置,可以用整数编码表达和处理,但可能要损失精度 实数经过一定格式转换后,完全用整数指令仿真,但处理速度难尽人意 计算机表达实数要采用浮点数据格式 x87 FPU(Floating-Point Unit) Intel 80x87浮点协处理器与80x86处理器配合 80486及以后的IA-32处理器集成浮点处理单元,9.3.1 实数编码,实数(Real Number)的科学表示法表达-123.456=-1.23456×102 包括三个部分 指数:反映数据的大小或量级 有效数字:反映数据的精度 符号位:表达数据的正负 实数是一个连续系统,理论上可以表示任意大小与精度的数据 计算机表达实数的浮点格式采用科学表达法,精度和大小有限,表达的数值离散,只是实数系统的一个子集,1. 浮点数据格式,符号(Sign) 表示数据的正负 在最高有效位(MSB) 负数=1,正数=0 指数(Exponent)=阶码 表示数据以2为底的幂 恒为整数,使用偏移码表达 有效数字(Significand) 表示数据的有效数字,反映数据的精度 一般采用规格化形式,是一个纯小数 尾数(Mantissa)、小数或分数(Fraction),示意图,浮点数据格式,返回,有效数字位数越多,表达数值的精度就越高 指数位数越多,表达数值的范围就越大,单精度浮点格式,双精度浮点格式,2. 浮点阶码,标准偏移码 N位偏移码=真值+2N 标准偏移码的真值=偏移码-2N IEEE 754标准浮点阶码 全0、全1两个编码用作特殊目的 单精度浮点数据 真值=浮点阶码-127,浮点阶码=真值+127 双精度浮点数据 真值=浮点阶码-1023 浮点阶码=真值+1023,3. 规格化浮点数,通常使用的浮点数据是规格化浮点数 有效数字表达的数值:1.XXX…XX 去除前导0 最高位恒为1,隐含一个整数1 小数点在最左端 有效数字只表达小数部分,1≤有效数值<2,〔例9-1〕把浮点格式数据转换为实数表达,某个单精度浮点数如下:BE580000H=1011 1110 0101 1000 0000 0000 0000 0000 B=1 01111100 10110000000000000000000 B 符号位为1,表示负数 指数编码是01111100,表示指数=124-127=-3 有效数字部分是1011000000000000000表示有效数=1.1011 B=1.6875 这个实数为:-1.6875×2-3=-1.6875×0.125=-0.2109375,〔例9-2〕把实数转换成浮点数据格式,100.25=0110 0100.01B=1.10010001B×26 符号位=0 指数部分是68位阶码为10000101(=6+127=133) 有效数字部分是10010001000000000000000 100.25表示成单精度浮点数为:0 10000101 10010001000000000000000B=0100 0010 1100 1000 1000 0000 0000 0000 B=42C88000H,4. 非规格化浮点数,浮点格式的规格化数表达的实数有限 下溢(Underflow):比最小数还要接近0 上溢(Overflow):比最大数还要大 单精度浮点规格化浮点数范围 ±1.18×10-38~±3.40×1038 非规格化浮点数 指数编码为全0表示-126 有效数字仅表示小数部分、但不能是全0 能够表示到±1.40×10-45,非规格化浮点数表示下溢,5. 零和无穷大,机器零:真值0的浮点数据格式 指数和有效数字的编码都是全0 符号位可以是0或1,分成+0和-0 无穷大:大于最大数的真值的规格化浮点数 指数编码为全1,有效数字编码为全0 正无穷大(+∞)和负无穷大(-∞) 非数NaN:特殊的编码,不是实数的一部分 指数编码是全1、有效数字编码不是全0,示意图,浮点数据类型,返回,9.3.2 浮点寄存器,x87 FPU浮点执行环境的寄存器 8个浮点数据寄存器 标记寄存器 状态寄存器 控制寄存器,处理器需要寄存器协助进行操作,1. 浮点数据寄存器,8个浮点数据寄存器,编号FPR0~FPR7 80位浮点寄存器存储扩展精度格式数据 采用早期处理器的堆栈结构 8个数据寄存器不是随机存取 按照“后进先出”的堆栈原则工作 并且首尾循环 浮点数据寄存器常被称为浮点数据栈 每个FPR寄存器对应一个2位标记(Tag) 8个标记组成一个16位标记寄存器,示意图,浮点数据寄存器,返回,2. 浮点状态寄存器,堆栈标志 TOP字段指明当前栈顶 SF和C1表达堆栈上溢和下溢 C3/C2/C0保存比较结果 异常标志:反映浮点运算可能出现的异常 PE精度异常 UE下溢异常 OE上溢异常 ZE被零除异常 DE非规格化操作数异常 IE非法操作异常,3. 浮点控制寄存器,异常屏蔽控制(Mask Control) 决定6种错误是否被屏蔽 x87 FPU初始化后默认屏蔽所有异常 精度控制(Precision Control) 控制浮点计算结果的精度 程序通常采用默认扩展精度 舍入控制(Rounding Control) 控制浮点计算采用的舍入类型 默认采用就近舍入(偶),示意图,浮点状态和控制寄存器,返回,浮点状态寄存器,浮点控制寄存器,舍入控制,〔例9-3〕把实数0.2转换成浮点数据格式,0.2=0.001100110011 B=1.100110011 B×2-3 符号位=0 指数部分是-3,8位阶码为01111100 有效数字是无限循环数取前23位:10011001100110011001100后面是110011B,默认最近舍入,进位1有效数字编码是:10011001100110011001101 这样,0.2表示成单精度浮点数为:0 01111100 10011001100110011001101 B=0011 1110 0100 1100 1100 1100 1100 1101 B=3E4CCCCD H,9.3.3 浮点指令及其编程,x87 FPU具有自己的指令系统 共有几十种浮点指令 指令助记符均以F开头 常用的指令类型:浮点传送指令、浮点算术运算指令、浮点超越函数指令、浮点比较指令和FPU控制指令 浮点指令的操作数寻址方式: ① 隐含寻址:在当前数据寄存器顶ST(0) ② 寄存器寻址:在指定的数据寄存器栈ST(i) ③ 存储器寻址:在主存中,1. 浮点传送指令,取数指令FLD 从存储器或浮点数据寄存器取得数据 并压入(Push)浮点寄存器栈顶st(0) 存数指令FST 浮点数据寄存器栈顶数据存入主存或另一个浮点数据寄存器,寄存器栈没有变化 存数且出栈指令FSTP 执行相应存数指令功能 并弹出(Pop)浮点寄存器栈顶,示意图,浮点数据寄存器栈的操作,返回,〔例9-4〕浮点传送程序-1,; 数据段 00000000 42C88000 3E4CCCCD f32d real4 100.25,0.2 ; 单精度浮点数 00000008 BFCB000000000000 f64d real8 -0.2109375 ; 双精度浮点数 00000010 4023BABAECD400000000 f80d real10 100.25e9 ; 扩展精度浮点数 0000001A 00000000 00000000 varf real4 ?,? 00000022 3E4CCCCD i32d dword 3e4ccccdh ; 0.2的编码,〔例9-4〕浮点传送程序-2,; 代码段finit ; 初始化FPUfld f32d ; 压入单精度浮点数f32dfld f64d ; 压入双精度浮点数f64dfld f80d; 压入扩展精度浮点数f80dfldpi ; 压入π(3.1415926…)fst varf; 将栈顶数据π传送到变量VARFfstp varf+4; 将栈顶数据π弹出到变量VARF+4,〔例9-4〕浮点传送程序-3,mov eax,dword ptr f32d+4; 取0.2(二进制编码)cmp eax,i32d ; 比较编码是否相同jz dispymov al,'N' ; 不相同,显示Njmp dispn dispy: mov al,'Y' ; 相同,显示Y dispn: call dispc,。

下载提示
相似文档
正为您匹配相似的精品文档