INTEL 體系結(jié)構(gòu) MMX技術(shù)開發(fā)者手冊_第1頁
INTEL 體系結(jié)構(gòu) MMX技術(shù)開發(fā)者手冊_第2頁
INTEL 體系結(jié)構(gòu) MMX技術(shù)開發(fā)者手冊_第3頁
INTEL 體系結(jié)構(gòu) MMX技術(shù)開發(fā)者手冊_第4頁
INTEL 體系結(jié)構(gòu) MMX技術(shù)開發(fā)者手冊_第5頁
已閱讀5頁,還剩101頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領

文檔簡介

0

TABASE

INTEL體系結(jié)構(gòu)

MMX?技術(shù)開發(fā)者手冊

IntelArchitectureMMX?TechnologyDeveloper'sManual

返回

?目錄

?第一章手冊簡介

?第二章處理器體系結(jié)構(gòu)和流水線簡介

?第三章MMXTM代碼開發(fā)規(guī)則

?第四章MMXTM代碼開發(fā)策略

?第五章MMXTM的編碼技術(shù)

?第六章MMXTM性能監(jiān)測擴展

?附錄AMMXTM指令集

?附錄BMMXTM命令和操作數(shù)限制

返回

AllrightreservedbyFanYipenc.

0

TABASE

INTEL體系結(jié)構(gòu)

MMX?技術(shù)開發(fā)者手冊

IntelArchitectureMMX?TechnologyDeveloper'sManual

返回

目錄

第一章手冊簡介

1.1關于本手冊

1.2參考文獻

第二章處理器體系結(jié)構(gòu)和流水線簡介

超標量(奔騰系列)的流水線和動態(tài)執(zhí)行(P6系歹IJ)體系

2.1

結(jié)構(gòu)

超標量(奔騰系列)的流水線

2.1.1

動態(tài)執(zhí)行(P6系列)流水線

2.1.2

2.2高速緩存(Cache)

2.3分支目標緩存

相連分支

2.3.1

2.4寫緩存Cache

第三章“MX,”代碼開發(fā)規(guī)則

3.1.規(guī)則列表及建議

規(guī)則

3.1.1

建議

3.1.2

3.2常規(guī)的優(yōu)化方案

尋址方式

3.2.1

對齊

3.2.2

代碼

3.2.2.1

數(shù)據(jù)

3.2.2.2

有前綴的操作碼

3.2.3

動態(tài)執(zhí)行(P6系列)處理器中的部分寄存器阻塞

3.2.4

有關分支預測的信息

3.2.5

動態(tài)分支預測

3.2,5.1

在動態(tài)執(zhí)行(P6系列)處理器上的靜態(tài)預測

3.2,5.2

3.3調(diào)度

通用配對規(guī)則

3.3.1

整數(shù)配對規(guī)則

3.3.2

配對指令集

3.3,2.1

由于寄存器相關而不能配對的指令

3.3,2.2

特定配對

3.3.2.3

配對執(zhí)行的限制

332.4

MMX"'指令配對準則

3.3.3

兩個MMX",指令的配對

3.3.3.1

U管道的整數(shù)指令與V管道中的MMX?指令配

3.3.3.2近

U管道的MMX?指令與V管道中的整數(shù)指令配

3.3.3.3對

調(diào)度規(guī)則

3.3.3.4

3.4指令選擇

使用訪問內(nèi)存的指令

3.4.1

指令長度

3.4.2

3.5高速緩存優(yōu)化

線讀入順序(命令)

3.5.1

在高速緩存線中的數(shù)據(jù)對齊

3.5.2

與分配效果

3.5.3

優(yōu)化方法1:布爾

3.5.3.1

優(yōu)化方法,寫前檢查

3.5,3.2

3.6內(nèi)存優(yōu)化

對部分內(nèi)部訪問

3.6.1

增加內(nèi)存填充和視頻填充的帶寬

3.6.2

內(nèi)存填充

3.6,2.1

視頻填充

3.62.2

第四章MMX8代碼開發(fā)策略

4.1制訂計劃

4.2哪部分代碼可使用MMXT”技術(shù)改進

4.3代碼是浮點型還是整型

混用浮點和MMX,”代碼

4.3.1

4.4EMMS準則

4.5CPUID的檢測MMX”,技術(shù)的用法

4.6數(shù)據(jù)對齊

堆棧對齊

4.6.1

4.7數(shù)據(jù)安排

4.8應用程序最后的調(diào)節(jié)

第五章MMX,M的編碼技術(shù)

5.1無符號分組

5.2有符號分組

5.3飽和模式下的交錯成組

5.4非飽和模式下的交錯成組

5.5非交錯分組

5.6含有一個常數(shù)的復數(shù)乘法

5.7無符號數(shù)差值的絕對值

5.8有符號數(shù)差值的絕對值

5.9絕對值

5.10有符號數(shù)截取到任意有符號區(qū)域舊IGHLOW]

5.11無符號數(shù)截取到任意無符號區(qū)域[HIGH,LOW]

5.12常數(shù)生成

第六章MMX"性能監(jiān)測擴展

6.1超標量(奔騰系列)性能監(jiān)測事件

MMX叫旨令事件說明

6.1.1

6.2動態(tài)執(zhí)行(P6系列)性能監(jiān)測事件

6.3RDPMC指令

指令規(guī)則

6.3.1

附錄AMMX,M指令集

附錄BMMX"命令和操作數(shù)限制

返回

AllrightreservedbyFanYipeng.

0

TABASE

INTEL體系結(jié)構(gòu)

MMXTM技術(shù)開發(fā)者手冊

IntelArchitectureMMX?TechnologyDevelopersManual

返回

附錄AMMXTM指令集

下表為MMXTM指令集一覽表。下列指令助記符是

助記符基本集。大多數(shù)指令都有多種形式(如

PCKED-BYTE,-WORD和-DWORD形式)。在“Intel

體系結(jié)構(gòu)MMXTM技術(shù)程序員參考手冊”(序列碼為

243007)中可以找到MMXTM指令的全部信息。

