版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
0
TABASE
INTEL体系结构
MMX™技术开发者手册
IntelArchitectureMMX™TechnologyDeveloper'sManual
返回
•目录
•第一章手册简介
•第二章处理器体系结构和流水线简介
•第三章MMXTM代码开发规则
•第四章MMXTM代码开发策略
•第五章MMXTM的编码技术
•第六章MMXTM性能监测扩展
•附录AMMXTM指令集
•附录BMMXTM命令和操作数限制
返回
AllrightreservedbyFanYipenc.
0
TABASE
INTEL体系结构
MMX™技术开发者手册
IntelArchitectureMMX™TechnologyDeveloper'sManual
返回
目录
第一章手册简介
1.1关于本手册
1.2参考文献
第二章处理器体系结构和流水线简介
超标量(奔腾系列)的流水线和动态执行(P6系歹IJ)体系
2.1
结构
超标量(奔腾系列)的流水线
2.1.1
动态执行(P6系列)流水线
2.1.2
2.2高速缓存(Cache)
2.3分支目标缓存
相连分支
2.3.1
2.4写缓存Cache
第三章“MX,”代码开发规则
3.1.规则列表及建议
规则
3.1.1
建议
3.1.2
3.2常规的优化方案
寻址方式
3.2.1
对齐
3.2.2
代码
3.2.2.1
数据
3.2.2.2
有前缀的操作码
3.2.3
动态执行(P6系列)处理器中的部分寄存器阻塞
3.2.4
有关分支预测的信息
3.2.5
动态分支预测
3.2,5.1
在动态执行(P6系列)处理器上的静态预测
3.2,5.2
3.3调度
通用配对规则
3.3.1
整数配对规则
3.3.2
配对指令集
3.3,2.1
由于寄存器相关而不能配对的指令
3.3,2.2
特定配对
3.3.2.3
配对执行的限制
332.4
MMX"'指令配对准则
3.3.3
两个MMX",指令的配对
3.3.3.1
U管道的整数指令与V管道中的MMX™指令配
3.3.3.2近
U管道的MMX™指令与V管道中的整数指令配
3.3.3.3对
调度规则
3.3.3.4
3.4指令选择
使用访问内存的指令
3.4.1
指令长度
3.4.2
3.5高速缓存优化
线读入顺序(命令)
3.5.1
在高速缓存线中的数据对齐
3.5.2
与分配效果
3.5.3
优化方法1:布尔
3.5.3.1
优化方法,写前检查
3.5,3.2
3.6内存优化
对部分内部访问
3.6.1
增加内存填充和视频填充的带宽
3.6.2
内存填充
3.6,2.1
视频填充
3.62.2
第四章MMX8代码开发策略
4.1制订计划
4.2哪部分代码可使用MMXT”技术改进
4.3代码是浮点型还是整型
混用浮点和MMX,”代码
4.3.1
4.4EMMS准则
4.5CPUID的检测MMX”,技术的用法
4.6数据对齐
堆栈对齐
4.6.1
4.7数据安排
4.8应用程序最后的调节
第五章MMX,M的编码技术
5.1无符号分组
5.2有符号分组
5.3饱和模式下的交错成组
5.4非饱和模式下的交错成组
5.5非交错分组
5.6含有一个常数的复数乘法
5.7无符号数差值的绝对值
5.8有符号数差值的绝对值
5.9绝对值
5.10有符号数截取到任意有符号区域旧IGHLOW]
5.11无符号数截取到任意无符号区域[HIGH,LOW]
5.12常数生成
第六章MMX"性能监测扩展
6.1超标量(奔腾系列)性能监测事件
MMX叫旨令事件说明
6.1.1
6.2动态执行(P6系列)性能监测事件
6.3RDPMC指令
指令规则
6.3.1
附录AMMX,M指令集
附录BMMX"命令和操作数限制
返回
AllrightreservedbyFanYipeng.
0
TABASE
INTEL体系结构
MMXTM技术开发者手册
IntelArchitectureMMX™TechnologyDevelopersManual
返回
附录AMMXTM指令集
下表为MMXTM指令集一览表。下列指令助记符是
助记符基本集。大多数指令都有多种形式(如
PCKED-BYTE,-WORD和-DWORD形式)。在“Intel
体系结构MMXTM技术程序员参考手册”(序列码为
243007)中可以找到MMXTM指令的全部信息。
表A-lIntel体系结构MMX,M指令集
环绕方有符号饱和无符号饱和
成组算术
式模式模式
AdditionPADDPADDSPADDUS
SubtractionPSUBPSUBSPSUBUS
PMULL
Multiplication
/H
PMAD
Multiply&add
D
Shiftright
PSRA
Arithmetic
PCMPc
Compare
c
有符号饱和无符号饱和
转换常规
模式模式
PackPACKSSPACKUS
PUNPC
Unpack
KL/H
逻辑操作成组|全64位
AndPAND
AndnotPANDN
Q.POR
ExclusiveorPXOR
ShiftleftPSLLPSLL
ShiftrightPSRLPSRL
转移及内存操作32位64位
Register-register
MOVDMOVQ
movern
Loadfrom
MOVDMOVQ
memoryrq
StoretomemoryMOVDMOVQ11
其它
Emptymultimedia|EMMS
state
返回
AllrightreservedbyFanYipenc.
0
QB心E
INTEL体系结构
MMX™技术开发者手册
IntelArchitectureMMX™TechnologyDeveloper'sManual
返回
附录BMMXTM命令和操作数限制
在此要特别感谢震源工作室(战国风云)的好朋友
易春华,他在百忙之中(正在开发“孙子兵法”),热
心补充了以下一段MMXTM命令和操作数限制,使本手
册变得更加完整。
返回
AllrightreservedbyFanYipeng.
0
TBASE
INTEL体系结构
MMX™技术开发者手册
IntelArchitectureMMX™TechnologyDeveloper'sManual
返回
第一章手册简介
Intel的MMX™技术是对Intel体系结构(IA)指令集的扩展。该技术使用了单
指令多数据技术(SIMD)技术,以并行方式处理多个数据元素,从而提高了多媒体
和通讯软件的运行速度。MMXTM指令集增加了57条新的操作码和一个新的64
位四字数据类型。这种新的64位数据保持了可供MMXTM指令操作的成组数据值,
如下图(图1-1)所示。
0
图1-1新的数据类型
另外,增加了八个新的64位MMX,M寄存器,每个寄存器可按名称MM0-MM7直接访
问。图1-2显示了这八个新笆64位MMX™寄存器的布局。
0
图1-2MMX”,寄存器集
“MX,”技术对操作系统完全透明,并且与现有的、基于Irrel体系结构的软件百分之百
兼容。所有应用软件可继续在具有MMXTM技术的处理器上正常运行。
有关数据类型和寄存器的其它信息和细节可详见《INTEL体系结构MMX™技
术程序员参考手册》(IntelArchitectureMMX™TechnologyDeveloper'sManual)。
MMXTM技术提高了很多应用程序的执行性能,例如活动图像、视频会议、二维图形和
三维图形。几乎每一个具有重复性和顺序性整数计算的应用程序都可以从MMX"技术中受
益。对于8位、16位和32位数据元素的处理.改善了程序的性能。一个指令可一
次操作8个字节,且在一个时钟周期内完成两条指令,也就是说,可在一个时钟周期内处理
16个数据元素。
另外,为增强性能,MMX俏技术为其它功能释放了额外的处理器周期。以前需要其它
硬件支持的应用程序,现在仅需软件就能运行。更小的处理器占用率给更高程度的并发技术
提供了条件,在当今众多的操作系统中这些并发技术得到了利用。在基于Intel的分析系统
中,某些功能的性能提高了5D%到400%。这种数量级的性能扩展可以在新一代处理器中得
到体现。在软件内核中,其速度得到更大的提高,其幅度为原有速度的三至五倍。
1.11.1关于本手册
本手册面向那些熟悉Intel体系结构的软件模型和汇编语言编程的读者“
本手册描述了基于IAMMX™技术的软件编程的优化方案和使用策略。另外,它还包含
了帮助你开始编写应用程序的编码技术和示例。
本手册分为六章和一个附录:
第一章——INTEL体系结构“MX'技术开发者手册介绍,
第二章一处理器体系结构和流水线简介。本章对奔腾处理器和动态(P6系列)处理器的
体系结构和流水线进行了简要介绍。
第三章一MMXm代码开发原则。本章为帮助你开发出快速、高效的代码,提供了相
关的原则和指导。另外,它还介绍了常规优化方法、指令调度和选择方案以及高速缓存和内
存优化方法。
第四章一MMX,M代码开发策略。本章回顾了在应用程序中创建MMXW例程的步骤。
第五章——MMX”的编循技术。本章的编码示例可以帮助你开始编写MMX小例程。
第六章一MMX,”性能监测计数器。本章详细说明了性能监测计数器和它们的功能。
附录A——MMX.指令集。附录汇总了全部“MX,指令。
1.21.2参考文献
参阅下列文档可获得有关Intel体系结构和本手册所涉及的专用技术的更多的内
容:
《INTEL体系结构MMX,”技术程序员参考手册》
IntelArchitectureMMX™TechnologyProgrammersReferenceManual,Intel
Corporation,OrderNumber243007.
《奔腾系列处理器开发者手册》
Pentium®ProcessorFamilyDeveloper'sManual:Volume1.2.and3,Intel
Corporation,OrderNumber241428.241429,and241430.
《高能奔腾处理器开发者手册》
Pentium®ProProcessorFamilyDeveloper'sManual:Volume1,2,and3,Order
Number242690,242691,and242692.
《INTEL的32位处理器优化方案》
OptimizationsforInters32-bitProcessors,ApplicationNoteAP-526,OrderNumber
242816
返回
AllrightreservedbyFanYipeng.
0
TBASE
INTEL体系结构
MMX™技术开发者手册
IntelArchitectureMMX™TechnologyDeveloper'sManual
返回
第二章处理器体系结构和流水线
简介
本节简要介绍了具有MMX,M技术的奔腾处理器
和动态执行(P6系列)处理器的流水线及其结构特征。
在了解了代码在处理器总线上的执行过程之后,你将
会了解为什么这种优化方法能够提高代码的运行速
度。另外,它将帮助你调度和优化你的应用程序,以
获得更高的运行效率。
1.32.1超标量(奔腾系列)的流水线和动态执行(P6系列)
体系结构
1.3.1.12.1.1超标量(奔腾系列)的流水线
奔腾处理器是一个高级的超标量处理器。它
是建筑在两个通月的整型流水线和一个可流水作业的
浮点单元上的,这使处理器能够同时执行两条整型指
令。一个对软件透明的动态分支预测机制能够使分支
的流水线阻塞达到最小化。具有MMX『M技术的奔腾处
理器将为流水线增加新的处理阶段。MMXTM流水线与
整型流水线的集成方法非常相似。
奔腾处理器可以在一个时钟周期内完成两条指
令,一个流水线完成一条指令。第一个逻辑管道称之
为“U”管道,第二个称之为“V”管道。在任何一条
给定的指令译码期间,它安排的后面两条指令将被检
查。并且,如果有可能,第一条指令被安排到“U”
管道执行,第二条指令被安排到“V”管道执行。如
果不能,则第一条指令被安排到“U”管道执行,
“V”管道中不安排指令运行。
指令在两个管道中运行与它们顺序执行所产生的
效果是完全一样的。当发生管道阻塞时,后继的指令
无法通过被阻塞的指令所在的任一管道中。图2-1说
明了这种调度的流水线结构。
0
图2-1MMXTM流水线结构
具有MMXTM技术的奔腾处理器为整型流水
线增加了一个额外的处理阶段。指令从代码的高速缓
冲区中预取出来,被送入到“预取”(PF)阶段,并且
在“提取”(F)阶段中进行指令的语法分析。另外,全
部的前缀译码都在F阶段中进行。
指令在先进先出(FIFO)的指令缓冲区中将语法分
析与指令译码分开,这个缓冲区位于F阶段与译码
1(D1)阶段之间。FIFO缓冲区的空间能够将被处理的指
令上升到四条指令。FIFO缓冲区是透明的,当它为空
时,不增加额外的迟延。
在每个时钟周期内,可将两条指令压到指令的
FIFO缓冲区中(根据有效的代码字节,以及其它因素,
如前缀)。然后,再将成对的指令从FIFO缓冲区中弹
出来,送到D1阶段中。由于指令的平均执行效率为
每个时钟周期内不超过两条指令,所以FIFO通常是满
的。只要FIFO是满的,就可以防止在指令提取和进行
语法分析时产生的阻塞。如果发生了这样的阻塞,FIFO
也可以使阻塞不在管道的执行阶段上发生。但如果
FIFO空,由于流水线中无指令运行,则可能会导致一
个执行阻塞。较长的指令或前缀可能会在FIFO入口处
产生阻塞(参见3.2.3节和3,4,2节)。
下面的图表详细说明了超标量处理器中的
MMXTM流水线以及流水线中发生阻塞的条件。
0
图2-2在具有MMXTM技术的奔腾处理器中的
MMX'指令流
表2-1详细说明了每类MMX,M指令的功能单
元、迟延、吞吐量和执行管道。
表2-1MMXTM指令和执行单元
•算术逻辑单元(ALU)用于执行算术和逻辑操作(即
力口、减、异或、与)。
•乘法器单元执行全部的乘法操作。乘法要求三个
时钟周期,但通过流水线安排,可在每个时钟周
期内完成一条乘法操作。处理器仅有一个乘法器
单元,也就是说,不能同时运行两条乘法指令。
但是,乘法指令可以同其它类型的指令配对而同
时运行。它们可以在U管道或V管道中运行。
•移位单元执行全部的移位、成组或分组操作。由
于同一时间只有一个移位器可以有效地进行移
位、成组或分组操作,所以不能与其它移位单元
的指令进行配对。但移位单元的指令可以和其它
类型的指令配对运行。它们可以在U管道或V管
道中运行。
•MMXTM指令只能在u管道中执行访问内存或整型
寄存器,且不能与非MMXTM指令配对运行。
•当对一个MMXTM寄存器修改后,需经过两个时钟
周期后,才能将MMXTM寄存器移到内存或整型寄
存器中。
有关指令配对的信息请见3.3节。
其它信息和指令格式请见《INTEL体系结构
MMXTM技术程序员参考手册》(IntelArchitecture
MMXTMTechnologyDeveloper'sManual)。
1.3.1.22.1.2动态执行(P6系列)流水线
P6系列处理器使用动态执行结构。该结构通
过硬件寄存器重命名和分支预测的方法,将乱序执行
和推测执行合成在一起。这些处理器有一个有序进入
的流水线,它将Intel386TM的宏指令支解成简单的微
操作(或UOP)和一个可以处理这些微操作的乱序的超
标量处理器内核。这个乱序的处理器内核包含了几条
流水线,连接了整型、跳转、浮点和内存执行单元。
几种不同的执行单元可以集成在同一条流水线上。例
如:一个整型地址逻辑单元和浮点执行单元(加法器、
乘法器和除法器)同享一个流水线。数据高速缓冲区由
一个专用的读取端口和其它的存储端口交错而成。大
多数简单操作(整型ALU,浮点加法,甚至浮点乘法)
可以按每时钟周期完成一至两个操作的吞吐量进行流
水作业。浮点除法不可以进入流水线,长迟延操作可
以和短迟延操作并行处理。
P6系列的流水线由三部分构成:有序组织的前端
(In-OrderIssueFront-end)单元,乱序内核
(Out-of-OrderCore)单元和有序的退出(In-Order
Retirement)单元。下面将详细介绍有序组织的前端单
)L»o
0
图2-3乱序内核与退出流水线
由于动态执行处理器按乱序的方式执行指
令,所以产生了数量充足的、可供执行的微操作,并
使大多数有关性能调节方面的考虑得以实现。正确的
分支预测和快速的译码是有序前端单元提高性能的核
心。有关分支预测和分支目标缓冲区的详细内容见2.3
节,下面讨论译码部分。
在每个时钟周期内,ID1管道阶段可以对多达3
条的Intel体系结构宏指令进行译码。但是,如果指令
复杂或指令长度超过了7个字节,译码器的译码指令
数将有所下降。
译码器可以译码:
(1)每个时钟周期多达三条宏指令。
(2)每个时钟周期多达六条微操作。
⑶指令长度大于7的宏指令。
P6系列处理器在D1阶段上有3个译码器。第一
个译码器可在每个时钟周期完成一个由四个以下微操
作构成的宏指令,其它两个译码器在每个时钟周期内
完成一个由一个微操作构成的宏指令。由多于4个微
操作构成的指令将耗费多个时钟周期来完成译码,在
使用汇编语言编程时,按4-1-1微操作序列来安排指
令将增加每个时钟周期内的译码指令数。通常:
•简单的寄存器—寄存器格式的指令仅用一个微
操作。
.读取指令仅为一个微操作。
.存贮指令为两个微操作。
•简单的读-修改指令为两个微操作。
•简单的寄存器——内存格式的指令由2-3个微操
作构成。
.简单的读-修改-写指令由4个微操作构成。
•复杂的指令通常超过4个微操作,故需耗费多个
时钟周期译码。
为了计算微操作,MMXTM指令都是简单指
令,见《Intel的32位处理器优化方案》(Optimizations
forIntel's32-bitProcessors,ApplicationNoteAP-526,
附录是一个说明体
OrderNumber242816)ODIntel
系结构指令集中每一指令所用微操作数的表。
一旦微操作被译码,它们从有序前端单元发送到
保留(RS)站中,保留站是乱序核心管道阶段的开始部
分。在RS中,微操作等待它们的操作数变为有效。
一旦一条微操作的所有操作数有效,它将从RS中被
送到一个执行单元。如果一个微操作在数据准备好的
状态下进入RS(即为全部数据有效),那么该微操作将
立即被送到一个合适的且有效的执行的单元中。在这
种情况下,在RS中的微操作只耗费了很少的时钟周
期,全部的执行单元聚集在RS的输出端口上,一旦
微操作执行完将返回到ROB,并等待退出。在这个管
道阶段中,全部数据值被回写到内存并且全部的微操
作按序退出,一次三条。下图提供了有关乱序核心和
按序退出管道阶段的细节。
0
图2-4乱序内核和退出流水线
表2-2动态执行(P6-系列)处理器流水线执行单
元
0整型ALU单元迟延L吞吐量1/每周期
LEA指令迟延L吞吐量1/每周期
移位指令迟延L吞吐量1/每周期
整数乘法指令迟延4,吞吐量1/每周期
浮点单元
FADD指令迟延3,吞吐量1/每周期
FMUL指令迟延5,吞吐量1/2每周期「
FDIV单元迟延长,数据多,不可流水作业的吞吐星
MMX™ALU单元迟延L吞吐量1/每周期
MMX”乘法单元迟延3,吞吐量1/每周期
1整型ALU单元迟延L吞吐量1/每周期
MMX™ALU单元迟延1,吞吐量1/每周期
MMX"移位单元迟延L吞吐量1/每周期
2取单元命中高速缓存时,迟延3,吞吐量1/每周期4
3存贮地址单元迟延3.(非适用)吞吐量1/每周期3
4存贮数据单元迟延3,(非适用)吞吐量1/每周期
注释
1.FMUL单元在接收第一个FMUL后,在下一时钟
周期内不能接收第二个FMUL,但这并不是说只能在
偶数时钟周期内执行FMUL。
2.流水线上每两个时钟周期处理一个FMUL。可以
视为P6系列处理器只有一个32x32。乘法流水线。
3.存贮迟延对于数据流的全局来说并不十分重
要。重要的是相应操作何时结束并退出。不同的存贮
情况所产生的迟延也不同。例如,在时钟周期10,对
一个部分地址进行数据存贮和地址存贮时,如地址
100,在时钟周期10也可以对同样地址100读取(同样
大小和类型),且不被阻塞。
4.对同一个地址读和写的指令可安排在同一时钟
周期。
1.42.2高速缓存(Cache)
具有MMXTM技术的处理器的在片高速缓存
子系统,是由两个16K的4路线长为32字节的关联
高速缓存体构成。高速缓存具有一个回写机制和一个
伪LRU的置换算法。数据的高速缓存由八个按四字节
边界交错的存贮体构成。
在具有MMXTM技术的奔腾处理器上,只要引用的
数据不在同一个高速缓存体上,就可以被一条读取指
令和一条存贮指令同时访问。在具有MMXm技术的奔
腾处理器上,高速缓存访问失败的迟延为8个内部时
钟周期。在具有MMXTM技术的动态执行处理器中,最
小迟延是10个内部时钟周期。
1.52.3分支目标缓存
具有MMXTM技术的奔腾处理器和动态执行
处理器在分支预测方面,除一个较小的异常处理外(本
书231节中讨论),在功能上完全一样。
分支目标缓冲区(BTB)存贮了预先所见的分支和
它们的目标。当一个分支被预取后,BTB将目标地址
直接填入到指令读取单元(IFU)。一旦分支被执行,BTB
将随着目标地址而改变。使用分支目标缓存时,预先
所见的分支被动态预告。分支目标缓存的预测算法包
括了模式匹配和每目标多达4位的预测历史位。例如,
一个具有4个迭代长度的循环将百分之百地被正确预
测到。遵循下列原则将提高预测性能:
编写条件分支(除循环外)可将最常执行的分支紧
接在分支指令后(即失败)。
另外,具有MMXTM技术的处理器有一个堆栈返回
缓存(RSB,ReturnStackBuffer),可以连续地为不同地
址上调用的过程正确地预测其返回地址,进一步为展
开具有函数调用的循环带来了益处,并删除了某些需
要in-line的过程。
1.5.1.12.3.1相连分支
另外,在具有MMXTM技术的奔腾处理器上,
如果两个分支指令的最后一个字节在同一个按四字节
对齐的内存段内,则分支不可预测。如下图所示:
0
图2-5相连分支的例子
这种情况,发生在两个相连分支间没有间隔
指令且第二个指令只有两个字节长的情况下(如
+/-128字节的相对跳转指令)。
为避免这种无法预测的情况,应使第二分支加长,
在分支指令中用16位的相对位移代替8位的相对位
移。
1.62.4写缓存
具有MMXTM技术的处理器具有4个写缓存
(相对无MMXTM技术的奔腾处理器的两个写缓存)。另
外,写缓存可以被U管道使用,也可以被V管道使用
(相对无MMXTM技术的奔腾处理器的一个写缓存对应
一个管道的情况)。通过对内存写操作进行安排调度,
可以提高关键循环的性能。如果你不想看到写未命中,
每组指令不能安排多于4条写指令。并在安排另外的
写指令前调度苴它指令。
返回
AllrightreservedbyFanYipenc.
0
TABASE
INTEL体系结构
MMX™技术开发者手册
IntelArchitectureMMX™TechnologyDeveloper'sManual
返回
第三章MMXTM代码开发规则
下述规则将帮助快速地开发出高效的MMXTM代
码,并且这些代码可以在具有MMX,M技术的所有的处
理器上运行。
1.73.1规则列表及建议
以下给出一张规则和建议的列表。
1.7.1.13.1.1规则
•使用当前的编译器可以产生一个优化的应用程
序。这将帮助你从一开始能产生好的代码。
•避免部分寄存器的阻塞.参见第324节。
•注意分支预测算法(参见第3.2.5节)。这是动态执
行(P6-系列)处理器最为重要的优化方法。由于提
高了分支预测能力,你的代码将耗费很少的周期
来读取指令。
♦对代码进行调度,使其达到最大的配对可能。参
见第3.3节。
•确定所有的数据都已对齐。参见第4.6节。
・安排好代码,使其未命中的高速缓存指令最少,
并优化预取。参见第3.5节。
・不要混用MMXTM指令和浮点指令。参见第4.3.1
节。
•避免使用除前缀为OF以外的操作码。参见第323
节。
•对同一个内存区域,避免在大数据量存贮数据后
进行小数据量读取。或小数据量存贮后进行大数
据量的读取。对于同一个内存区域,读取和存贮
数据应使用同样大小的数据量;并且地址要对齐。
参见第3.6.1节。
.在任何时候,都要尽可能地使用OP,REG和MEM
格式。这些格式可以帮助你减少占用寄存器,减
少循环,避免产生不必要的读取操作。参见第
3.4.1To
•EMMS必须放在MMXTM指令的尾部。参见第4.4
节。
•优化高速缓存中的数据的带宽,以符合MMXTM寄
存器的大小。参见第3.6节。
1.7.1.23.1.2建议
•调整代码,一般情况下不使用向前条件分支,通
常使用向后的条件分支。
•按16字节边界条件对齐频繁执行的分支目标。
•将循环展开来调度指令。
•使用软件方式来安排流水线以调度迟延和功能单
7Co
•必须成对使月CALL和RET(retum)指令。
•避免使用自修改代码。
•避免把数据放在代码段。
•尽可能快地计算出存贮地址。
•应避免使用包含三个或三个以上微操作代码或指
令长度超过7个字节的指令。如果可能,使用只
有一个微操作的指令。
•不要使用两个8位读取指令来进行16位的读取。
•在调用被调月保存(callee—save)过程前,先清除
部分寄存器的内容。
•解决阻塞条件,如存贮地址,尽可能地避免可能
引起阻塞的读取。
一般情况下,一个可以直接由处理器支持的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,指令间应安排其
它指令,并产生至少一个时钟周期的间隔来分隔这些
指令。
新增的MMXTM寄存器不能当作索引寄存器或基
地址使用,所以AGI不适用于MMXTM寄存器为目的寄
存器的情况。
在AGI情况下,动态执行(P6-系列)处理器不产生
额外迟延。
注意一些具有隐含寄存器读/写的指令,那些通过
ESP(PUSH,POP,RET,CALL)而具有隐含的地址生成
的指令,也会产生AGI附加迟延,如下例:
PUSH和POP也对ESP进行隐含的写操作,
但是如果下一条指令是通过ESP寻址时,将不产生
AGI。奔腾处理器通过PUSH和POP指令中的ESP“重
命名”来避免AGI的额外迟延,如下例:
在具有MMXTM技术的奔腾处理器上,包含立
即数和偏移量的指令可在U管道中进行配对。如果有
必要使用常数,那么使用立即数通常比把常数读取到
寄存器更有效。但是如果同一个立即数被多次引用,
应把常数先取到一个寄存器,然后多次使用这个寄存
器,这种方法将更快一些,如下例所示:
由于MMXTM指令是双字节操作码(OxOF操作
码映射),任何一个使用基地址或使用具有4字节位移
的索引寻址来访问内存的指令,其指令长度为8字节,
超过7字节的指令一次只能部分译码,应尽量避免使
用(见3.4.2节)。人们经常通过将立即数值加到基地址
或索引寄存器的方法来减少这种指令的长度,因此要
除去立即数部分。
在Intel486TM处理器中,当一个部分寄存器被写
后,紧接着立即使用全部寄存器时,将产生一个附加
的时钟周期。奔腾处理器在这方面无此后果,这种情
况称之为部分阻塞条件,下例为奔腾处理器的例子。
下列为Intel486TM处理器对应的例子。
动态执行(P6-系列)处理器具有与Intel486™
处理器一样的阻塞类型,甚至耗费更高。在对部分寄
存器写操作结束前,读操作一直被阻塞。这样的耗费
可能多于一个时钟周期。
为达到最佳的性能,应避免在对部分寄存器(如
AL,AH,AX)写操作后,使用包含这个部分寄存器的
大寄存器。这条规则将防止动态执行处理器上的部分
条件阻塞,并适月于所有大小寄存器对:
有关部分寄存器阻塞的其它内容,请见第
324节。
1.8.1.23.2.2对齐
本节提供了有关奔腾和动态执行(P6-系列)
处理器在代码和数据对齐方面的信息。
3.2.2.1代码
奔腾和动态执行(P6-系列)处理器有一个32
字节的高速缓存线。由于预取缓冲区按16字节的边界
提取,代码的对齐对预取缓冲区的效率有直接影响。
为使Intel体系结构系列处理器达到最佳性能,推
荐如下方法:
•循环的人口标号应按下一个0MOD16对齐,当
它与边界的距离小于8字节时。
•跟在条件转移后的标号不应被对齐。
•在无条件转移或函数调用后的标号应按下一个0
MOD16对齐,当它与边界的距离小于8字节时。
3.2.2.2数据
在奔腾处理器上,对一个在高速缓存或总线上的
未对齐数据进行访问,至少多耗费3个时钟周期。在
动态执行(P6-系列)处理器上,对一个跨高速缓存线的
末对齐数据进行访问,将耗费9-12个时钟周期。Intel
推荐对数据按下述边界对齐,使全部处理器达以最佳
执行性能。
2字节数据
一个2字节的对象应完全包含在按4字节对齐的
字内。(即,它的二进制地址应为XXXXOO,XXXX01,
XXXXIO,而不能是XXXX11)。
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保持两个以下人口时,才存在对性
能的影响。只要译码器(D1阶段)有两条指令来译码,
就没有额外开销。如果以每个时钟周期两条指令的频
率,将FIFO中的指令撤出,FIFO就可迅速变空。所以,
如果恰好位于一条有前缀的指令前的一些指令造成了
性能损失(如,由高速缓存失误造成的阻塞引起不能配
对、未对齐等等),则造成有前缀的指令的性能损失可
能被掩起来。
在动态执行(P6-系列)处理器中,长度上超过7字
节的指令将降低每时钟周期内译码指令数(见第2.1.2
节),前缀给指令增加了一到二个字节,可能使译码器
受到限制。
建议在任何时候都尽可能地不使用有前缀的指
令,或将它们安排在因其它原因造成阻塞的指令后面。
有关有前缀指令的配对详情,参见第3.3节。
1.8.1.43.2.4动态执行(P6系列)处理器中的部分寄存器阻塞
在动态执行(P6-系列)处理器中,当16或8
位寄存器(如AL,AH,AX)被写后立即执行一个32位
寄存器(如EAX)读操作,那么读操作被阻塞直到写结束
(最少7个时钟周期)。考虑下面的例子,第一条指令
移动数值8到AX寄存器,接下来的指令访问大寄存
器EAX,这个代码导致一个部分寄存器阻塞。
对于全部8位和16位或32位寄存器时同样
如此。
小寄存器存,寄
ALAH
EAX
AX
BLBH
EBX
BX
CLCH
ECX
CX
DLDH
EDX
DX
奔腾处理器不存在这种附加迟延。
由于P6系列的处理器可以按乱序执行代码。因
此,这种相邻的指令不会产生阻塞。下例中也包含了
一个部分阻塞。
另外,任何跟在被阻塞的微操作后的微操作,
也将等待被阻塞的微操作通过管道后,才能获得执行
的时钟周期。通常为了避免阻塞,在对16位或8位
小寄存器(AL)写操作后,不要对包含它的大寄存器进
行读操作。
为了使代码能够简便地应用于不同类型的处理
器,在动态执行处理器中也存在读写小寄存器和大寄
存器的特殊情况。下例的特殊情况中使用了XOR和
SUB指令。
通常,在实现这些指令序列时,总是在对寄
存器写操作前,先对大寄存器清零。在这种特殊情况
中,由XOR和SUB实现清零功能,且对EAX、EBX、
ECX、EDX、EBP、ESP、EDI和ESI均有效。
1.8.1.53.2.5有关分支预测的信息
对动态执行(P6-系列)的处理器来说,分支优
化是最重要的优化方案。这些优化方案也同样有益于
奔腾处理器。
3.2.5.1动态分支预测
下列三个因素对动态分支预测是很重要的:
1.如果指令地址不在BTB中,预测结果为无分支的
继续运行(失败)。
2.预测到的分支有一个时钟周期的迟延。
3.BTB存贮了有关分支预测历史的4位数据。
第一个因素建议将分支跟在将被执行的代码
后面。决不要将数据跟在分支后面。
为避免因提取分支而产生一个时钟周期的迟延,
可简单地在这些分支之间加入一些额外工作。这个迟
延限定了循环的最小耗费为两个时钟周期。如果你的
小循环不超过两个时钟周期,就将它展开。
分支预测器能够正确地对常规的分文模式进行预
测。比如,它可以正确地预测出一个分支在循环中仅
在每一奇次迭代时发生,而在每一偶次迭代中不发生。
3.2.5.2在动态执行(P6系列)处理器上的静态预测
在动态执行处理器中,对那些在BTB中没有历史
数据的分支将使月静态预测算法进行预测,静态预测
算法如下:
•预测无条件转移分支。
•预测向后的条件分支,本规则对循环适用。
•预测向前的条件分支。
静态预测的额外开销为6个时钟周期。无预
测或错误预测的额外开销大于12个时钟周期。下面的
图表显示了静态预测的算法。
0
图3-2动态执行(P6-系列)的静态分支预测算法
下例说明了静态预测算法的基本规则。
在这个例子中,在第一次通过时,向后分支
不在BTB中,因此BTB未进行预测,但是静态预测器
将预测到这个分支,所以不产生预测失误。
本代码段的第一个分支指令(〕CBegin)是一
个向前条件分支。第一次通过时,它不在BTB中,但
静态预测器将预测到该分支。
第一次通过时BTB发现CallConvert指令,但在
BTB中没有进行预测。但静态预测算法能预测并提取
一个该调用,这对一个无条件分支来说是正确的结果。
这些例子中,条件分支只有两种情况:提取的和
未提取的。间接分支,如开关语句,可计算的GOTO
或通过指针的调月,都可跳到一个特定的地址单元上。
如果分支有一个偏离的目标地址(即分支90%都转向同
一地址),那么BTB将在大多数情况能够精确预测到。
但是如果目标地址是不可预测的,性能将迅速下降,
用可预测的条件分支替换间接分支可以改善性能。
1.93.3调度
调度或配对是各代处理器都应使用的一种优
化性能的方法。下面是一个在奔腾和P6系列处理器
上,用以提高代码速度的配对和调度表。在某些情况
下,对特定的处理器具有达到最佳性能的变通方案。
这些变通的方法因应用程序的特性而不同。在超标量
的奔腾处理器中,指令的顺序是使处理器达到最高性
能的非常重要的因素。
对指令顺序的重新安排增加了将两条指令安排成
同时运行的可能性。与数据相关的指令应被至少一条
其它指令所分开。
本书描述了你需要了解的MMXTM指令与整数指
令配对的原则。对下表列出的每一种情况,都在小节
中说明了与之相配的原则。
进行配对所需了解的几个规则:
•通用配对规则:规则仅与机器状态有关,与指定
的操作码无关。对整数和浮点同样有效。例如,
单步指令禁止指令配对。
•整数配对规则:对整数指令配对的规则。
•对MMXTM指令配对的规则:由于只存在一个乘法
器单元,规则允许两个MMXTM指令同时执行。
•MMXTM指令与整数指令配对规则:对一条MMX™
指令和一条整数指令配对的规则。
注意浮点指令不可以与MMX'指令配对。
1.9.1.13.3.1通用配对规则
关于奔腾处理器通用配对规则,请参见《对
Intel32位处理器的优化》应用部分AP—526(序号
242816),具有MMXTM技术的奔腾处理器降低了一些
通用配对的规则要求:
•如果两条指令中存在一条长度大于7字节的指
令,奔腾处理器不对它们进行配对。具有MMXTM
技术的奔腾处理器,不对第一条指令大于11字节
或第二条指令大于7字节的指令进行配对,前缀
不计算在内。
.有前缀的指令可在U管道配对,前缀为OFH,66H
或67H的指令也可在V管道中配对。
1.9.1.23.3.2整数配对规则
当下列两种情况发生时不能进行配对:
1.后两条指令是不可配对指令(见下表可配对指令
汇总:并参见《对Intel32位处理器的优化》应用
部分AP-526,附录A包含了一个指令配对特性
的完整列表)。通常,大多数简单的ALU指令是可
配对的。
2.后两条指令属于寄存器争用(显式或隐式的)的一
些类型。在较少的情况下,寄存器争用的指令也
可配对。这种情况在3.323中解释。
表3-1整数指令配对
在u管道中可配对指令在V管道中可配对指令
movalumov
pushralur.ipushr
r,rr.ir,r
movalumov
pushialum.jpush1
r.mm.ir,m
movalumovalu
Poprpopr
m,reax,im,reax.i
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 阿克苏地区农村信用社联合社秋季校园招聘笔试备考题库(浓缩500题)含答案详解(b卷)
- 四川省农村信用社联合社秋季校园招聘笔试备考题库(浓缩500题)附答案详解(夺分金卷)
- 宜春市农村信用社联合社秋季校园招聘笔试备考题库(浓缩500题)有答案详解
- 甘南州农村信用社联合社秋季校园招聘笔试备考题库(浓缩500题)含答案详解(培优a卷)
- 2026年漳州市农村信用社联合社秋季校园招聘笔试备考题库(浓缩500题)附答案详解(综合题)
- 庆阳市农村信用社联合社秋季校园招聘笔试备考题库(浓缩500题)附答案详解(培优a卷)
- 2026年淮南市农村信用社联合社秋季校园招聘笔试备考题库(浓缩500题)(含答案详解)
- 2025年低空经济「超光速」飞行器关键技术突破与产业化路径报告
- 低空经济税收优惠政策实施效果2025年分析与产业转型升级策略报告
- 2026年武威市农村信用社联合社秋季校园招聘笔试备考题库(浓缩500题)附答案详解(轻巧夺冠)
- 患者知信行健康教育
- 恶性肿瘤病人的病例护理查房
- 护士条例培训课件
- 2025至2030全球及中国半导体中的静电卡盘行业产业运行态势及投资规划深度研究报告
- 水厂安全生产培训课件
- DB11∕T 1448-2024 城市轨道交通工程资料管理规程
- 品种授权协议书范本
- 律师职业道德专题课件
- 2025版《农机专业合作社事故隐患内部报告奖励制度》修订版
- 壳牌加油站建设项目方案投标文件(技术方案)
- “新能源汽车”重点专项2024年度项目申报指南
评论
0/150
提交评论