




已阅读5页,还剩86页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第9章处理器性能提高技术 9 1精简指令集计算机技术9 2指令流水线技术9 3浮点数据处理单元9 4多媒体指令 9 1精简指令集计算机技术 精简指令集计算机技术起源向量巨型机CRAY I 精简指令 面向寄存器操作IBM801小型机 单周期固定格式指令 高速缓冲存储器以及编译技术相结合RISC I 第一个精简指令集计算机处理器芯片在高档的工程工作站得到广泛应用最新开发的处理器普遍采用精简指令集计算机设计思想 Simplebutelegant 9 1 1复杂指令集和精简指令集 复杂指令集计算机CISC指令系统丰富 程序设计方便 程序短小 执行性能高处理器硬件复杂 不易使用先进的流水线技术 导致其执行速度和性能难以进一步提高精简指令集计算机RISC指令系统很简单 只有少数简单 常用的指令处理器硬件简单 比较方便地实现优化 80 和20 规律 处理器性能公式 处理器执行时间 IC CPI TIC 程序的指令条数CPI 执行每条指令所需的平均时钟周期数T 每个时钟周期的时间 时钟频率的倒数 处理器执行程序时间越少 计算机性能越高减少时钟周期时间T 即提高时钟频率CISC通过使用复杂指令减少ICRISC使用简单指令减少CPI 相互借鉴 共同提高 9 1 2RISC技术的主要特点 指令条数较少寻址方式简单面向寄存器操作指令格式规整单周期执行先进的流水线技术编译器优化 Load Store结构 9 2指令流水线技术 洗衣房的流水作业三个阶段 1 水洗 30 2 烘干 40 3 熨烫 20 9 2 1指令流水线 1 流水线思想 指令流水线技术 把执行指令这个过程分解成多个子过程 执行指令的功能单元也设计成多个相应的处理单元 多个子过程在多个处理单元并行操作 同时处理多条指令没有减少每个指令的执行时间有助于减少整个程序 多条指令 的执行时间指令流水线开始需要 填充时间 Fill 最后有一个 排空时间 Drain 要发挥流水线效率需要连续不断地处理指令 不要断流 时空图 指令流水线的时空图 返回 执行N条指令串行顺序执行方式 5N理想的流水线操作 N 4 2 流水线中的指令相关 指令相关 指令之间存在相互依赖关系常使下一条指令无法在设计的单位时间内执行导致流水线的 断流 性能降低有三种类型的指令相关资源冲突 当指令重叠执行过程中 硬件资源满足不了指令重叠执行的要求数据相关 在同时执行的多条指令中 一条指令依赖前一条指令的执行结果 数据 无法得到控制相关 流水线遇到分支指令或其他改变PC值的指令 数据旁路 分支预测 预取分支目标 9 2 280486的指令流水线 5级指令流水线 每级1个时钟周期 PF 指令预取 prefetch D1 指令译码1 decodestage1 对所有操作码和寻址方式信息进行译码 D2 指令译码2 decodestage2 将操作码扩展为ALU控制信号 存储器地址计算 EX 指令执行 execute 完成ALU操作和Cache存取 WB 回写 writeback 更新在EX步骤得到的寄存器数据和状态标志 数据旁路 直通 MOVreg1 mem1ADDreg1 reg2MOVmem2 reg1 数据相关 流水线停顿 MOVreg1 mem1ADDreg2 reg1 数据相关 预取分支目标 CMPreg immJCtarget target 结构相关 9 3浮点数据处理单元 传统的处理器或简单的微控制器只有整数处理单元有些实数经过移动小数点位置 可以用整数编码表达和处理 但可能要损失精度实数经过一定格式转换后 完全用整数指令仿真 但处理速度难尽人意计算机表达实数要采用浮点数据格式x87FPU Floating PointUnit Intel80 x87浮点协处理器与80 x86处理器配合80486及以后的IA 32处理器集成浮点处理单元 9 3 1实数编码 实数 RealNumber 的科学表示法表达 123 456 1 23456 102包括三个部分指数 反映数据的大小或量级有效数字 反映数据的精度符号位 表达数据的正负实数是一个连续系统 理论上可以表示任意大小与精度的数据计算机表达实数的浮点格式采用科学表达法 精度和大小有限 表达的数值离散 只是实数系统的一个子集 1 浮点数据格式 符号 Sign 表示数据的正负在最高有效位 MSB 负数 1 正数 0指数 Exponent 阶码表示数据以2为底的幂恒为整数 使用偏移码表达有效数字 Significand 表示数据的有效数字 反映数据的精度一般采用规格化形式 是一个纯小数尾数 Mantissa 小数或分数 Fraction 示意图 浮点数据格式 返回 有效数字位数越多 表达数值的精度就越高指数位数越多 表达数值的范围就越大 单精度浮点格式 双精度浮点格式 2 浮点阶码 标准偏移码N位偏移码 真值 2N标准偏移码的真值 偏移码 2NIEEE754标准浮点阶码全0 全1两个编码用作特殊目的单精度浮点数据真值 浮点阶码 127 浮点阶码 真值 127双精度浮点数据真值 浮点阶码 1023浮点阶码 真值 1023 3 规格化浮点数 通常使用的浮点数据是规格化浮点数有效数字表达的数值 1 XXX XX去除前导0最高位恒为1 隐含一个整数1小数点在最左端有效数字只表达小数部分 1 有效数值 2 例9 1 把浮点格式数据转换为实数表达 某个单精度浮点数如下 BE580000H 10111110010110000000000000000000B 10111110010110000000000000000000B符号位为1 表示负数指数编码是01111100 表示指数 124 127 3有效数字部分是1011000000000000000表示有效数 1 1011B 1 6875这个实数为 1 6875 2 3 1 6875 0 125 0 2109375 例9 2 把实数转换成浮点数据格式 100 25 01100100 01B 1 10010001B 26符号位 0指数部分是68位阶码为10000101 6 127 133 有效数字部分是10010001000000000000000100 25表示成单精度浮点数为 01000010110010001000000000000000B 01000010110010001000000000000000B 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浮点寄存器 x87FPU浮点执行环境的寄存器8个浮点数据寄存器标记寄存器状态寄存器控制寄存器 处理器需要寄存器协助进行操作 1 浮点数据寄存器 8个浮点数据寄存器 编号FPR0 FPR780位浮点寄存器存储扩展精度格式数据采用早期处理器的堆栈结构8个数据寄存器不是随机存取按照 后进先出 的堆栈原则工作并且首尾循环浮点数据寄存器常被称为浮点数据栈每个FPR寄存器对应一个2位标记 Tag 8个标记组成一个16位标记寄存器 示意图 浮点数据寄存器 返回 2 浮点状态寄存器 堆栈标志TOP字段指明当前栈顶SF和C1表达堆栈上溢和下溢C3 C2 C0保存比较结果异常标志 反映浮点运算可能出现的异常PE精度异常UE下溢异常OE上溢异常ZE被零除异常DE非规格化操作数异常IE非法操作异常 3 浮点控制寄存器 异常屏蔽控制 MaskControl 决定6种错误是否被屏蔽x87FPU初始化后默认屏蔽所有异常精度控制 PrecisionControl 控制浮点计算结果的精度程序通常采用默认扩展精度舍入控制 RoundingControl 控制浮点计算采用的舍入类型默认采用就近舍入 偶 示意图 浮点状态和控制寄存器 返回 浮点状态寄存器 浮点控制寄存器 舍入控制 例9 3 把实数0 2转换成浮点数据格式 0 2 0 001100110011B 1 100110011B 2 3符号位 0指数部分是 3 8位阶码为01111100有效数字是无限循环数取前23位 10011001100110011001100后面是110011B 默认最近舍入 进位1有效数字编码是 10011001100110011001101这样 0 2表示成单精度浮点数为 00111110010011001100110011001101B 00111110010011001100110011001101B 3E4CCCCDH 9 3 3浮点指令及其编程 x87FPU具有自己的指令系统共有几十种浮点指令指令助记符均以F开头常用的指令类型 浮点传送指令 浮点算术运算指令 浮点超越函数指令 浮点比较指令和FPU控制指令浮点指令的操作数寻址方式 隐含寻址 在当前数据寄存器顶ST 0 寄存器寻址 在指定的数据寄存器栈ST i 存储器寻址 在主存中 1 浮点传送指令 取数指令FLD从存储器或浮点数据寄存器取得数据并压入 Push 浮点寄存器栈顶st 0 存数指令FST浮点数据寄存器栈顶数据存入主存或另一个浮点数据寄存器 寄存器栈没有变化存数且出栈指令FSTP执行相应存数指令功能并弹出 Pop 浮点寄存器栈顶 示意图 浮点数据寄存器栈的操作 返回 例9 4 浮点传送程序 1 数据段0000000042C880003E4CCCCDf32dreal4100 25 0 2 单精度浮点数00000008BFCB000000000000f64dreal8 0 2109375 双精度浮点数000000104023BABAECD400000000f80dreal10100 25e9 扩展精度浮点数0000001A0000000000000000varfreal4 000000223E4CCCCDi32ddword3e4ccccdh 0 2的编码 例9 4 浮点传送程序 2 代码段finit 初始化FPUfldf32d 压入单精度浮点数f32dfldf64d 压入双精度浮点数f64dfldf80d 压入扩展精度浮点数f80dfldpi 压入 3 1415926 fstvarf 将栈顶数据 传送到变量VARFfstpvarf 4 将栈顶数据 弹出到变量VARF 4 例9 4 浮点传送程序 3 moveax dwordptrf32d 4 取0 2 二进制编码 cmpeax i32d 比较编码是否相同jzdispymoval N 不相同 显示Njmpdispndispy moval Y 相同 显示Ydispn calldispc 实数0 2在计算机中是3E4CCCCDH 2 其他浮点指令 浮点算术运算指令加FADD 减FSUB 乘FMUL 除FDIV求绝对值FABS 求平方根FSQRT等浮点超越函数指令计算正切FPTAN 正弦FSIN 余弦FCOS等求指数F2XM1 对数FYL2X等浮点比较指令检查浮点数据类型FXAM 与零比较FTST浮点数比较指令FCOM等FPU控制指令FPU初始化FINIT 浮点空操作FNOP等指令 例9 5 计算圆面积的程序 1 includefloatarea floatradius intmain floatftemp cout ftemp cout endl 该圆的面积是 t cout area ftemp endl return0 例9 5 计算圆面积的程序 2 floatarea floatradius floatftemp 局部变量用于返回值 asm 嵌入式汇编代码部分fldpi 压入栈顶fldfradius 半径值R压入栈顶fmulst 0 st 0 乘积 R Rfmul 求出面积 R2fstpftemp 弹出面积 R2 return ftemp 9 4多媒体指令 多媒体技术将多媒体信息 经计算机设备的获取 编辑 存储等处理后 以多媒体形式表现出来的技术多媒体指令利用一条多媒体指令能够同时处理多对数据实现大量数据快速并行处理关键技术 单指令多数据SIMD结构也常称为SIMD指令 丰富多彩的世界需要多媒体指令 9 4 1MMX技术 MMX MultiMediaeXtension 多媒体扩展英特尔公司的处理器增强技术新增57条多媒体指令 处理整型多媒体数据8个64位的MMX寄存器 MM0 MM7 处理紧缩整型多媒体数据的通用MMX指令针对多媒体数据处理的需要精心设计体现单指令多数据SIMD特性 MMX数据类型 MMX指令 MMX指令是一组处理紧缩整形多媒体数据的通用指令 包括一般整型指令的主要类型 可以分成如下几类 MMX传送指令 MMX算术运算指令 MMX比较指令 MMX逻辑指令 MMX移位指令和状态清除指令 MMX指令格式 MMX指令的汇编语言格式 与普通的指令格式一样 指令助记符目的操作数 源操作数 注释MMX指令的助记符除传送和清除指令外都以P开头 多数指令的助记符有一个说明数据类型的后缀B 紧缩字节 W 紧缩字 D 紧缩双字 Q 紧缩4字 如果有两个数据类型后缀 第一个字母表示源操作数的数据类型 第二个字母表示目的操作数的数据类型 MMX指令中的操作数 MMX状态清零指令没有操作数 其他所有MMX指令中的源操作数可以是MMX寄存器 也可以是存储器操作数 移位指令的源操作数还可以是立即数 表示移位次数 32位数据传送指令movd的源操作数还可以是整数寄存器 除了MMX数据传送指令外 其他MMX指令的目的操作数必须是MMX寄存器 只有MMX数据传送指令能以主存地址和整数寄存器作为目的操作数 利用MMX指令编程的步骤 在汇编语言程序中利用MMX指令编程 概括起来包含以下4步 从整数值创建紧缩整数值 把紧缩整数值加载到MMX寄存器中 对紧缩整数值执行MMX数学操作 从MMX寄存器获得结果 存放到内存位置中 MMX传送指令 1 32位紧缩数据传送指令movddestination source其中source和destination可以是MMX寄存器或者32位的存储器操作数 注意 只有该指令还可以实现MMX寄存器到32位整数寄存器 eax ebx ecx edx esi edi ebp esp 的数据传送 例如 假设var1和var2是两个32位的整型变量 var1 12345678h 执行如下指令 movdmm0 var1 mm0 0000000012345678hmovdeax mm0 eax 12345678hmovdvar2 mm0 var2 12345678h MMX传送指令 2 64位紧缩数据传送指令movqdestination source其中source和destination可以是MMX寄存器或者64位存储器操作数 注意 不能在内存位置之间传送MMX整数 MOVQ指令最常用在把紧缩整数值加载到MMX寄存器 MMX指令 3 数据段valuelbyte10 20 30 40 50 60 70 80value2word10 20 30 40value3dword10 20value4qword value5qword value6qword 代码段movqmm0 valuelmovqmm1 value2movqmm2 value3movqvalue4 mm0movqvalue5 mm1movqvalue6 mm2 MMX算术运算指令 MMX算术运算指令实现对紧缩数据的加 减和乘操作 并具有 环绕 饱和 和 乘 加 的特点 环绕运算 Wrap around 通常的算术运算 无符号数据的运算结果超过其数据类型界限时 进行正常进位借位MMX指令不能反映每个进位或借位 饱和运算 无符号饱和运算 1 7FFEH 0003H 8001H 不饱和 2 0003H FFFEH FFFFH 饱和 3 7FFEH 0003h 7FFBH 不饱和 4 0003H FFFEH 0000H 饱和 有符号饱和运算 1 7FFEH 0003H 7FFFH 饱和 2 0003H FFFEH 0001H 不饱和 3 7FFEH 0003H 7FFBH 不饱和 4 0003H FFFEH 0005H 不饱和 乘加指令 MMX加法指令 MMX减法指令 MMX加减运算指令 MMX乘法指令说明 MMX乘法使用两条指令完成乘法操作 第一条指令pmull把每对紧缩字整数值相乘 把积的低16位存放到目的寄存器中 积的高16位被丢弃 然后再把原始的操作数重新加载到两个输入寄存器中使用pmulh指令 它使每对紧缩字整数值相乘 把积的高16位存放到目的存器中 最终拥有了乘法完整结果的低位和高位 MMX乘法指令 乘 加 运算指令pmaddwd 该指令是一个专用指令pmaddwddestination source该指令完成的功能是 将源操作数的4个有符号字与目的操作数的4个有符号字分别相乘 结果产生了4个有符号双字 然后低位的2个双字相加并存入目的寄存器的低位双字 高位的2个双字相加并存入目的操作数的高位双字 MMX比较指令 MMX比较指令单独比较两个操作数的各个数据元素 字节 字或双字 如果比较结果为真 目的寄存器中相应的数据元素被置为全1 否则 被置为全0 比较指令并不设置标志位 MMX比较指令表 MMX比较指令举例 数据段valuelword10 15 30 45value2word10 10 30 30resultqword 代码段movqmm0 valuelmovqmm1 valuepcmpgtwmm0 mm1movqresult mm0 MMX逻辑运算指令 MMX移位指令 MMX移位指令用源操作数指定的数量 移位MMX寄存器中操作数的每一个数据元素 字 双字或4字 指定移位个数的源操作数可以是MMX寄存器 存储器数据和8位立即数 目的操作数必须是MMX寄存器 紧缩逻辑左移指令 psllw pslld psllqdestination sourcepsllw pslld psllq指令分别以字 双字或4字为数据元素单位 按源操作数指定的数值左移目的操作数中的每一个数据元素 低位用零填充 如果指定的移位个数大于15 对字 31 对双字 或63 对4字 则目的寄存器为全0 例如 对于mm0 0001000200030004h 执行指令psllwmm0 2 执行后mm0 00040008000C0010h 紧缩逻辑右移指令 psrlw psrld psrlqdestination sourcepsrlw psrld psrlq指令分别以字 双字或4字为数据元素单位 按源操作数指定的数值右移目的操作数中的每一个数据元素 高位用零填充 如果指定的移位个数大于15 对字 31 对双字 或63 对4字 则目的寄存器为全0 例如 对于mm0 0012003400560078h 执行指令psrlwmm0 2 执行后mm0 0004000D0015001Eh 紧缩算术右移指令 psraw psraddestination sourcepsraw psrad指令分别以字或双字为数据元素单位 按源操作数指定的数值右移目的操作数中的每一个数据元素 高位用该数据元素原来的符号位填充 如果指定的移位个数大于31 对双字 或63 对4字 则目的寄存器中各数据元素全为原符号位 例如 对于mm0 F005800300980076h 执行指令psrawmm0 2 执行后mm0 FC01E0000026001Dh 状态清除指令 状态清除指令emms没有操作数 MMX寄存器使用浮点数据寄存器64位有效数字部分 任何一条MMX指令 除了emms指令 执行后 整个浮点标记字寄存器将被置为全0 当标记为00 浮点处理单元就认为浮点数据寄存器含有有效的数据 当标记为11 则表示浮点数据寄存器没有数据 为空 因此 在处理器退出MMX指令程序段时 应该使浮点数据寄存器对浮点处理单元可用 emms指令通过设置浮点标记字为全1 由此清除其他MMX指令设置的标记状态 还FPU一个 清白 的浮点数据寄存器栈 MMX汇编语言程序设计总结 1 采用MMX指令的汇编语言程序 与普通汇编语言程序大致相同 但也要注意2个问题 确认支持MMX指令的微处理器为了采用MMX指令 程序必须首先确认处理器支持MMX指令 使eax 1 执行cpuid指令后检测edx寄存器的D23位 当D23 1就表示支持MMX指令 源程序的开始应该指定汇编Pentium和MMX指令 采用 586和 mmx伪指令即可 MMX汇编语言程序设计总结 2 不要在指令集混用MMX指令与浮点指令实际系统中 往往同时存在MMX指令程序和浮点程序 由于MMX寄存器实际上是采用浮点数据寄存器实现的 显然程序不能同时在一个寄存器中既使用浮点数据又使用紧缩数据 另外 浮点指令和MMX指令之间的相互切换又要消耗一定时间 编程原则是 MMX程序段和浮点程序段应分别独立在各自的代码段中 退出MMX指令部分前 使用emms指令清空MMX状态 否则可能引起数据溢出和产生异常 退出浮点指令部分前 应使浮点数据寄存器栈清空 任务切换时不要利用MMX或浮点数据寄存器传递参数 9 4 2SSE技术 SSE数据流SIMD扩展 StreamingSIMDExtensions 8个128位的SIMD浮点数据寄存器XMM0 XMM7一个32位的控制状态寄存器MXCSR具有70条指令的SSE指令集支持128位紧缩单精度浮点数据 MXCSR寄存器 MXCSR寄存器的低6位是6个反映是否产生SIMD浮点无效数值异常的状态标志 其含义分别是 精度错误PE 下溢错误UE 上溢错误OE 被零除错误ZE 非规格化错误DE和非法操作错误IE 某个异常状态位为1 表示发生了相应的浮点数值异常 复位后 异常状态标志所有位被清0 MXCSR寄存器的D12 D7位是6个对应SIMD浮点数值异常的屏蔽控制标志 其含义分别是 精度异常屏蔽PM 下溢异常屏蔽UM 上溢异常屏蔽OM 被零除异常屏蔽ZM 非规格化异常屏蔽DM和非法操作异常屏蔽IM 某异常屏蔽控制位置位 相应异常被屏蔽 否则不屏蔽相应异常 复位后 异常控制标志所有位被置位 表示屏蔽所有异常 MXCSR中的RC是两个舍入控制位 控制SIMD浮点数据操作的舍入原则 具有就近舍入 00 向下舍入 01 向上舍入 10 和向零舍入 11 4个类型 默认采用就近舍入 MXCSR中的刷新至零标志FZ Flush to Zero 该位为1将允许刷新至零模式 当运算结果出现下溢时 将使结果刷新至零 刷新至零模式主要是为了提高性能 该模式不与IEEE标准兼容 但是它却以损失一点
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年事业单位工勤技能-河北-河北保安员四级(中级工)历年参考题库含答案解析
- 2025年事业单位工勤技能-江西-江西机械热加工二级(技师)历年参考题库含答案解析(5套)
- 2025年事业单位工勤技能-江西-江西公路养护工五级(初级工)历年参考题库含答案解析(5套)
- 2025年事业单位工勤技能-江苏-江苏检验员一级(高级技师)历年参考题库含答案解析(5套)
- 2025年事业单位工勤技能-广西-广西环境监测工二级(技师)历年参考题库典型考点含答案解析
- 2025年事业单位工勤技能-广西-广西城管监察员二级(技师)历年参考题库典型考点含答案解析
- 2025年事业单位工勤技能-广西-广西农业技术员三级(高级工)历年参考题库典型考点含答案解析
- 2025年事业单位工勤技能-广东-广东管工(技师/高级技师)历年参考题库典型考点含答案解析
- 2025年事业单位工勤技能-广东-广东水利机械运行维护工三级(高级工)历年参考题库含答案解析
- 2025年事业单位工勤技能-广东-广东家禽饲养员五级(初级工)历年参考题库含答案解析
- 微写作 安慧作文 篇篇精彩(高考作文命题与佳作示范)第二辑
- 超超临界机组简介课件
- 《语言学教程》第 2 章 语音学与音位学1课件
- 大学辅导员常规学生工作清单一览表
- 奥维互动地图使用介绍课件
- 小学语文新课程标准最新版2022
- 疫情防控实战演练方案脚本
- 资产评估事务所投标服务方案总体工作方案评估工作关键性内容及重难点分析
- (高职)旅游景区服务与管理电子课件完整版PPT全书电子教案
- 拆卸与安装油箱加油管
- 某国有企业精细管理降本增效经验交流汇报材料企业降本增效.doc
评论
0/150
提交评论