表A-lIntel體系結(jié)構(gòu)MMX,M指令集

環(huán)繞方有符號飽和無符號飽和

成組算術(shù)

式模式模式

AdditionPADDPADDSPADDUS

SubtractionPSUBPSUBSPSUBUS

PMULL

Multiplication

/H

PMAD

Multiply&add

D

Shiftright

PSRA

Arithmetic

PCMPc

Compare

c

有符號飽和無符號飽和

轉(zhuǎn)換常規(guī)

模式模式

PackPACKSSPACKUS

PUNPC

Unpack

KL/H

邏輯操作成組|全64位

AndPAND

AndnotPANDN

Q.POR

ExclusiveorPXOR

ShiftleftPSLLPSLL

ShiftrightPSRLPSRL

轉(zhuǎn)移及內(nèi)存操作32位64位

Register-register

MOVDMOVQ

movern

Loadfrom

MOVDMOVQ

memoryrq

StoretomemoryMOVDMOVQ11

其它

Emptymultimedia|EMMS

state

返回

AllrightreservedbyFanYipenc.

0

QB心E

INTEL體系結(jié)構(gòu)

MMX?技術(shù)開發(fā)者手冊

IntelArchitectureMMX?TechnologyDeveloper'sManual

返回

附錄BMMXTM命令和操作數(shù)限制

在此要特別感謝震源工作室(戰(zhàn)國風云)的好朋友

易春華,他在百忙之中(正在開發(fā)“孫子兵法”),熱

心補充了以下一段MMXTM命令和操作數(shù)限制,使本手

冊變得更加完整。

返回

AllrightreservedbyFanYipeng.

0

TBASE

INTEL體系結(jié)構(gòu)

MMX?技術(shù)開發(fā)者手冊

IntelArchitectureMMX?TechnologyDeveloper'sManual

返回

第一章手冊簡介

Intel的MMX?技術(shù)是對Intel體系結(jié)構(gòu)(IA)指令集的擴展。該技術(shù)使用了單

指令多數(shù)據(jù)技術(shù)(SIMD)技術(shù),以并行方式處理多個數(shù)據(jù)元素,從而提高了多媒體

和通訊軟件的運行速度。MMXTM指令集增加了57條新的操作碼和一個新的64

位四字數(shù)據(jù)類型。這種新的64位數(shù)據(jù)保持了可供MMXTM指令操作的成組數(shù)據(jù)值,

如下圖(圖1-1)所示。

0

圖1-1新的數(shù)據(jù)類型

另外,增加了八個新的64位MMX,M寄存器,每個寄存器可按名稱MM0-MM7直接訪

問。圖1-2顯示了這八個新笆64位MMX?寄存器的布局。

0

圖1-2MMX”,寄存器集

“MX,”技術(shù)對操作系統(tǒng)完全透明,并且與現(xiàn)有的、基于Irrel體系結(jié)構(gòu)的軟件百分之百

兼容。所有應用軟件可繼續(xù)在具有MMXTM技術(shù)的處理器上正常運行。

有關數(shù)據(jù)類型和寄存器的其它信息和細節(jié)可詳見《INTEL體系結(jié)構(gòu)MMX?技

