欢迎来到课桌文档! | 帮助中心 课桌文档-建筑工程资料库
课桌文档
全部分类
  • 党建之窗>
  • 感悟体会>
  • 百家争鸣>
  • 教育整顿>
  • 文笔提升>
  • 热门分类>
  • 计划总结>
  • 致辞演讲>
  • 在线阅读>
  • ImageVerifierCode 换一换
    首页 课桌文档 > 资源分类 > DOCX文档下载  

    INTEL 体系结构 MMX技术开发者手册.docx

    • 资源ID:1414797       资源大小:148.18KB        全文页数:103页
    • 资源格式: DOCX        下载积分:5金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要5金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    INTEL 体系结构 MMX技术开发者手册.docx

    TBASEINTE1.体系结构MMXTM技术开发者手册IntelArchitectureMMXTechnologyDeveloper'sManual返回 目录 第一章手册简介 第二章处理器体系结构和流水线简介 第三章MMXTM代码开发规则 第四章MMXTM代码开发策略 第五章MMXTM的编码技术 第六章MMXTM性能监测扩展 附录AMMXTM指令集 附录BMMXTM命令和操作数限制返回AllrightreservedbyFanYipeng.TBASEINTE1.体系结构MMX技术开发者手册IntelArchitectureMMXTechnologyDeveloper'sManual第一章1.11.2第二章手册简介关于本手册参考文献处理器体系结构和流水线简介2.1超标量(奔腾系列)的流水线和动态执行(P6系歹IJ)体系结构2.1.1超标量(奔腾系列)的流水线2.1.22.22.3动态执行(P6系列)流水线高速缓存(CaChe)分支目标缓存2.3.12.4第三章3.1.相连分支写缓存CaCheMMX-代码开发规则规则列表及建议3.1.1规则3.1.23.2建议常规的优化方案3.2.1寻址方式3.2.2对齐3.2.2.1代码3.2.2.2数据3.2.3有前缀的操作码3.2.4动态执行(P6系列)处理器中的部分寄存器阻塞3.2.5有关分支预测的信息3.2.5.1动态分支预测3.2.5.2在动态执行(P6系列)处理器上的静态预测3.3调度3.3.1通用配对规则3.3.2整数配对规则3.3.2.1配对指令集3.3.2.2由于寄存器相关而不能配对的指令3.3.2.3特定配对3.3.2.4配对执行的限制3.3.3MMXTM指令配对准则3.3.3.1两个MMXTM指令的配对U管道的整数指令与V管道中的MMXTM指令配3.3.3.2对U管道的MMXTM指令与V管道中的整数指令配3.3.3.33.3.3.4调度规则3.4指令选择3.4.1使用访问内存的指令3.4.2指令长度3.5高速缓存优化3.5.1线读入顺序(命令)3.5.2在高速缓存线中的数据对齐3.5.3与分配效果3.5.3.1优化方法1:布尔3.5.3.2优化方法2:写前检查3.6内存优化3.6.1对部分内部访问3.6.2增加内存填充和视频填充的带宽3.6.2.13.6.2.2第四章4.14.24.34.3.14.44.54.64.6.14.74.8第五章5.15.25.35.45.55.65.75.85.95.105.115.12第六章6.16.1.16.26.36.3.1附录A附录B内存填充视频填充MMXTM代码开发策略制订计划哪部分代码可使用MMXTM技术改进代码是浮点型还是整型混用浮点和MMXTM代码EMMS准则CPUID的检测MMXTM技术的用法数据对齐堆栈对齐数据安排应用程序最后的调节MMXTM的编码技术无符号分组有符号分组饱和模式下的交错成组非饱和模式下的交错成组非交错分组含有一个常数的复数乘法无符号数差值的绝对值有符号数差值的绝对值绝对值有符号数截取到任意有符号区域旧GH,1.OW无符号数截取到任意无符号区域旧GH,1.OW常数生成MMXTM性能监测扩展超标量(奔腾系列)性能监测事件MMXTM指令事件说明动态执行(P6系歹IJ)性能监测事件RDPMC指令指令规则MMXTM指令集MMXTM命令和操作数限制AllrightreservedbyFanYipeng.TBASEINTE1.体系结构MMXTM技术开发者手册IntelArchitectureMMXTechnologyDeveloper'sManual返回附录AMMXTM指令集下表为MMXTM指令集一览表。下列指令助记符是助记符基本集。大多数指令都有多种形式(如PCKED-BYTE,-WoRD和-DWORD形式)。在uInteI体系结构MMXTM技术程序员参考手册”(序列码为243007)中可以找到MMXTM指令的全部信息。表A-IIntel体系结构MMXTM指令集成组算术环绕方式有符号饱和模式无符号饱和模式AdditionPADDPADDSPADDUSSubtractionPSUBPSUBSPSUBUSMultiplicationPMU1.1./HMultiply&addPMADDShiftrightArithmeticPSRAComparePCMPcC转换常规有符号饱和模式无符号饱和模式PackPACKSSPACKUSUnpackPUNPCK1./H逻辑操作成组全64位IAndPANDIAndnot|PANDNPORExclusiveorPXORIShiftIeftPS1.1.PS1.1.ShiftrightPSR1.PSR1.转移及内存操作32位64位Register-registermoveMOVDMOVQ1.oadfrommemoryMOVDMOVQrdStoretomemoryMOVDMOVQII其它EmptymultimediastateEMMS返回AllrightreservedbyFanYipeng.TBASEINTE1.体系结构MMXTM技术开发者手册IntelArchitectureMMXTechnologyDeveloper'sManual返回附录BMMXTM命令和操作数限制在此要特别感谢震源工作室(战国风云)的好朋友易春华,他在百忙之中(正在开发“孙子兵法”),热心补充了以下一段MMXTM命令和操作数限制,使本手册变得更加完整。返回AllrightreservedbyFanYipeng.TBASEINTE1.体系结构MMXTM技术开发者手册IntelArchitectureMMXTechnologyDeveloper'sManual返回第一章手册简介Imel的MMXTM技术是对Intel体系结构(IA)指令集的扩展。该技术使用了单指令多数据技术(SlMD)技术,以并行方式处理多个数据元素,从而提高了多媒体和通讯软件的运行速度。MMXTM指令集增加了57条新的操作码和一个新的64位四字数据类型。这种新的64位数据保持了可供MMXTM指令操作的成组数据值,如下图(图I-I)所示。图1-1新的数据类型另外,增加了八个新的64位MMXTM寄存器,每个寄存器可按名称MMO-MM7直接访问。图1-2显示了这八个新的64位MMXn”寄存器的布局。图12MMXTM寄存器集MMXTM技术对操作系统完全透明,并且与现有的、基于Imel体系结构的软件百分之百兼容。所有应用软件可继续在具有MMXTM技术的处理器上正常运行。有关MMXTM、数据类型和寄存器的其它信息和细节可详见INTE1.体系结构MMXTM技术程序员参考手册(IntelArChiteCtllreMMXTMTeChnOlogyDeveloper'sManUal)C)MMXTM技术提高了很多应用程序的执行性能,例如活动图像、视频会议、二维图形和三维图形。几乎每一个具有重复性和顺序性整数计算的应用程序都可以从MMXTM技术中受益。对于8位、16位和32位数据元素的处理,改善了程序的性能。一个MMXTM指令可一次操作8个字节,且在一个时钟周期内完成两条指令,也就是说,可在一个时钟周期内处理16个数据元素。另外,为增强性能,MMXTM技术为其它功能释放了额外的处理器周期。以前需要其它硬件支持的应用程序,现在仅需软件就能运行。更小的处理器占用率给更高程度的并发技术提供了条件,在当今众多的操作系统中这些并发技术得到了利用。在基于Imel的分析系统中,某些功能的性能提高了50转到400%。这种数量级的性能扩展可以在新一代处理器中得到体现。在软件内核中,其速度得到更大的提高,其幅度为原有速度的三至五倍。1.11.1关于本手册本手册面向那些熟悉Intel体系结构的软件模型和汇编语言编程的读者。本手册描述了基于IAMMXTM技术的软件编程的优化方案和使用策略。另外,它还包含了帮助你开始编写应用程序的编码技术和示例。本手册分为六章和一个附录:第一章一INTE1.体系结构MMXTM技术开发者手册介绍。第二章处理器体系结构和流水线简介。本章对奔腾处理器和动态(P6系列)处理器的体系结构和流水线进行了简要介绍。第三章一MMXTM代码开发原则。本章为帮助你开发出快速、高效的代码,提供了相关的原则和指导。另外,它还介绍了常规优化方法、指令调度和选择方案以及高速缓存和内存优化方法。第四章一MMXTM代码开发策略。本章回顾了在应用程序中创建MMXTM例程的步骤。第五章MMXTM的编码技术。本章的编码示例可以帮助你开始编写MMXTM例程。第六章一MMXTM性能监测计数器。本章详细说明了性能监测计数器和它们的功能。附录AMMXTM指令集。附录汇总了全部MMXTM指令。1.2 1.2参考文献参阅下列文档可获得有关Intel体系结构和本手册所涉及的专用技术的更多的内容: INTE1.体系结构MMXTM技术程序员参考手册IntelArchitectureMMXTechnologyProgrammersReferenceManual,IntelCorporation,OrderNumber243007. 奔腾系列处理器开发者手册Pentium®ProcessorFamilyDeveloper'sManual:Volume1,2,and3,IntelCorporation,OrderNumber2414281241429,and241430. 高能奔腾处理器开发者手册Pentium®ProProcessorFamilyDeveloper'sManual:Volume1,2,and3,OrderNumber242690,242691,and242692. INTE1.的32位处理器优化方案OptimizationsforIntel's32-bitProcessors,ApplicationNoteAP-526,OrderNumber242816返回AllrightreservedbyFanYipeng.TBASEINTE1.体系结构MMXTM技术开发者手册IntelArchitectureMMXTechnologyDeveloper'sManual返回第二章处理器体系结构和流水线简介本节简要介绍了具有MMXTM技术的奔腾处理器和动态执行(P6系列)处理器的流水线及其结构特征。在了解了代码在处理器总线上的执行过程之后,你将会了解为什么这种优化方法能够提高代码的运行速度。另外,它将帮助你调度和优化你的应用程序,以获得更高的运行效率。1.3 2.1超标量(奔腾系列)的流水线和动态执行(P6系列)体系结构1.3.1.12.1.1超标(奔腾系列)的流水线奔腾处理器是一个高级的超标量处理器。它是建筑在两个通用的整型流水线和一个可流水作业的浮点单元上的,这使处理器能够同时执行两条整型指令。一个对软件透明的动态分支预测机制能够使分支的流水线阻塞达到最小化。具有MMXTM技术的奔腾处理器将为流水线增加新的处理阶段。MMXTM流水线与整型流水线的集成方法非常相似。奔腾处理器可以在一个时钟周期内完成两条指令,一个流水线完成一条指令。第一个逻辑管道称之为“U”管道,第二个称之为“V”管道。在任何一条给定的指令译码期间,它安排的后面两条指令将被检查。并且,如果有可能,第一条指令被安排到管道执行,第二条指令被安排到“V”管道执行。如果不能,则第一条指令被安排到管道执行,“V”管道中不安排指令运行。指令在两个管道中运行与它们顺序执行所产生的效果是完全一样的。当发生管道阻塞时,后继的指令无法通过被阻塞的指令所在的任一管道中。图2-1说明了这种调度的流水线结构。图2-1MMXTM流水线结构具有MMXTM技术的奔腾处理器为整型流水线增加了一个额外的处理阶段。指令从代码的高速缓冲区中预取出来,被送入到“预取”(PF)阶段,并且在“提取”(F)阶段中进行指令的语法分析。另外,全部的前缀译码都在F阶段中进行。指令在先进先出(FIFO)的指令缓冲区中将语法分析与指令译码分开,这个缓冲区位于F阶段与译码I(Dl)阶段之间。FIFO缓冲区的空间能够将被处理的指令上升到四条指令。FIFo缓冲区是透明的,当它为空时,不增加额外的迟延。在每个时钟周期内,可将两条指令压到指令的FIFO缓冲区中(根据有效的代码字节,以及其它因素,如前缀)。然后,再将成对的指令从FIFO缓冲区中弹出来,送到Dl阶段中Q由于指令的平均执行效率为每个时钟周期内不超过两条指令,所以FIFO通常是满的。只要FIFo是满的,就可以防止在指令提取和进行语法分析时产生的阻塞。如果发生了这样的阻塞,FIFO也可以使阻塞不在管道的执行阶段上发生。但如果FIFo空,由于流水线中无指令运行,则可能会导致一个执行阻塞。较长的指令或前缀可能会在FIFo入口处产生阻塞(参见323节和3.4,2节)。下面的图表详细说明了超标量处理器中的MMXTM流水线以及流水线中发生阻塞的条件。图2-2在具有MMXTM技术的奔腾处理器中的MMXTM指令流表2-1详细说明了每类MMXTM指令的功能单元、迟延、吞吐量和执行管道。表2-1MMXTM指令和执行单元 算术逻辑单元(AW)用于执行算术和逻辑操作(即加、减、异或、与)。 乘法器单元执行全部的乘法操作。乘法要求三个时钟周期,但通过流水线安排,可在每个时钟周期内完成一条乘法操作。处理器仅有一个乘法器单元,也就是说,不能同时运行两条乘法指令。但是,乘法指令可以同其它类型的指令配对而同时运行。它们可以在U管道或V管道中运行。 移位单元执行全部的移位、成组或分组操作。由于同一时间只有一个移位器可以有效地进行移位、成组或分组操作,所以不能与其它移位单元的指令进行配对。但移位单元的指令可以和其它类型的指令配对运行。它们可以在U管道或V管道中运行。MMXTM指令只能在U管道中执行访问内存或整型寄存器,且不能与非MMXTM指令配对运行。当对一个MMXTM寄存器修改后,需经过两个时钟周期后,才能将MMXTM寄存器移到内存或整型寄存器中。有关指令配对的信息请见3.3节。其它信息和指令格式请见INTE1.体系结构MMXTM技术程序员参考手册(IntelArChiteCt1.IreMMXTMTeChrlolOgyDeVeIoPerSManual)。1.3.1.22.1.2动态执行(P6系列)流水线P6系列处理器使用动态执行结构。该结构通过硬件寄存器重命名和分支预测的方法,将乱序执行和推测执行合成在一起。这些处理器有一个有序进入的流水线,它将Intel386TM的宏指令支解成简单的微操作(或Ue)P)和一个可以处理这些微操作的乱序的超标量处理器内核。这个乱序的处理器内核包含了几条流水线,连接了整型、跳转、浮点和内存执行单元。几种不同的执行单元可以集成在同一条流水线上。例如:一个整型地址逻辑单元和浮点执行单元(加法器、乘法器和除法器)同享一个流水线。数据高速缓冲区由一个专用的读取端口和其它的存储端口交错而成。大多数简单操作(整型A1.U,浮点加法,甚至浮点乘法)可以按每时钟周期完成一至两个操作的吞吐量进行流水作业。浮点除法不可以进入流水线,长迟延操作可以和短迟延操作并行处理。P6系列的流水线由三部分构成:有序组织的前端(In-OrderIssueFrOnt-end)单元,乱序内核(Out-of-OrderCOre)单元和有序的退出(In-OrderRetiremerlt)单元。下面将详细介绍有序组织的前端单J-rO图2-3乱序内核与退出流水线由于动态执行处理器按乱序的方式执行指令,所以产生了数量充足的、可供执行的微操作,并使大多数有关性能调节方面的考虑得以实现。正确的分支预测和快速的译码是有序前端单元提高性能的核心、。有关分支预测和分支目标缓冲区的详细内容见2.3节,下面讨论译码部分。在每个时钟周期内,IDl管道阶段可以对多达3条的Intel体系结构宏指令进行译码。但是,如果指令复杂或指令长度超过了7个字节,译码器的译码指令数将有所下降。译码器可以译码:(1)每个时钟周期多达三条宏指令。(2)每个时钟周期多达六条微操作。(3)指令长度大于7的宏指令。P6系列处理器在Dl阶段上有3个译码器。第一个译码器可在每个时钟周期完成一个由四个以下微操作构成的宏指令,其它两个译码器在每个时钟周期内完成一个由一个微操作构成的宏指令。由多于4个微操作构成的指令将耗费多个时钟周期来完成译码,在使用汇编语言编程时,按4-1-1微操作序列来安排指令将增加每个时钟周期内的译码指令数。通常: 简单的寄存器寄存器格式的指令仅用一个微操作。 读取指令仅为一个微操作。 存贮指令为两个微操作。 简单的读-修改指令为两个微操作。 简单的寄存器内存格式的指令由2-3个微操作构成。 简单的读-修改-写指令由4个微操作构成。 复杂的指令通常超过4个微操作,故需耗费多个时钟周期译码。为了计算微操作,MMXTM指令都是简单指令,见Intel的32位处理器优化方案(C)PtimiZationSforIntel's32-bitProcessors,ApplicationNoteAP-526,OrderNumber242816)o附录D是一个说明Intel体系结构指令集中每一指令所用微操作数的表。一旦微操作被译码,它们从有序前端单元发送到保留(RS)站中,保留站是乱序核心管道阶段的开始部分。在RS中,微操作等待它们的操作数变为有效。一旦一条微操作的所有操作数有效,它将从RS中被送到一个执行单元。如果一个微操作在数据准备好的状态下进入RS(即为全部数据有效),那么该微操作将立即被送到一个合适的且有效的执行的单元中。在这种情况下,在RS中的微操作只耗费了很少的时钟周期,全部的执行单元聚集在RS的输出端口上,一旦微操作执行完将返回到ROB,并等待退出。在这个管道阶段中,全部数据值被回写到内存并且全部的微操作按序退出,一次三条。下图提供了有关乱序核心和按序退出管道阶段的细节。图2-4乱序内核和退出流水线表2-2动态执行(P6-系列)处理器流水线执行单元执行单元迟延/吞吐量O整型A1.U单元迟延1,吞吐量1/每周期1.EA指令迟延1.吞吐量1/每周期移位指令迟延1.吞吐量1/每周期整数乘法指令迟延4,吞吐量1/每周期浮点单元FADD指令迟延3,吞吐量1/每周期FMU1.指令迟延5,吞吐量1/2每周期FDIV单元迟延长,数据多,不可流水作业的吞吐量MMXtmA1.U单元迟延1.吞吐量1/每周期MMXTM乘法单元迟延3,吞吐量1/每周期1整型A1.U单元迟延1.吞吐量1/每周期MMXtmA1.U单元迟延1.吞吐量1/每周期MMXTM移位单元迟延1.吞吐量1/每周期2取单元命中高速缓存时,迟延3,吞吐量1/每周期43存贮地址单元迟延3,(非适用)吞吐量1/每周期34存贮数据单元迟延3.(非适用)吞吐量1/每周期注释1 .FMU1.单元在接收第一个FMU1.后,在下一时钟周期内不能接收第二个FMU1.但这并不是说只能在偶数时钟周期内执行FMU1.。2 .流水线上每两个时钟周期处理一个FMU1.。可以视为P6系列处理器只有一个32x32-乘法流水线。3 ,存贮迟延对于数据流的全局来说并不十分重要。重要的是相应操作何时结束并退出。不同的存贮情况所产生的迟延也不同。例如,在时钟周期10,对一个部分地址进行数据存贮和地址存贮时,如地址100,在时钟周期10也可以对同样地址100读取(同样大小和类型),且不被阻塞。4 .对同一个地址读和写的指令可安排在同一时钟周期。1.4 2.2高速缓存(CaChe)具有MMXTM技术的处理器的在片高速缓存子系统,是由两个16K的4路线长为32字节的关联高速缓存体构成。高速缓存具有一个回写机制和一个伪1.RU的置换算法。数据的高速缓存由八个按四字节边界交错的存贮体构成。在具有MMXTM技术的奔腾处理器上,只要引用的数据不在同一个高速缓存体上,就可以被一条读取指令和一条存贮指令同时访问。在具有MMXTM技术的奔腾处理器上,高速缓存访问失败的迟延为8个内部时钟周期。在具有MMXTM技术的动态执行处理器中,最小迟延是10个内部时钟周期。1.5 2.3分支目标缓存具有MMXTM技术的奔腾处理器和动态执行处理器在分支预测方面,除一个较小的异常处理外(本书231节中讨论),在功能上完全一样。分支目标缓冲区(BTB)存贮了预先所见的分支和它们的目标。当一个分支被预取后,BTB将目标地址直接填入到指令读取单元(IFU)。一旦分支被执行,BTB将随着目标地址而改变。使用分支目标缓存时,预先所见的分支被动态预告。分支目标缓存的预测算法包括了模式匹配和每目标多达4位的预测历史位。例如,一个具有4个迭代长度的循环将百分之百地被正确预测到。遵循下列原则将提高预测性能:编写条件分支(除循环外)可将最常执行的分支紧接在分支指令后(即失败)。另外,具有MMXTM技术的处理器有一个堆栈返回缓存(RSB,ReturnStackBuffer),可以连续地为不同地址上调用的过程正确地预测其返回地址,进一步为展开具有函数调用的循环带来了益处,并删除了某些需要in-line的过程。1.1 .1.12.3.1相连分支另外,在具有MMXTM技术的奔腾处理器上,如果两个分支指令的最后一个字节在同一个按四字节对齐的内存段内,则分支不可预测。如下图所示:图2-5相连分支的例子这种情况,发生在两个相连分支间没有间隔指令且第二个指令只有两个字节长的情况下(如+/-128字节的相对跳转指令)。为避免这种无法预测的情况,应使第二分支加长,在分支指令中用16位的相对位移代替8位的相对位移。1.6 2.4写缓存具有MMXTM技术的处理器具有4个写缓存(相对无MMXTM技术的奔腾处理器的两个写缓存)。另外,写缓存可以被U管道使用,也可以被V管道使用(相对无MMXTM技术的奔腾处理器的一个写缓存对应一个管道的情况)。通过对内存写操作进行安排调度,可以提高关键循环的性能。如果你不想看到写未命中,每组指令不能安排多于4条写指令。并在安排另外的写指令前调度其它指令。返回AllrightreservedbyFanYipeng.TBASEINTE1.体系结构MMXTM技术开发者手册IntelArchitectureMMXTechnologyDeveloper'sManual返回第三章MMXTM代码开发规则下述规则将帮助快速地开发出高效的MMXTM代码,并且这些代码可以在具有MMXTM技术的所有的处理器上运行。1.7 3.1规则列表及建议以下给出一张规则和建议的列表。1.7.1.13.1.1 规则.使用当前的编译器可以产生一个优化的应用程序。这将帮助你从一开始能产生好的代码。 避免部分寄存器的阻塞.参见第324节。 注意分支预测算法(参见第3.2.5节)。这是动态执行(P6-系列)处理器最为重要的优化方法。由于提高了分支预测能力,你的代码将耗费很少的周期来读取指令。 对代码进行调度,使其达到最大的配对可能。参见第3.3节。 确定所有的数据都已对齐。参见第4.6节。 安排好代码,使其未命中的高速缓存指令最少,并优化预取。参见第3.5节。 不要混用MMXTM指令和浮点指令。参见第4.3.1节。 避免使用除前缀为OF以外的操作码。参见第323节。 对同一个内存区域,避免在大数据量存贮数据后进行小数据量读取。或小数据量存贮后进行大数据量的读取。对于同一个内存区域,读取和存贮数据应使用同样大小的数据量;并且地址要对齐。参见第361节。.在任何时候,都要尽可能地使用OP,REG和MEM格式。这些格式可以帮助你减少占用寄存器,减少循环,避免产生不必要的读取操作。参见第3.4.1To EMMS必须放在MMXTM指令的尾部。参见第4.4节。 优化高速缓存中的数据的带宽,以符合MMXTM寄存器的大小。参见第3.6节。1.7.1.23.1.2建议 调整代码,一般情况下不使用向前条件分支,通常使用向后的条件分支。 按16字节边界条件对齐频繁执行的分支目标。 将循环展开来调度指令。 使用软件方式来安排流水线以调度迟延和功能单J-fO 必须成对使用CA1.1.和RET(return)指令。 避免使用自修改代码。 避免把数据放在代码段。 尽可能快地计算出存贮地址。 应避免使用包含三个或三个以上微操作代码或指令长度超过7个字节的指令。如果可能,使用只有一个微操作的指令。 不要使用两个8位读取指令来进行16位的读取。 在调用被调用保存(CalIeeSaVe)过程前,先清除部分寄存器的内容。 解决阻塞条件,如存贮地址,尽可能地避免可能引起阻塞的读取。 一般情况下,一个可以直接由处理器支持的N-字节的数据(8位的字节,16值的字,32位的双字,32位、64位及80位浮点数)应该对齐在下一个最高的2的乘方边界处,避免未对齐的数据。 按任意边界对齐8位数据。 在已对齐的4-字节字数据内对齐16位数据。 以4的任意倍数为边界,对齐32位数据。 以8的任意倍数为边界,对齐64位数据。 以128位为边界(即16字节的倍数),对齐80位数据。1.83.2常规的优化方案本节概括了Intel体系结构的重要的常规优化技术。1.8.1.13.2.1寻址方式在奔腾处理器上,当一个寄存器被用作基地址元素时,如果该寄存器是前一个指令的目的寄存器(假设所有的指令都已在预取队列中),将耗费一个附加的时钟周期,例如:因为奔腾处理器有两条整数流水线,如果一个寄存器是前一时钟内任意指令的目的寄存器,这个用于计算有效地址(在任一管道)的基地址或索引元素的寄存器,将耗费一个额外的时钟周期.这种效应称为地址生成互锁(AGI)。为了避免AGI,指令间应安排其它指令,并产生至少一个时钟周期的间隔来分隔这些指令O新增的MMXTM寄存器不能当作索引寄存器或基地址使用,所以AGl不适用于MMXTM寄存器为目的寄存器的情况。在AGl情况下,动态执行(P6-系歹IJ)处理器不产生额外迟延。注意一些具有隐含寄存器读/写的指令,那些通过ESP(PUSH,POP,RET,CA1.1.)而具有隐含的地址生成的指令,也会产生AGI附加迟延,如下例:PUSH和POP也对ESP进行隐含的写操作,但是如果下一条指令是通过ESP寻址时,将不产生AGI。奔腾处理器通过PUSH和POP指令中的ESP“重命名”来避免AGI的额外迟延,如下例:在具有MMXTM技术的奔腾处理器上,包含立即数和偏移量的指令可在U管道中进行配对。如果有必要使用常数,那么使用立即数通常比把常数读取到寄存器更有效。但是如果同一个立即数被多次引用,应把常数先取到一个寄存器,然后多次使用这个寄存器,这种方法将更快一些,如下例所示:由于MMXTM指令是双字节操作码(OXOF操作码映射),任何一个使用基地址或使用具有4字节位移的索引寻址来访问内存的指令,其指令长度为8字节,超过7字节的指令一次只能部分译码,应尽量避免使用(见3.4.2节)。人们经常通过将立即数值加到基地址或索引寄存器的方法来减少这种指令的长度,因此要除去立即数部分。在Intel486tm处理器中,当一个部分寄存器被写后,紧接着立即使用全部寄存器时,将产生一个附加的时钟周期。奔腾处理器在这方面无此后果,这种情况称之为部分阻塞条件,下例为奔腾处理器的例子。F列为Intel486tm处理器对应的例子。动态执行(P6-系列)处理器具有与Intel486处理器一样的阻塞类型,甚至耗费更高。在对部分寄存器写操作结束前,读操作一直被阻塞。这样的耗费可能多于一个时钟周期。为达到最佳的性能,应避免在对部分寄存器(如A1.,AH,AX)写操作后,使用包含这个部分寄存器的大寄存器。这条规则将防止动态执行处理器上的部分条件阻塞,并适用于所有大小寄存器对:有关部分寄存器阻塞的其它内容,请见第3.2.4To1.8,1.23.2.2对齐本节提供了有关奔腾和动态执行(P6-系列)处理器在代码和数据对齐方面的信息。3.2.2.1 代码奔腾和动态执行(P6-系歹IJ)处理器有一个32字节的高速缓存线。由于预取缓冲区按16字节的边界提取,代码的对齐对预取缓冲区的效率有直接影响。为使Intel体系结构系列处理器达到最佳性能,推荐如下方法: 循环的人口标号应按下一个OMODl6对齐,当它与边界的距离小于8字节时。 跟在条件转移后的标号不应被对齐。 在无条件转移或函数调用后的标号应按下一个0MOD16对齐,当它与边界的距离小于8字节时。3.2.2.2 数据在奔腾处理器上,对一个在高速缓存或总线上的未对齐数据进行访问,至少多耗费3个时钟周期。在动态执行(P6-系列)处理器上,对一个跨高速缓存线的末对齐数据进行访问,将耗费9-12个时钟周期。Intel推荐对数据按下述边界对齐,使全部处理器达以最佳执行性能。2字节数据一个2字节的对象应完全包含在按4字节对齐的字内。(即,它的二进制地址应为XXXXOO,XXXXOljXXXXIO,而不能是XXXXI1)。4字节数据4字节对象应按4字节边界对齐。8字节数据一个8字节数据(64位,如双精度实数据类型,全部MMXTM成组寄存器值)应按8字节边界对齐。1.8.1.33.2.3有前缀的操作码在奔腾处理器上,一个指令的前缀能够延缓语法分析并禁止指令配对。下表强调了FIFO中的指令前缀的影响。前缀为OF指令无附加迟延。前缀为66h,67h指令将花费一个时钟检测前缀,一个时钟计算指令长度和一个时钟进入FIFo(总共3个时钟)。它必须是第一条进入FIFO的指令,且另一条指令可与它一起被压入FIFOo具有其它前缀(非OF,66H,67H)的指令需要另一个附加时钟检测每一前缀。这些被压入FIFO的指令只能作为第一条指令。具有两个前缀的指令需用三个周期进入FIFO(两个时钟周期处理前缀,-个时钟周期处理指令)。另一个指令可以和第一条指令在同一时钟周期内一起压入FIFOo仅当FIFo保持两个以下人口时,才存在对性能的影响。只要译码器(Dl阶段)有两条指令来译码,就没有额外开销。如果以每个时钟周期两条指令的频率,将FIFe)中的指令撤出,FlFo就可迅速变空。所以,如果恰好位于一条有前缀的指令前的一些指令造成了性能损失(如,由高速缓存失误造成的阻塞引起不能配对、未对齐等等),则造成有前缀的指令的性能损失可能被掩起来。在动态执行(P6-系列)处理器中,长度上超过7字节的指令将降低每时钟周期内译码指令数(见第2.1.2节),前缀给指令增加了一到二个字节,可能使译码器受到限制。建议在任何时候都尽可能地不使用有前缀的指令,或将它们安排在因其它原因造成阻塞的指令后面。有关有前缀指令的配对详情,参见第3.3节。1.8.1.4 3.2.4动态执行(P6系列)处理器中的部分寄存器阻塞在动态执行(P6-系列)处理器中,当16或8位寄存器(如A1.,AH,AX)被写后立即执行一个32位寄存器(如EAX)读操作,那么读操作被阻塞直到写结束(最少7个时钟周期)。考虑下面的例子,第一条指令移动数值8到AX寄存器,接下来的指令访问大寄存器EAX,这个代码导致一个部分寄存器阻塞。大寄存器EAXEBXECXEDX对于全部8位和16位或32位寄存器时同样如此。小寄存器A1.AHAXB1.BHBXC1.CHCXD1.DHDX奔腾处理器不存在这种附加迟延。由于P6系列的处理器可以按乱序执行代码。因此,这种相邻的指令不会产生阻塞。下例中也包含了一个部分阻塞。另外,任何跟在被阻塞的微操作后的微操作,也将等待被阻塞的微操作通过管道后,才能获得执行的时钟周期。通常为了避免阻塞,在对16位或8位小寄存器(A1.)写操作后,不要对包含它的大寄存器进行读操作。为了使代码能够简便地应用于不同类型的处理器,在动态执行处理器中也存在读写小寄存器和大寄存器的特殊情况。下例的特殊情况中使用了XOR和SUB指令。通常,在实现这些指令序列时,总是在对寄存器写操作前,先对大寄存器清零。在这种特殊情况中,由Xe)R和SUB实现清零功能,且对EAX、EBX、ECX、EDXsEBP、ESP、EDI和ESl均有效。1.8.1.5 3.2.5有关分支预测的侑息对动态执行(P6-系歹IJ)的处理器来说,分支优化是最重要的优化方案。这些优化方案也同样有益于奔腾处理器。3.2.5.1 动态分支预测下列三个因素对动态分支预测是很重要的:1 .如果指令地址不在BTB中,预测结果为无分支的继续运行(失败)。2 .预测到的分支有一个时钟周期的迟延。3 .BTB存贮了有关分支预测历史的4位数据。第一个因素建议将分支跟在将被执行的代码后面。决不要将数据跟在分支后面。为避免因提取分支而产生一个时钟周期的迟延,可简单地在这些分支之间加入一些额外工作。这个迟延限定了循环的最小耗费为两个时钟周期。如果你的小循环不超过两个时钟周期,就将它展开。分支预测器能够正确地对常规的分文模式进行预测。比如,它可以正确地预测出一个分支在循环中仅在每一奇次迭代时发生,而在每一偶次迭代中不发生。3.2.5.2 在动态执行(P6系列)处理器上的静态预测在动

    注意事项

    本文(INTEL 体系结构 MMX技术开发者手册.docx)为本站会员(夺命阿水)主动上传,课桌文档仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知课桌文档(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-1

    经营许可证:宁B2-20210002

    宁公网安备 64010402000986号

    课桌文档
    收起
    展开