国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
第二章 處理器體系結(jié)構(gòu)和流水線簡介
INTEL 體系結(jié)構(gòu) MMX? 技術(shù)開發(fā)者手冊
第二章 處理器體系結(jié)構(gòu)和流水線簡介
本節(jié)簡要介紹了具有MMX?技術(shù)的奔騰處理器和動態(tài)執(zhí)行(P6系列)處理器的流水線及其結(jié)構(gòu)特征。在了解了代碼在處理器總線上的執(zhí)行過程之后,你將會了解為什么這種優(yōu)化方法能夠提高代碼的運(yùn)行速度。另外,它將幫助你調(diào)度和優(yōu)化你的應(yīng)用程序,以獲得更高的運(yùn)行效率。
2.1 超標(biāo)量(奔騰系列)的流水線和動態(tài)執(zhí)行(P6系列)體系結(jié)構(gòu)
2.1.1 超標(biāo)量(奔騰系列)的流水線
奔騰處理器是一個(gè)高級的超標(biāo)量處理器。它是建筑在兩個(gè)通用的整型流水線和一個(gè)可流水作業(yè)的浮點(diǎn)單元上的,這使處理器能夠同時(shí)執(zhí)行兩條整型指令。一個(gè)對軟件透明的動態(tài)分支預(yù)測機(jī)制能夠使分支的流水線阻塞達(dá)到最小化。具有MMX?技術(shù)的奔騰處理器將為流水線增加新的處理階段。MMX?流水線與整型流水線的集成方法非常相似。
奔騰處理器可以在一個(gè)時(shí)鐘周期內(nèi)完成兩條指令,一個(gè)流水線完成一條指令。第一個(gè)邏輯管道稱之為“U”管道,第二個(gè)稱之為“V”管道。在任何一條給定的指令譯碼期間,它安排的后面兩條指令將被檢查。并且,如果有可能,第一條指令被安排到“U”管道執(zhí)行,第二條指令被安排到“V”管道執(zhí)行。如果不能,則第一條指令被安排到“U”管道執(zhí)行,“V”管道中不安排指令運(yùn)行。
指令在兩個(gè)管道中運(yùn)行與它們順序執(zhí)行所產(chǎn)生的效果是完全一樣的。當(dāng)發(fā)生管道阻塞時(shí),后繼的指令無法通過被阻塞的指令所在的任一管道中。圖2-1說明了這種調(diào)度的流水線結(jié)構(gòu)。
圖2-1 MMX?流水線結(jié)構(gòu)
具有MMX?技術(shù)的奔騰處理器為整型流水線增加了一個(gè)額外的處理階段。指令從代碼的高速緩沖區(qū)中預(yù)取出來,被送入到“預(yù)取”(PF)階段,并且在“提取”(F)階段中進(jìn)行指令的語法分析。另外,全部的前綴譯碼都在F階段中進(jìn)行。
指令在先進(jìn)先出(FIFO)的指令緩沖區(qū)中將語法分析與指令譯碼分開,這個(gè)緩沖區(qū)位于F階段與譯碼1(D1)階段之間。FIFO緩沖區(qū)的空間能夠?qū)⒈惶幚淼闹噶钌仙剿臈l指令。FIFO緩沖區(qū)是透明的,當(dāng)它為空時(shí),不增加額外的遲延。
在每個(gè)時(shí)鐘周期內(nèi),可將兩條指令壓到指令的FIFO緩沖區(qū)中(根據(jù)有效的代碼字節(jié),以及其它因素,如前綴)。然后,再將成對的指令從FIFO緩沖區(qū)中彈出來,送到D1階段中。由于指令的平均執(zhí)行效率為每個(gè)時(shí)鐘周期內(nèi)不超過兩條指令,所以FIFO通常是滿的。只要FIFO是滿的,就可以防止在指令提取和進(jìn)行語法分析時(shí)產(chǎn)生的阻塞。如果發(fā)生了這樣的阻塞,F(xiàn)IFO也可以使阻塞不在管道的執(zhí)行階段上發(fā)生。但如果FIFO空,由于流水線中無指令運(yùn)行,則可能會導(dǎo)致一個(gè)執(zhí)行阻塞。較長的指令或前綴可能會在FIFO入口處產(chǎn)生阻塞(參見3.2.3節(jié)和3.4.2節(jié))。
下面的圖表詳細(xì)說明了超標(biāo)量處理器中的MMX?流水線以及流水線中發(fā)生阻塞的條件。
圖2-2 在具有MMX?技術(shù)的奔騰處理器中的MMX?指令流
表2-1詳細(xì)說明了每類MMX?指令的功能單元、遲延、吞吐量和執(zhí)行管道。
表2-1 MMX?指令和執(zhí)行單元
操作 功能單元個(gè)數(shù) 遲延 吞吐量 執(zhí)行管道
ALU 2 1 1 U和V
乘法器 1 3 1 U或V
移位/成組/分組 1 1 1 U或V
內(nèi)存訪問 1 1 1 U
整型寄存器訪問 1 1 1 U
算術(shù)邏輯單元(ALU)用于執(zhí)行算術(shù)和邏輯操作(即加、減、異或、與)。
乘法器單元執(zhí)行全部的乘法操作。乘法要求三個(gè)時(shí)鐘周期,但通過流水線安排,可在每個(gè)時(shí)鐘周期內(nèi)完成一條乘法操作。處理器僅有一個(gè)乘法器單元,也就是說,不能同時(shí)運(yùn)行兩條乘法指令。但是,乘法指令可以同其它類型的指令配對而同時(shí)運(yùn)行。它們可以在U管道或V管道中運(yùn)行。
移位單元執(zhí)行全部的移位、成組或分組操作。由于同一時(shí)間只有一個(gè)移位器可以有效地進(jìn)行移位、成組或分組操作,所以不能與其它移位單元的指令進(jìn)行配對。但移位單元的指令可以和其它類型的指令配對運(yùn)行。它們可以在U管道或V管道中運(yùn)行。
MMX?指令只能在U管道中執(zhí)行訪問內(nèi)存或整型寄存器,且不能與非MMX?指令配對運(yùn)行。
當(dāng)對一個(gè)MMX?寄存器修改后,需經(jīng)過兩個(gè)時(shí)鐘周期后,才能將MMX?寄存器移到內(nèi)存或整型寄存器中。
有關(guān)指令配對的信息請見3.3節(jié)。
其它信息和指令格式請見《INTEL體系結(jié)構(gòu) MMX? 技術(shù)程序員參考手冊》(IntelArchitecture MMX? Technology Developer's Manual)。
2.1.2 動態(tài)執(zhí)行(P6系列)流水線
P6系列處理器使用動態(tài)執(zhí)行結(jié)構(gòu)。該結(jié)構(gòu)通過硬件寄存器重命名和分支預(yù)測的方法,將亂序執(zhí)行和推測執(zhí)行合成在一起。這些處理器有一個(gè)有序進(jìn)入的流水線,它將Intel386?的宏指令支解成簡單的微操作(或UOP)和一個(gè)可以處理這些微操作的亂序的超標(biāo)量處理器內(nèi)核。這個(gè)亂序的處理器內(nèi)核包含了幾條流水線,連接了整型、跳轉(zhuǎn)、浮點(diǎn)和內(nèi)存執(zhí)行單元。幾種不同的執(zhí)行單元可以集成在同一條流水線上。例如:一個(gè)整型地址邏輯單元和浮點(diǎn)執(zhí)行單元(加法器、乘法器和除法器)同享一個(gè)流水線。數(shù)據(jù)高速緩沖區(qū)由一個(gè)專用的讀取端口和其它的存儲端口交錯(cuò)而成。大多數(shù)簡單操作(整型ALU,浮點(diǎn)加法,甚至浮點(diǎn)乘法)可以按每時(shí)鐘周期完成一至兩個(gè)操作的吞吐量進(jìn)行流水作業(yè)。浮點(diǎn)除法不可以進(jìn)入流水線,長遲延操作可以和短遲延操作并行處理。
P6系列的流水線由三部分構(gòu)成:有序組織的前端(In-Order Issue Front-end)單元,亂序內(nèi)核(Out-of-Order Core)單元和有序的退出(In-Order Retirement)單元。下面將詳細(xì)介紹有序組織的前端單元。
圖2-3 亂序內(nèi)核與退出流水線
由于動態(tài)執(zhí)行處理器按亂序的方式執(zhí)行指令,所以產(chǎn)生了數(shù)量充足的、可供執(zhí)行的微操作,并使大多數(shù)有關(guān)性能調(diào)節(jié)方面的考慮得以實(shí)現(xiàn)。正確的分支預(yù)測和快速的譯碼是有序前端單元提高性能的核心。有關(guān)分支預(yù)測和分支目標(biāo)緩沖區(qū)的詳細(xì)內(nèi)容見2.3節(jié),下面討論譯碼部分。
在每個(gè)時(shí)鐘周期內(nèi),ID1管道階段可以對多達(dá)3條的Intel體系結(jié)構(gòu)宏指令進(jìn)行譯碼。但是,如果指令復(fù)雜或指令長度超過了7個(gè)字節(jié),譯碼器的譯碼指令數(shù)將有所下降。
譯碼器可以譯碼:
(1) 每個(gè)時(shí)鐘周期多達(dá)三條宏指令。
(2) 每個(gè)時(shí)鐘周期多達(dá)六條微操作。
(3) 指令長度大于7的宏指令。
P6系列處理器在D1階段上有3個(gè)譯碼器。第一個(gè)譯碼器可在每個(gè)時(shí)鐘周期完成一個(gè)由四個(gè)以下微操作構(gòu)成的宏指令,其它兩個(gè)譯碼器在每個(gè)時(shí)鐘周期內(nèi)完成一個(gè)由一個(gè)微操作構(gòu)成的宏指令。由多于4個(gè)微操作構(gòu)成的指令將耗費(fèi)多個(gè)時(shí)鐘周期來完成譯碼,在使用匯編語言編程時(shí),按4-1-1微操作序列來安排指令將增加每個(gè)時(shí)鐘周期內(nèi)的譯碼指令數(shù)。通常:
簡單的寄存器——寄存器格式的指令僅用一個(gè)微操作。
讀取指令僅為一個(gè)微操作。
存貯指令為兩個(gè)微操作。
簡單的讀-修改指令為兩個(gè)微操作。
簡單的寄存器——內(nèi)存格式的指令由2-3個(gè)微操作構(gòu)成。
簡單的讀-修改-寫指令由4個(gè)微操作構(gòu)成。
復(fù)雜的指令通常超過4個(gè)微操作,故需耗費(fèi)多個(gè)時(shí)鐘周期譯碼。
為了計(jì)算微操作,MMX?指令都是簡單指令,見《Intel的32位處理器優(yōu)化方案》(Optimizationsfor Intel's 32-bit Processors, Application Note AP-526, OrderNumber 242816)。附錄D是一個(gè)說明Intel體系結(jié)構(gòu)指令集中每一指令所用微操作數(shù)的表。
一旦微操作被譯碼,它們從有序前端單元發(fā)送到保留(RS)站中,保留站是亂序核心管道階段的開始部分。在RS中,微操作等待它們的操作數(shù)變?yōu)橛行?。一旦一條微操作的所有操作數(shù)有效,它將從RS中被送到一個(gè)執(zhí)行單元。如果一個(gè)微操作在數(shù)據(jù)準(zhǔn)備好的狀態(tài)下進(jìn)入RS(即為全部數(shù)據(jù)有效),那么該微操作將立即被送到一個(gè)合適的且有效的執(zhí)行的單元中。在這種情況下,在RS中的微操作只耗費(fèi)了很少的時(shí)鐘周期,全部的執(zhí)行單元聚集在RS的輸出端口上,一旦微操作執(zhí)行完將返回到ROB,并等待退出。在這個(gè)管道階段中,全部數(shù)據(jù)值被回寫到內(nèi)存并且全部的微操作按序退出,一次三條。下圖提供了有關(guān)亂序核心和按序退出管道階段的細(xì)節(jié)。
圖2-4 亂序內(nèi)核和退出流水線
表2-2 動態(tài)執(zhí)行(P6-系列)處理器流水線執(zhí)行單元
端口 執(zhí)行單元 遲延/吞吐量
0 整型ALU單元 遲延1,吞吐量1/每周期
LEA指令 遲延1,吞吐量1/每周期
移位指令 遲延1,吞吐量1/每周期
整數(shù)乘法指令 遲延4,吞吐量1/每周期
浮點(diǎn)單元
FADD指令 遲延3,吞吐量1/每周期
FMUL指令 遲延5,吞吐量1/2每周期1,2
FDIV單元 遲延長,數(shù)據(jù)多,不可流水作業(yè)的吞吐量
MMX?ALU單元 遲延1,吞吐量1/每周期
MMX?乘法單元 遲延3,吞吐量1/每周期
1 整型ALU單元 遲延1,吞吐量1/每周期
MMX?ALU單元 遲延1,吞吐量1/每周期
MMX?移位單元 遲延1,吞吐量1/每周期
2 取單元 命中高速緩存時(shí),遲延3,吞吐量1/每周期4
3 存貯地址單元 遲延3,(非適用)吞吐量1/每周期3
4 存貯數(shù)據(jù)單元 遲延3,(非適用)吞吐量1/每周期
注釋
1.FMUL單元在接收第一個(gè)FMUL后,在下一時(shí)鐘周期內(nèi)不能接收第二個(gè)FMUL,但這并不是說只能在偶數(shù)時(shí)鐘周期內(nèi)執(zhí)行FMUL。
2.流水線上每兩個(gè)時(shí)鐘周期處理一個(gè)FMUL。可以視為P6系列處理器只有一個(gè)32x32->乘法流水線。
3.存貯遲延對于數(shù)據(jù)流的全局來說并不十分重要。重要的是相應(yīng)操作何時(shí)結(jié)束并退出。不同的存貯情況所產(chǎn)生的遲延也不同。例如,在時(shí)鐘周期10,對一個(gè)部分地址進(jìn)行數(shù)據(jù)存貯和地址存貯時(shí),如地址100,在時(shí)鐘周期10也可以對同樣地址100讀取(同樣大小和類型),且不被阻塞。
4.對同一個(gè)地址讀和寫的指令可安排在同一時(shí)鐘周期。
2.2 高速緩存(Cache)
具有MMX?技術(shù)的處理器的在片高速緩存子系統(tǒng),是由兩個(gè)16K的4路線長為32字節(jié)的關(guān)聯(lián)高速緩存體構(gòu)成。高速緩存具有一個(gè)回寫機(jī)制和一個(gè)偽LRU的置換算法。數(shù)據(jù)的高速緩存由八個(gè)按四字節(jié)邊界交錯(cuò)的存貯體構(gòu)成。
在具有MMX?技術(shù)的奔騰處理器上,只要引用的數(shù)據(jù)不在同一個(gè)高速緩存體上,就可以被一條讀取指令和一條存貯指令同時(shí)訪問。在具有MMX?技術(shù)的奔騰處理器上,高速緩存訪問失敗的遲延為8個(gè)內(nèi)部時(shí)鐘周期。在具有MMX?技術(shù)的動態(tài)執(zhí)行處理器中,最小遲延是10個(gè)內(nèi)部時(shí)鐘周期。
2.3 分支目標(biāo)緩存
具有MMX?技術(shù)的奔騰處理器和動態(tài)執(zhí)行處理器在分支預(yù)測方面,除一個(gè)較小的異常處理外(本書2.3.1節(jié)中討論),在功能上完全一樣。
分支目標(biāo)緩沖區(qū)(BTB)存貯了預(yù)先所見的分支和它們的目標(biāo)。當(dāng)一個(gè)分支被預(yù)取后,BTB將目標(biāo)地址直接填入到指令讀取單元(IFU)。一旦分支被執(zhí)行,BTB將隨著目標(biāo)地址而改變。使用分支目標(biāo)緩存時(shí),預(yù)先所見的分支被動態(tài)預(yù)告。分支目標(biāo)緩存的預(yù)測算法包括了模式匹配和每目標(biāo)多達(dá)4位的預(yù)測歷史位。例如,一個(gè)具有4個(gè)迭代長度的循環(huán)將百分之百地被正確預(yù)測到。遵循下列原則將提高預(yù)測性能:
編寫條件分支(除循環(huán)外)可將最常執(zhí)行的分支緊接在分支指令后(即失敗)。
另外,具有MMX?技術(shù)的處理器有一個(gè)堆棧返回緩存(RSB, Return Stack Buffer),可以連續(xù)地為不同地址上調(diào)用的過程正確地預(yù)測其返回地址,進(jìn)一步為展開具有函數(shù)調(diào)用的循環(huán)帶來了益處,并刪除了某些需要in-line的過程。
2.3.1 相連分支
另外,在具有MMX?技術(shù)的奔騰處理器上,如果兩個(gè)分支指令的最后一個(gè)字節(jié)在同一個(gè)按四字節(jié)對齊的內(nèi)存段內(nèi),則分支不可預(yù)測。如下圖所示:
圖2-5 相連分支的例子
這種情況,發(fā)生在兩個(gè)相連分支間沒有間隔指令且第二個(gè)指令只有兩個(gè)字節(jié)長的情況下(如+/-128字節(jié)的相對跳轉(zhuǎn)指令)。
為避免這種無法預(yù)測的情況,應(yīng)使第二分支加長,在分支指令中用16位的相對位移代替8位的相對位移。
2.4 寫緩存
具有MMX?技術(shù)的處理器具有4個(gè)寫緩存(相對無MMX?技術(shù)的奔騰處理器的兩個(gè)寫緩存)。另外,寫緩存可以被U管道使用,也可以被V管道使用(相對無MMX?技術(shù)的奔騰處理器的一個(gè)寫緩存對應(yīng)一個(gè)管道的情況)。通過對內(nèi)存寫操作進(jìn)行安排調(diào)度,可以提高關(guān)鍵循環(huán)的性能。如果你不想看到寫未命中,每組指令不能安排多于4條寫指令。并在安排另外的寫指令前調(diào)度其它指令。
本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊舉報(bào)。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
深入淺談,CPU設(shè)計(jì)原理(已完結(jié))
Intel® Nehalem/Westmere架構(gòu)/微架構(gòu)/流水線 (1) - 特性概述
淺談分支預(yù)測、流水線與條件轉(zhuǎn)移
微體系結(jié)構(gòu)
輕松讀懂移動處理器 CPU微架構(gòu)全解析
特斯拉自研芯片架構(gòu)帶來的啟示
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服