術(shù)程序員參考手冊》(IntelArchitectureMMX?TechnologyDeveloper'sManual)。

MMXTM技術(shù)提高了很多應用程序的執(zhí)行性能,例如活動圖像、視頻會議、二維圖形和

三維圖形。幾乎每一個具有重復性和順序性整數(shù)計算的應用程序都可以從MMX"技術(shù)中受

益。對于8位、16位和32位數(shù)據(jù)元素的處理.改善了程序的性能。一個指令可一

次操作8個字節(jié),且在一個時鐘周期內(nèi)完成兩條指令,也就是說,可在一個時鐘周期內(nèi)處理

16個數(shù)據(jù)元素。

另外,為增強性能,MMX俏技術(shù)為其它功能釋放了額外的處理器周期。以前需要其它

硬件支持的應用程序,現(xiàn)在僅需軟件就能運行。更小的處理器占用率給更高程度的并發(fā)技術(shù)

提供了條件,在當今眾多的操作系統(tǒng)中這些并發(fā)技術(shù)得到了利用。在基于Intel的分析系統(tǒng)

中,某些功能的性能提高了5D%到400%。這種數(shù)量級的性能擴展可以在新一代處理器中得

到體現(xiàn)。在軟件內(nèi)核中,其速度得到更大的提高,其幅度為原有速度的三至五倍。

1.11.1關于本手冊

本手冊面向那些熟悉Intel體系結(jié)構(gòu)的軟件模型和匯編語言編程的讀者“

本手冊描述了基于IAMMX?技術(shù)的軟件編程的優(yōu)化方案和使用策略。另外,它還包含

了幫助你開始編寫應用程序的編碼技術(shù)和示例。

本手冊分為六章和一個附錄:

第一章——INTEL體系結(jié)構(gòu)“MX'技術(shù)開發(fā)者手冊介紹,

第二章一處理器體系結(jié)構(gòu)和流水線簡介。本章對奔騰處理器和動態(tài)(P6系列)處理器的

體系結(jié)構(gòu)和流水線進行了簡要介紹。

第三章一MMXm代碼開發(fā)原則。本章為幫助你開發(fā)出快速、高效的代碼,提供了相

關的原則和指導。另外,它還介紹了常規(guī)優(yōu)化方法、指令調(diào)度和選擇方案以及高速緩存和內(nèi)

存優(yōu)化方法。

第四章一MMX,M代碼開發(fā)策略。本章回顧了在應用程序中創(chuàng)建MMXW例程的步驟。

第五章——MMX”的編循技術(shù)。本章的編碼示例可以幫助你開始編寫MMX小例程。

第六章一MMX,”性能監(jiān)測計數(shù)器。本章詳細說明了性能監(jiān)測計數(shù)器和它們的功能。

附錄A——MMX.指令集。附錄匯總了全部“MX,指令。

1.21.2參考文獻

參閱下列文檔可獲得有關Intel體系結(jié)構(gòu)和本手冊所涉及的專用技術(shù)的更多的內(nèi)

容:

《INTEL體系結(jié)構(gòu)MMX,”技術(shù)程序員參考手冊》

IntelArchitectureMMX?TechnologyProgrammersReferenceManual,Intel

Corporation,OrderNumber243007.

《奔騰系列處理器開發(fā)者手冊》

Pentium?ProcessorFamilyDeveloper'sManual:Volume1.2.and3,Intel

Corporation,OrderNumber241428.241429,and241430.

《高能奔騰處理器開發(fā)者手冊》

Pentium?ProProcessorFamilyDeveloper'sManual:Volume1,2,and3,Order

Number242690,242691,and242692.

《INTEL的32位處理器優(yōu)化方案》

OptimizationsforInters32-bitProcessors,ApplicationNoteAP-526,OrderNumber

242816

返回

AllrightreservedbyFanYipeng.

0

TBASE

INTEL體系結(jié)構(gòu)

MMX?技術(shù)開發(fā)者手冊

IntelArchitectureMMX?TechnologyDeveloper'sManual

返回

第二章處理器體系結(jié)構(gòu)和流水線

簡介

本節(jié)簡要介紹了具有MMX,M技術(shù)的奔騰處理器

和動態(tài)執(zhí)行(P6系列)處理器的流水線及其結(jié)構(gòu)特征。

在了解了代碼在處理器總線上的執(zhí)行過程之后,你將

會了解為什么這種優(yōu)化方法能夠提高代碼的運行速

度。另外,它將幫助你調(diào)度和優(yōu)化你的應用程序,以

獲得更高的運行效率。

1.32.1超標量(奔騰系列)的流水線和動態(tài)執(zhí)行(P6系列)

體系結(jié)構(gòu)

1.3.1.12.1.1超標量(奔騰系列)的流水線

奔騰處理器是一個高級的超標量處理器。它

是建筑在兩個通月的整型流水線和一個可流水作業(yè)的

浮點單元上的,這使處理器能夠同時執(zhí)行兩條整型指

令。一個對軟件透明的動態(tài)分支預測機制能夠使分支

的流水線阻塞達到最小化。具有MMX『M技術(shù)的奔騰處

理器將為流水線增加新的處理階段。MMXTM流水線與

整型流水線的集成方法非常相似。

奔騰處理器可以在一個時鐘周期內(nèi)完成兩條指

令,一個流水線完成一條指令。第一個邏輯管道稱之

為“U”管道,第二個稱之為“V”管道。在任何一條

給定的指令譯碼期間,它安排的后面兩條指令將被檢

查。并且,如果有可能,第一條指令被安排到“U”

管道執(zhí)行,第二條指令被安排到“V”管道執(zhí)行。如

果不能,則第一條指令被安排到“U”管道執(zhí)行,

“V”管道中不安排指令運行。

指令在兩個管道中運行與它們順序執(zhí)行所產(chǎn)生的

效果是完全一樣的。當發(fā)生管道阻塞時,后繼的指令

無法通過被阻塞的指令所在的任一管道中。圖2-1說

明了這種調(diào)度的流水線結(jié)構(gòu)。

0

圖2-1MMXTM流水線結(jié)構(gòu)

具有MMXTM技術(shù)的奔騰處理器為整型流水

線增加了一個額外的處理階段。指令從代碼的高速緩

沖區(qū)中預取出來,被送入到“預取”(PF)階段,并且

在“提取”(F)階段中進行指令的語法分析。另外,全

部的前綴譯碼都在F階段中進行。

指令在先進先出(FIFO)的指令緩沖區(qū)中將語法分

析與指令譯碼分開,這個緩沖區(qū)位于F階段與譯碼

1(D1)階段之間。FIFO緩沖區(qū)的空間能夠?qū)⒈惶幚淼闹?/p>

令上升到四條指令。FIFO緩沖區(qū)是透明的,當它為空

時,不增加額外的遲延。

在每個時鐘周期內(nèi),可將兩條指令壓到指令的

FIFO緩沖區(qū)中(根據(jù)有效的代碼字節(jié),以及其它因素,

如前綴)。然后,再將成對的指令從FIFO緩沖區(qū)中彈

出來,送到D1階段中。由于指令的平均執(zhí)行效率為

每個時鐘周期內(nèi)不超過兩條指令,所以FIFO通常是滿

的。只要FIFO是滿的,就可以防止在指令提取和進行

語法分析時產(chǎn)生的阻塞。如果發(fā)生了這樣的阻塞,F(xiàn)IFO

也可以使阻塞不在管道的執(zhí)行階段上發(fā)生。但如果

FIFO空,由于流水線中無指令運行,則可能會導致一

個執(zhí)行阻塞。較長的指令或前綴可能會在FIFO入口處

產(chǎn)生阻塞(參見3.2.3節(jié)和3,4,2節(jié))。

下面的圖表詳細說明了超標量處理器中的

MMXTM流水線以及流水線中發(fā)生阻塞的條件。

0

圖2-2在具有MMXTM技術(shù)的奔騰處理器中的

MMX'指令流

表2-1詳細說明了每類MMX,M指令的功能單

元、遲延、吞吐量和執(zhí)行管道。

表2-1MMXTM指令和執(zhí)行單元

?算術(shù)邏輯單元(ALU)用于執(zhí)行算術(shù)和邏輯操作(即

力口、減、異或、與)。

?乘法器單元執(zhí)行全部的乘法操作。乘法要求三個

時鐘周期,但通過流水線安排,可在每個時鐘周

期內(nèi)完成一條乘法操作。處理器僅有一個乘法器

單元,也就是說,不能同時運行兩條乘法指令。

但是,乘法指令可以同其它類型的指令配對而同

時運行。它們可以在U管道或V管道中運行。

?移位單元執(zhí)行全部的移位、成組或分組操作。由

于同一時間只有一個移位器可以有效地進行移

位、成組或分組操作,所以不能與其它移位單元

的指令進行配對。但移位單元的指令可以和其它

類型的指令配對運行。它們可以在U管道或V管

道中運行。

?MMXTM指令只能在u管道中執(zhí)行訪問內(nèi)存或整型

寄存器,且不能與非MMXTM指令配對運行。

?當對一個MMXTM寄存器修改后,需經(jīng)過兩個時鐘

周期后,才能將MMXTM寄存器移到內(nèi)存或整型寄

存器中。

有關指令配對的信息請見3.3節(jié)。

其它信息和指令格式請見《INTEL體系結(jié)構(gòu)

MMXTM技術(shù)程序員參考手冊》(IntelArchitecture

MMXTMTechnologyDeveloper'sManual)。

1.3.1.22.1.2動態(tài)執(zhí)行(P6系列)流水線

P6系列處理器使用動態(tài)執(zhí)行結(jié)構(gòu)。該結(jié)構(gòu)通

過硬件寄存器重命名和分支預測的方法,將亂序執(zhí)行

和推測執(zhí)行合成在一起。這些處理器有一個有序進入

的流水線,它將Intel386TM的宏指令支解成簡單的微

操作(或UOP)和一個可以處理這些微操作的亂序的超

標量處理器內(nèi)核。這個亂序的處理器內(nèi)核包含了幾條

流水線,連接了整型、跳轉(zhuǎn)、浮點和內(nèi)存執(zhí)行單元。

幾種不同的執(zhí)行單元可以集成在同一條流水線上。例

如:一個整型地址邏輯單元和浮點執(zhí)行單元(加法器、

乘法器和除法器)同享一個流水線。數(shù)據(jù)高速緩沖區(qū)由

一個專用的讀取端口和其它的存儲端口交錯而成。大

多數(shù)簡單操作(整型ALU,浮點加法,甚至浮點乘法)

可以按每時鐘周期完成一至兩個操作的吞吐量進行流

水作業(yè)。浮點除法不可以進入流水線,長遲延操作可

以和短遲延操作并行處理。

P6系列的流水線由三部分構(gòu)成:有序組織的前端

(In-OrderIssueFront-end)單元,亂序內(nèi)核

(Out-of-OrderCore)單元和有序的退出(In-Order

Retirement)單元。下面將詳細介紹有序組織的前端單

)L?o

0

圖2-3亂序內(nèi)核與退出流水線

由于動態(tài)執(zhí)行處理器按亂序的方式執(zhí)行指

令,所以產(chǎn)生了數(shù)量充足的、可供執(zhí)行的微操作,并

使大多數(shù)有關性能調(diào)節(jié)方面的考慮得以實現(xiàn)。正確的

分支預測和快速的譯碼是有序前端單元提高性能的核

心。有關分支預測和分支目標緩沖區(qū)的詳細內(nèi)容見2.3

節(jié),下面討論譯碼部分。

在每個時鐘周期內(nèi),ID1管道階段可以對多達3

條的Intel體系結(jié)構(gòu)宏指令進行譯碼。但是,如果指令

復雜或指令長度超過了7個字節(jié),譯碼器的譯碼指令

數(shù)將有所下降。

譯碼器可以譯碼:

(1)每個時鐘周期多達三條宏指令。

(2)每個時鐘周期多達六條微操作。

⑶指令長度大于7的宏指令。

P6系列處理器在D1階段上有3個譯碼器。第一

個譯碼器可在每個時鐘周期完成一個由四個以下微操

作構(gòu)成的宏指令,其它兩個譯碼器在每個時鐘周期內(nèi)

完成一個由一個微操作構(gòu)成的宏指令。由多于4個微

操作構(gòu)成的指令將耗費多個時鐘周期來完成譯碼,在

使用匯編語言編程時,按4-1-1微操作序列來安排指

令將增加每個時鐘周期內(nèi)的譯碼指令數(shù)。通常:

?簡單的寄存器—寄存器格式的指令僅用一個微

操作。

.讀取指令僅為一個微操作。

.存貯指令為兩個微操作。

?簡單的讀-修改指令為兩個微操作。

?簡單的寄存器——內(nèi)存格式的指令由2-3個微操

作構(gòu)成。

.簡單的讀-修改-寫指令由4個微操作構(gòu)成。

?復雜的指令通常超過4個微操作,故需耗費多個

時鐘周期譯碼。

為了計算微操作,MMXTM指令都是簡單指

令,見《Intel的32位處理器優(yōu)化方案》(Optimizations

forIntel's32-bitProcessors,ApplicationNoteAP-526,

附錄是一個說明體

OrderNumber242816)ODIntel

系結(jié)構(gòu)指令集中每一指令所用微操作數(shù)的表。

一旦微操作被譯碼,它們從有序前端單元發(fā)送到

保留(RS)站中,保留站是亂序核心管道階段的開始部

分。在RS中,微操作等待它們的操作數(shù)變?yōu)橛行А?/p>

一旦一條微操作的所有操作數(shù)有效,它將從RS中被

送到一個執(zhí)行單元。如果一個微操作在數(shù)據(jù)準備好的

狀態(tài)下進入RS(即為全部數(shù)據(jù)有效),那么該微操作將

立即被送到一個合適的且有效的執(zhí)行的單元中。在這

種情況下,在RS中的微操作只耗費了很少的時鐘周

期,全部的執(zhí)行單元聚集在RS的輸出端口上,一旦

微操作執(zhí)行完將返回到ROB,并等待退出。在這個管

道階段中,全部數(shù)據(jù)值被回寫到內(nèi)存并且全部的微操

作按序退出,一次三條。下圖提供了有關亂序核心和

按序退出管道階段的細節(jié)。

0

圖2-4亂序內(nèi)核和退出流水線

表2-2動態(tài)執(zhí)行(P6-系列)處理器流水線執(zhí)行單

0整型ALU單元遲延L吞吐量1/每周期

LEA指令遲延L吞吐量1/每周期

移位指令遲延L吞吐量1/每周期

整數(shù)乘法指令遲延4,吞吐量1/每周期

浮點單元

FADD指令遲延3,吞吐量1/每周期

FMUL指令遲延5,吞吐量1/2每周期「

FDIV單元遲延長,數(shù)據(jù)多,不可流水作業(yè)的吞吐星

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存貯數(shù)據(jù)單元遲延3,(非適用)吞吐量1/每周期

注釋

1.FMUL單元在接收第一個FMUL后,在下一時鐘

周期內(nèi)不能接收第二個FMUL,但這并不是說只能在

偶數(shù)時鐘周期內(nèi)執(zhí)行FMUL。

2.流水線上每兩個時鐘周期處理一個FMUL??梢?/p>

視為P6系列處理器只有一個32x32。乘法流水線。

3.存貯遲延對于數(shù)據(jù)流的全局來說并不十分重

要。重要的是相應操作何時結(jié)束并退出。不同的存貯

情況所產(chǎn)生的遲延也不同。例如,在時鐘周期10,對

一個部分地址進行數(shù)據(jù)存貯和地址存貯時,如地址

100,在時鐘周期10也可以對同樣地址100讀?。ㄍ瑯?/p>

大小和類型),且不被阻塞。

4.對同一個地址讀和寫的指令可安排在同一時鐘

周期。

1.42.2高速緩存(Cache)

具有MMXTM技術(shù)的處理器的在片高速緩存

子系統(tǒng),是由兩個16K的4路線長為32字節(jié)的關聯(lián)

高速緩存體構(gòu)成。高速緩存具有一個回寫機制和一個

偽LRU的置換算法。數(shù)據(jù)的高速緩存由八個按四字節(jié)

邊界交錯的存貯體構(gòu)成。

在具有MMXTM技術(shù)的奔騰處理器上,只要引用的

數(shù)據(jù)不在同一個高速緩存體上,就可以被一條讀取指

令和一條存貯指令同時訪問。在具有MMXm技術(shù)的奔

騰處理器上,高速緩存訪問失敗的遲延為8個內(nèi)部時

鐘周期。在具有MMXTM技術(shù)的動態(tài)執(zhí)行處理器中,最

小遲延是10個內(nèi)部時鐘周期。

1.52.3分支目標緩存

具有MMXTM技術(shù)的奔騰處理器和動態(tài)執(zhí)行

處理器在分支預測方面,除一個較小的異常處理外(本

書231節(jié)中討論),在功能上完全一樣。

分支目標緩沖區(qū)(BTB)存貯了預先所見的分支和

它們的目標。當一個分支被預取后,BTB將目標地址

直接填入到指令讀取單元(IFU)。一旦分支被執(zhí)行,BTB

將隨著目標地址而改變。使用分支目標緩存時,預先

所見的分支被動態(tài)預告。分支目標緩存的預測算法包

括了模式匹配和每目標多達4位的預測歷史位。例如,

一個具有4個迭代長度的循環(huán)將百分之百地被正確預

測到。遵循下列原則將提高預測性能:

編寫條件分支(除循環(huán)外)可將最常執(zhí)行的分支緊

接在分支指令后(即失?。?。

另外,具有MMXTM技術(shù)的處理器有一個堆棧返回

緩存(RSB,ReturnStackBuffer),可以連續(xù)地為不同地

址上調(diào)用的過程正確地預測其返回地址,進一步為展

開具有函數(shù)調(diào)用的循環(huán)帶來了益處,并刪除了某些需

要in-line的過程。

1.5.1.12.3.1相連分支

另外,在具有MMXTM技術(shù)的奔騰處理器上,

如果兩個分支指令的最后一個字節(jié)在同一個按四字節(jié)

對齊的內(nèi)存段內(nèi),則分支不可預測。如下圖所示:

0

圖2-5相連分支的例子

這種情況,發(fā)生在兩個相連分支間沒有間隔

指令且第二個指令只有兩個字節(jié)長的情況下(如

+/-128字節(jié)的相對跳轉(zhuǎn)指令)。

為避免這種無法預測的情況,應使第二分支加長,

在分支指令中用16位的相對位移代替8位的相對位

移。

1.62.4寫緩存

具有MMXTM技術(shù)的處理器具有4個寫緩存

(相對無MMXTM技術(shù)的奔騰處理器的兩個寫緩存)。另

外,寫緩存可以被U管道使用,也可以被V管道使用

(相對無MMXTM技術(shù)的奔騰處理器的一個寫緩存對應

一個管道的情況)。通過對內(nèi)存寫操作進行安排調(diào)度,

可以提高關鍵循環(huán)的性能。如果你不想看到寫未命中,

每組指令不能安排多于4條寫指令。并在安排另外的

寫指令前調(diào)度苴它指令。

返回

AllrightreservedbyFanYipenc.

0

TABASE

INTEL體系結(jié)構(gòu)

MMX?技術(shù)開發(fā)者手冊

IntelArchitectureMMX?TechnologyDeveloper'sManual

返回

第三章MMXTM代碼開發(fā)規(guī)則

下述規(guī)則將幫助快速地開發(fā)出高效的MMXTM代

碼,并且這些代碼可以在具有MMX,M技術(shù)的所有的處

理器上運行。

1.73.1規(guī)則列表及建議

以下給出一張規(guī)則和建議的列表。

1.7.1.13.1.1規(guī)則

?使用當前的編譯器可以產(chǎn)生一個優(yōu)化的應用程

序。這將幫助你從一開始能產(chǎn)生好的代碼。

?避免部分寄存器的阻塞.參見第324節(jié)。

?注意分支預測算法(參見第3.2.5節(jié))。這是動態(tài)執(zhí)

行(P6-系列)處理器最為重要的優(yōu)化方法。由于提

高了分支預測能力,你的代碼將耗費很少的周期

來讀取指令。

?對代碼進行調(diào)度,使其達到最大的配對可能。參

見第3.3節(jié)。

?確定所有的數(shù)據(jù)都已對齊。參見第4.6節(jié)。

?安排好代碼,使其未命中的高速緩存指令最少,

并優(yōu)化預取。參見第3.5節(jié)。

?不要混用MMXTM指令和浮點指令。參見第4.3.1

節(jié)。

?避免使用除前綴為OF以外的操作碼。參見第323

節(jié)。

?對同一個內(nèi)存區(qū)域,避免在大數(shù)據(jù)量存貯數(shù)據(jù)后

進行小數(shù)據(jù)量讀取。或小數(shù)據(jù)量存貯后進行大數(shù)

據(jù)量的讀取。對于同一個內(nèi)存區(qū)域,讀取和存貯

數(shù)據(jù)應使用同樣大小的數(shù)據(jù)量;并且地址要對齊。

參見第3.6.1節(jié)。

.在任何時候,都要盡可能地使用OP,REG和MEM

格式。這些格式可以幫助你減少占用寄存器,減

少循環(huán),避免產(chǎn)生不必要的讀取操作。參見第

3.4.1To

?EMMS必須放在MMXTM指令的尾部。參見第4.4

節(jié)。

?優(yōu)化高速緩存中的數(shù)據(jù)的帶寬,以符合MMXTM寄

存器的大小。參見第3.6節(jié)。

1.7.1.23.1.2建議

?調(diào)整代碼,一般情況下不使用向前條件分支,通

常使用向后的條件分支。

?按16字節(jié)邊界條件對齊頻繁執(zhí)行的分支目標。

?將循環(huán)展開來調(diào)度指令。

?使用軟件方式來安排流水線以調(diào)度遲延和功能單

7Co

?必須成對使月CALL和RET(retum)指令。

?避免使用自修改代碼。

?避免把數(shù)據(jù)放在代碼段。

?盡可能快地計算出存貯地址。

?應避免使用包含三個或三個以上微操作代碼或指

令長度超過7個字節(jié)的指令。如果可能,使用只

有一個微操作的指令。

?不要使用兩個8位讀取指令來進行16位的讀取。

?在調(diào)用被調(diào)月保存(callee—save)過程前,先清除

部分寄存器的內(nèi)容。

?解決阻塞條件,如存貯地址,盡可能地避免可能

引起阻塞的讀取。

-一般情況下,一個可以直接由處理器支持的N-

字節(jié)的數(shù)據(jù)(8位的字節(jié),16值的字,32位的雙

字,32位、64位及80位浮點數(shù))應該對齊在下一

個最高的2的乘方邊界處,避免未對齊的數(shù)據(jù)。

——按任意邊界對齊8位數(shù)據(jù)。

——在已對齊的4-字節(jié)字數(shù)據(jù)內(nèi)對齊16位

數(shù)據(jù)。

——以4的任意倍數(shù)為邊界,對齊32位數(shù)

據(jù)。

——以8的任意倍數(shù)為邊界,對齊64位數(shù)

據(jù)。

——以128位為邊界(即16字節(jié)的倍數(shù)),對

齊80位數(shù)據(jù)。

1.83.2常規(guī)的優(yōu)化方案

本節(jié)概括了Intel體系結(jié)構(gòu)的重要的常規(guī)優(yōu)

化技術(shù)。

1.8.1.13.2.1尋址方式

在奔騰處理器上,當一個寄存器被用作基地

址元素時,如果該寄存器是前一個指令的目的寄存器

(假設所有的指令都已在預取隊列中),將耗費一個附

加的時鐘周期,例如:

因為奔騰處理器有兩條整數(shù)流水線,如果一

個寄存器是前一時鐘內(nèi)任意指令的目的寄存器,這個

用于計算有效地址(在任一管道)的基地址或索引元素

的寄存器,將耗費一個額外的時鐘周期.這種效應稱為

地址生成互鎖(AGI)。為了避免AGI,指令間應安排其

它指令,并產(chǎn)生至少一個時鐘周期的間隔來分隔這些

指令。

新增的MMXTM寄存器不能當作索引寄存器或基

地址使用,所以AGI不適用于MMXTM寄存器為目的寄

存器的情況。

在AGI情況下,動態(tài)執(zhí)行(P6-系列)處理器不產(chǎn)生

額外遲延。

注意一些具有隱含寄存器讀/寫的指令,那些通過

ESP(PUSH,POP,RET,CALL)而具有隱含的地址生成

的指令,也會產(chǎn)生AGI附加遲延,如下例:

PUSH和POP也對ESP進行隱含的寫操作,

但是如果下一條指令是通過ESP尋址時,將不產(chǎn)生

AGI。奔騰處理器通過PUSH和POP指令中的ESP“重

命名”來避免AGI的額外遲延,如下例:

在具有MMXTM技術(shù)的奔騰處理器上,包含立

即數(shù)和偏移量的指令可在U管道中進行配對。如果有

必要使用常數(shù),那么使用立即數(shù)通常比把常數(shù)讀取到

寄存器更有效。但是如果同一個立即數(shù)被多次引用,

應把常數(shù)先取到一個寄存器,然后多次使用這個寄存

器,這種方法將更快一些,如下例所示:

由于MMXTM指令是雙字節(jié)操作碼(OxOF操作

碼映射),任何一個使用基地址或使用具有4字節(jié)位移

的索引尋址來訪問內(nèi)存的指令,其指令長度為8字節(jié),

超過7字節(jié)的指令一次只能部分譯碼,應盡量避免使

用(見3.4.2節(jié))。人們經(jīng)常通過將立即數(shù)值加到基地址

或索引寄存器的方法來減少這種指令的長度,因此要

除去立即數(shù)部分。

在Intel486TM處理器中,當一個部分寄存器被寫

后,緊接著立即使用全部寄存器時,將產(chǎn)生一個附加

的時鐘周期。奔騰處理器在這方面無此后果,這種情

況稱之為部分阻塞條件,下例為奔騰處理器的例子。

下列為Intel486TM處理器對應的例子。

動態(tài)執(zhí)行(P6-系列)處理器具有與Intel486?

處理器一樣的阻塞類型,甚至耗費更高。在對部分寄

存器寫操作結(jié)束前,讀操作一直被阻塞。這樣的耗費

可能多于一個時鐘周期。

為達到最佳的性能,應避免在對部分寄存器(如

AL,AH,AX)寫操作后,使用包含這個部分寄存器的

大寄存器。這條規(guī)則將防止動態(tài)執(zhí)行處理器上的部分

條件阻塞,并適月于所有大小寄存器對:

有關部分寄存器阻塞的其它內(nèi)容,請見第

324節(jié)。

1.8.1.23.2.2對齊

本節(jié)提供了有關奔騰和動態(tài)執(zhí)行(P6-系列)

處理器在代碼和數(shù)據(jù)對齊方面的信息。

3.2.2.1代碼

奔騰和動態(tài)執(zhí)行(P6-系列)處理器有一個32

字節(jié)的高速緩存線。由于預取緩沖區(qū)按16字節(jié)的邊界

提取,代碼的對齊對預取緩沖區(qū)的效率有直接影響。

為使Intel體系結(jié)構(gòu)系列處理器達到最佳性能,推

薦如下方法:

?循環(huán)的人口標號應按下一個0MOD16對齊,當

它與邊界的距離小于8字節(jié)時。

?跟在條件轉(zhuǎn)移后的標號不應被對齊。

?在無條件轉(zhuǎn)移或函數(shù)調(diào)用后的標號應按下一個0

MOD16對齊,當它與邊界的距離小于8字節(jié)時。

3.2.2.2數(shù)據(jù)

在奔騰處理器上,對一個在高速緩存或總線上的

未對齊數(shù)據(jù)進行訪問,至少多耗費3個時鐘周期。在

動態(tài)執(zhí)行(P6-系列)處理器上,對一個跨高速緩存線的

末對齊數(shù)據(jù)進行訪問,將耗費9-12個時鐘周期。Intel

推薦對數(shù)據(jù)按下述邊界對齊,使全部處理器達以最佳

執(zhí)行性能。

2字節(jié)數(shù)據(jù)

一個2字節(jié)的對象應完全包含在按4字節(jié)對齊的

字內(nèi)。(即,它的二進制地址應為XXXXOO,XXXX01,

XXXXIO,而不能是XXXX11)。

4字節(jié)數(shù)據(jù)

4字節(jié)對象應按4字節(jié)邊界對齊。

8字節(jié)數(shù)據(jù)

一個8字節(jié)數(shù)據(jù)(64位,如雙精度實數(shù)據(jù)類型,

全部MMXTM成組寄存器值)應按8字節(jié)邊界對齊。

1.8.1.33.2.3有前綴的操作碼

在奔騰處理器上,一個指令的前綴能夠延緩

語法分析并禁止指令配對。

下表強調(diào)了FIFO中的指令前綴的影響。

?前綴為OF指令無附加遲延。

?前綴為66h,67h指令將花費一個時鐘檢測前綴,

一個時鐘計算指令長度和一個時鐘進入FIFO(總

共3個時鐘)。它必須是第一條進入FIFO的指令,

且另一條指令可與它一起被壓入FIFOo

?具有其它前綴(非OF,66H,67H)的指令需要另一

個附加時鐘檢測每一前綴。這些被壓入FIFO的指

令只能作為第一條指令。具有兩個前綴的指令需

用三個周期進入FIFO(兩個時鐘周期處理前綴,-

個時鐘周期處理指令)。另一個指令可以和第一條

指令在同一時鐘周期內(nèi)一起壓入FIFOo

僅當FIFO保持兩個以下人口時,才存在對性

能的影響。只要譯碼器(D1階段)有兩條指令來譯碼,

就沒有額外開銷。如果以每個時鐘周期兩條指令的頻

率,將FIFO中的指令撤出,FIFO就可迅速變空。所以,

如果恰好位于一條有前綴的指令前的一些指令造成了

性能損失(如,由高速緩存失誤造成的阻塞引起不能配

對、未對齊等等),則造成有前綴的指令的性能損失可

能被掩起來。

在動態(tài)執(zhí)行(P6-系列)處理器中,長度上超過7字

節(jié)的指令將降低每時鐘周期內(nèi)譯碼指令數(shù)(見第2.1.2

節(jié)),前綴給指令增加了一到二個字節(jié),可能使譯碼器

受到限制。

建議在任何時候都盡可能地不使用有前綴的指

令,或?qū)⑺鼈儼才旁谝蚱渌蛟斐勺枞闹噶詈竺妗?/p>

有關有前綴指令的配對詳情,參見第3.3節(jié)。

1.8.1.43.2.4動態(tài)執(zhí)行(P6系列)處理器中的部分寄存器阻塞

在動態(tài)執(zhí)行(P6-系列)處理器中,當16或8

位寄存器(如AL,AH,AX)被寫后立即執(zhí)行一個32位

寄存器(如EAX)讀操作,那么讀操作被阻塞直到寫結(jié)束

(最少7個時鐘周期)??紤]下面的例子,第一條指令

移動數(shù)值8到AX寄存器,接下來的指令訪問大寄存

器EAX,這個代碼導致一個部分寄存器阻塞。

對于全部8位和16位或32位寄存器時同樣

如此。

小寄存器存,寄

ALAH

EAX

AX

BLBH

EBX

BX

CLCH

ECX

CX

DLDH

EDX

DX

奔騰處理器不存在這種附加遲延。

由于P6系列的處理器可以按亂序執(zhí)行代碼。因

此,這種相鄰的指令不會產(chǎn)生阻塞。下例中也包含了

一個部分阻塞。

另外,任何跟在被阻塞的微操作后的微操作,

也將等待被阻塞的微操作通過管道后,才能獲得執(zhí)行

的時鐘周期。通常為了避免阻塞,在對16位或8位

小寄存器(AL)寫操作后,不要對包含它的大寄存器進

行讀操作。

為了使代碼能夠簡便地應用于不同類型的處理

器,在動態(tài)執(zhí)行處理器中也存在讀寫小寄存器和大寄

存器的特殊情況。下例的特殊情況中使用了XOR和

SUB指令。

通常,在實現(xiàn)這些指令序列時,總是在對寄

存器寫操作前,先對大寄存器清零。在這種特殊情況

中,由XOR和SUB實現(xiàn)清零功能,且對EAX、EBX、

ECX、EDX、EBP、ESP、EDI和ESI均有效。

1.8.1.53.2.5有關分支預測的信息

對動態(tài)執(zhí)行(P6-系列)的處理器來說,分支優(yōu)

化是最重要的優(yōu)化方案。這些優(yōu)化方案也同樣有益于

奔騰處理器。

3.2.5.1動態(tài)分支預測

下列三個因素對動態(tài)分支預測是很重要的:

1.如果指令地址不在BTB中,預測結(jié)果為無分支的

繼續(xù)運行(失?。?/p>

2.預測到的分支有一個時鐘周期的遲延。

3.BTB存貯了有關分支預測歷史的4位數(shù)據(jù)。

第一個因素建議將分支跟在將被執(zhí)行的代碼

后面。決不要將數(shù)據(jù)跟在分支后面。

為避免因提取分支而產(chǎn)生一個時鐘周期的遲延,

可簡單地在這些分支之間加入一些額外工作。這個遲

延限定了循環(huán)的最小耗費為兩個時鐘周期。如果你的

小循環(huán)不超過兩個時鐘周期,就將它展開。

分支預測器能夠正確地對常規(guī)的分文模式進行預

測。比如,它可以正確地預測出一個分支在循環(huán)中僅

在每一奇次迭代時發(fā)生,而在每一偶次迭代中不發(fā)生。

3.2.5.2在動態(tài)執(zhí)行(P6系列)處理器上的靜態(tài)預測

在動態(tài)執(zhí)行處理器中,對那些在BTB中沒有歷史

數(shù)據(jù)的分支將使月靜態(tài)預測算法進行預測,靜態(tài)預測

算法如下:

?預測無條件轉(zhuǎn)移分支。

?預測向后的條件分支,本規(guī)則對循環(huán)適用。

?預測向前的條件分支。

靜態(tài)預測的額外開銷為6個時鐘周期。無預

測或錯誤預測的額外開銷大于12個時鐘周期。下面的

圖表顯示了靜態(tài)預測的算法。

0

圖3-2動態(tài)執(zhí)行(P6-系列)的靜態(tài)分支預測算法

下例說明了靜態(tài)預測算法的基本規(guī)則。

在這個例子中,在第一次通過時,向后分支

不在BTB中,因此BTB未進行預測,但是靜態(tài)預測器

將預測到這個分支,所以不產(chǎn)生預測失誤。

本代碼段的第一個分支指令(〕CBegin)是一

個向前條件分支。第一次通過時,它不在BTB中,但

靜態(tài)預測器將預測到該分支。

第一次通過時BTB發(fā)現(xiàn)CallConvert指令,但在

BTB中沒有進行預測。但靜態(tài)預測算法能預測并提取

一個該調(diào)用,這對一個無條件分支來說是正確的結(jié)果。

這些例子中,條件分支只有兩種情況:提取的和

未提取的。間接分支,如開關語句,可計算的GOTO

或通過指針的調(diào)月,都可跳到一個特定的地址單元上。

如果分支有一個偏離的目標地址(即分支90%都轉(zhuǎn)向同

一地址),那么BTB將在大多數(shù)情況能夠精確預測到。

但是如果目標地址是不可預測的,性能將迅速下降,

用可預測的條件分支替換間接分支可以改善性能。

1.93.3調(diào)度

調(diào)度或配對是各代處理器都應使用的一種優(yōu)

化性能的方法。下面是一個在奔騰和P6系列處理器

上,用以提高代碼速度的配對和調(diào)度表。在某些情況

下,對特定的處理器具有達到最佳性能的變通方案。

這些變通的方法因應用程序的特性而不同。在超標量

的奔騰處理器中,指令的順序是使處理器達到最高性

能的非常重要的因素。

對指令順序的重新安排增加了將兩條指令安排成

同時運行的可能性。與數(shù)據(jù)相關的指令應被至少一條

其它指令所分開。

本書描述了你需要了解的MMXTM指令與整數(shù)指

令配對的原則。對下表列出的每一種情況,都在小節(jié)

中說明了與之相配的原則。

進行配對所需了解的幾個規(guī)則:

?通用配對規(guī)則:規(guī)則僅與機器狀態(tài)有關,與指定

的操作碼無關。對整數(shù)和浮點同樣有效。例如,

單步指令禁止指令配對。

?整數(shù)配對規(guī)則:對整數(shù)指令配對的規(guī)則。

?對MMXTM指令配對的規(guī)則:由于只存在一個乘法

器單元,規(guī)則允許兩個MMXTM指令同時執(zhí)行。

?MMXTM指令與整數(shù)指令配對規(guī)則:對一條MMX?

指令和一條整數(shù)指令配對的規(guī)則。

注意浮點指令不可以與MMX'指令配對。

1.9.1.13.3.1通用配對規(guī)則

關于奔騰處理器通用配對規(guī)則,請參見《對

Intel32位處理器的優(yōu)化》應用部分AP—526(序號

242816),具有MMXTM技術(shù)的奔騰處理器降低了一些

通用配對的規(guī)則要求:

?如果兩條指令中存在一條長度大于7字節(jié)的指

令,奔騰處理器不對它們進行配對。具有MMXTM

技術(shù)的奔騰處理器,不對第一條指令大于11字節(jié)

或第二條指令大于7字節(jié)的指令進行配對,前綴

不計算在內(nèi)。

.有前綴的指令可在U管道配對,前綴為OFH,66H

或67H的指令也可在V管道中配對。

1.9.1.23.3.2整數(shù)配對規(guī)則

當下列兩種情況發(fā)生時不能進行配對:

1.后兩條指令是不可配對指令(見下表可配對指令

匯總:并參見《對Intel32位處理器的優(yōu)化》應用

部分AP-526,附錄A包含了一個指令配對特性

的完整列表)。通常,大多數(shù)簡單的ALU指令是可

配對的。

2.后兩條指令屬于寄存器爭用(顯式或隱式的)的一

些類型。在較少的情況下,寄存器爭用的指令也

可配對。這種情況在3.323中解釋。

表3-1整數(shù)指令配對

在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. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論