歡迎來(lái)到裝配圖網(wǎng)! | 幫助中心 裝配圖網(wǎng)zhuangpeitu.com!
裝配圖網(wǎng)
ImageVerifierCode 換一換
首頁(yè) 裝配圖網(wǎng) > 資源分類(lèi) > PPT文檔下載  

計(jì)算機(jī)系統(tǒng)結(jié)構(gòu)第6章.ppt

  • 資源ID:15094397       資源大?。?span id="rs33slt" class="font-tahoma">1MB        全文頁(yè)數(shù):89頁(yè)
  • 資源格式: PPT        下載積分:14.9積分
快捷下載 游客一鍵下載
會(huì)員登錄下載
微信登錄下載
三方登錄下載: 微信開(kāi)放平臺(tái)登錄 支付寶登錄   QQ登錄   微博登錄  
二維碼
微信掃一掃登錄
下載資源需要14.9積分
郵箱/手機(jī):
溫馨提示:
用戶(hù)名和密碼都是您填寫(xiě)的郵箱或者手機(jī)號(hào),方便查詢(xún)和重復(fù)下載(系統(tǒng)自動(dòng)生成)
支付方式: 支付寶    微信支付   
驗(yàn)證碼:   換一換

 
賬號(hào):
密碼:
驗(yàn)證碼:   換一換
  忘記密碼?
    
友情提示
2、PDF文件下載后,可能會(huì)被瀏覽器默認(rèn)打開(kāi),此種情況可以點(diǎn)擊瀏覽器菜單,保存網(wǎng)頁(yè)到桌面,就可以正常下載了。
3、本站不支持迅雷下載,請(qǐng)使用電腦自帶的IE瀏覽器,或者360瀏覽器、谷歌瀏覽器下載即可。
4、本站資源下載后的文檔和圖紙-無(wú)水印,預(yù)覽文檔經(jīng)過(guò)壓縮,下載后原文更清晰。
5、試題試卷類(lèi)文檔,如果標(biāo)題沒(méi)有明確說(shuō)明有答案則都視為沒(méi)有答案,請(qǐng)知曉。

計(jì)算機(jī)系統(tǒng)結(jié)構(gòu)第6章.ppt

第6章 指令級(jí)并行的開(kāi)發(fā) 軟件方法,6.1 基本指令調(diào)度及循環(huán)展開(kāi) 6.2 跨越基本塊的靜態(tài)指令調(diào)度 6.3 靜態(tài)多指令流出:VLIW技術(shù) 6.4 顯式并行指令計(jì)算EPIC 6.5 開(kāi)發(fā)更多的指令級(jí)并行 6.6 實(shí)例:IA-64體系結(jié)構(gòu),指令調(diào)度:找出不相關(guān)的指令序列,讓它們?cè)诹魉€(xiàn)上重疊并行執(zhí)行。 制約編譯器指令調(diào)度的因素 程序固有的指令級(jí)并行 流水線(xiàn)功能部件的延遲,6.1 基本指令調(diào)度及循環(huán)展開(kāi),6.1.1 指令調(diào)度的基本方法,表6.1本節(jié)使用的浮點(diǎn)流水線(xiàn)的延遲,6.1 基本指令調(diào)度及循環(huán)展開(kāi),例6.1 對(duì)于下面的源代碼,轉(zhuǎn)換成MIPS匯編語(yǔ)言,在不進(jìn)行指令調(diào)度和進(jìn)行指令調(diào)度兩種情況下,分析其代碼一次循環(huán)所需的執(zhí)行時(shí)間。 for (i=1000; i0; i-) xi = xi + s; 解: 先把該程序翻譯成MIPS匯編語(yǔ)言代碼 Loop:L.D F0, 0(R1) ADD.D F4, F0, F2 S.D F4, 0(R1) DADDIU R1, R1, #-8 BNE R1, R2, Loop,6.1 基本指令調(diào)度及循環(huán)展開(kāi),在不進(jìn)行指令調(diào)度的情況下,根據(jù)表中給出的浮點(diǎn)流水線(xiàn)中指令執(zhí)行的延遲,程序的實(shí)際執(zhí)行情況如下: 指令流出時(shí)鐘 Loop:L.D F0, 0(R1)1 (空轉(zhuǎn))2 ADD.D F4, F0, F23 (空轉(zhuǎn))4(空轉(zhuǎn))5 S.D F4, 0(R1)6 DADDIU R1, R1, #-87 (空轉(zhuǎn))8 BNE R1, R2, Loop9 (空轉(zhuǎn))10,6.1 基本指令調(diào)度及循環(huán)展開(kāi),在用編譯器對(duì)上述程序進(jìn)行指令調(diào)度以后,程序的執(zhí)行情況如下: 指令流出時(shí)鐘 Loop:L.D F0, 0(R1)1 DADDIU R1, R1, #-8 2 ADD.D F4, F0, F23 (空轉(zhuǎn))4BNE R1, R2, Loop 5 S.D F4, 8(R1)6,6.1 基本指令調(diào)度及循環(huán)展開(kāi),進(jìn)一步分析: 編譯時(shí)指令調(diào)度是怎樣減少整個(gè)指令序列在流水線(xiàn)上的執(zhí)行時(shí)間的? 指令調(diào)度能否跨越分支邊界? 怎樣提高整個(gè)執(zhí)行過(guò)程中有效操作的比率?,循環(huán)展開(kāi) 把循環(huán)體的代碼復(fù)制多次并按順序排放, 然后相應(yīng)調(diào)整循環(huán)的結(jié)束條件。 開(kāi)發(fā)循環(huán)級(jí)并行的有效方法 例6.2 將例6.1中的循環(huán)展開(kāi)3次得到4個(gè)循環(huán)體,然后對(duì)展開(kāi)后的指令序列在不調(diào)度和調(diào)度兩種情況下,分析代碼的性能。假定R1的初值為32的倍數(shù),即循環(huán)次數(shù)為4的倍數(shù)。消除冗余的指令,并且不要重復(fù)使用寄存器。,6.1.2 循環(huán)展開(kāi),6.1 基本指令調(diào)度及循環(huán)展開(kāi),展開(kāi)后沒(méi)有調(diào)度的代碼如下(需要分配寄存器),指令流出時(shí)鐘 Loop:L.DF0, 0(R1)1 (空轉(zhuǎn))2 ADD.DF4, F0, F23 (空轉(zhuǎn))4 (空轉(zhuǎn))5 S.DF4, 0(R1)6 L.DF6, -8(R1)7 (空轉(zhuǎn))8 ADD.DF8, F6, F29 (空轉(zhuǎn))10 (空轉(zhuǎn))11 S.DF8, -8(R1)12 L.DF10, -16(R1)13 (空轉(zhuǎn))14,指令流出時(shí)鐘 ADD.DF12, F10, F215 (空轉(zhuǎn))16 (空轉(zhuǎn))17 S.DF12, -16(R1)18 L.DF14, -24(R1)19 (空轉(zhuǎn))20 ADD.DF16, F14, F221 (空轉(zhuǎn))22 (空轉(zhuǎn))23 S.DF16, -24(R1)24 DADDIUR1, R1, # -3225 (空轉(zhuǎn))26 BNER1, R2, Loop27 (空轉(zhuǎn))28,50%是空轉(zhuǎn)周期!,調(diào)度后的代碼如下:,指令流出時(shí)鐘 Loop:L.DF0, 0(R1)1 L.DF6, -8(R1)2 L.DF10, -16(R1)3 L.DF14, -24(R1)4 ADD.DF4, F0, F25 ADD.DF8, F6, F26 ADD.DF12, F10, F27 ADD.DF16, F14, F28 S.DF4, 0(R1)9 S.DF8, -8(R1)10 DADDIUR1, R1, # -3212 S.DF12, 16(R1)11 BNER1, R2, Loop13 S.DF16, 8(R1)14,沒(méi)有空轉(zhuǎn)周期!,結(jié)論:通過(guò)循環(huán)展開(kāi)、寄存器重命名和指令調(diào)度,可以有效開(kāi)發(fā)出指令級(jí)并行。,6.1 基本指令調(diào)度及循環(huán)展開(kāi),循環(huán)展開(kāi)和指令調(diào)度的注意事項(xiàng) 保證正確性 注意有效性 使用不同的寄存器 刪除多余的測(cè)試指令和分支指令,并對(duì)循環(huán)結(jié)束代碼和新的循環(huán)體代碼進(jìn)行相應(yīng)的修正。 注意對(duì)存儲(chǔ)器數(shù)據(jù)的相關(guān)性分析 注意新的相關(guān)性,概述 目標(biāo):在保持原有數(shù)據(jù)相關(guān)和控制相關(guān)不變的前提下,盡可能地縮短包含分支結(jié)構(gòu)的代碼段的總執(zhí)行時(shí)間。 單流出處理器減少指令數(shù) 多流出處理器縮短關(guān)鍵路徑長(zhǎng)度 基本思想:在循環(huán)體內(nèi)的多個(gè)基本塊間移動(dòng)指令,擴(kuò)大那些執(zhí)行頻率較高的基本塊的體積。,6.2 跨越基本塊的靜態(tài)指令調(diào)度,6.2.1 全局指令調(diào)度,6.2 跨越基本塊的靜態(tài)指令調(diào)度,實(shí)例分析 由于分支條件為true(轉(zhuǎn)移)的概率大,全局指令調(diào)度時(shí)會(huì)將語(yǔ)句1、2、3、5合并為一個(gè)更大的基本塊。,一個(gè)分支結(jié)構(gòu)的代碼段,如何保證分支條件為false時(shí)結(jié)果依然正確? 如何將語(yǔ)句3和5調(diào)度到語(yǔ)句2之前?,6.2 跨越基本塊的靜態(tài)指令調(diào)度,將上圖中的代碼轉(zhuǎn)換為下面的MIPS匯編指令,LDR4,0(R1)/ 取A LDR5,0(R2)/ 取B DADDUR4,R4,R5/ A=A+B SD0(R1),R4/ 存A BNEZR4,elsepart/ A=0則轉(zhuǎn)移 X/ 代碼段X,基本塊elsepart Jjoin thenpart:/ 基本塊thenpart SD,0(R2)/ 指令I(lǐng)1,對(duì)應(yīng)語(yǔ)句3 join: SD,0(R3)/ 指令I(lǐng)2,對(duì)應(yīng)語(yǔ)句5,6.2 跨越基本塊的靜態(tài)指令調(diào)度,調(diào)度指令I(lǐng)1 直接將I1移到BEQZ前是否會(huì)產(chǎn)生錯(cuò)誤結(jié)果? 向基本塊elsepart中增加補(bǔ)償代碼 補(bǔ)償代碼有可能帶來(lái)額外時(shí)間開(kāi)銷(xiāo) 調(diào)度指令I(lǐng)2 將I2移動(dòng)到基本塊thenpart中,同時(shí)復(fù)制到elsepart中。 若不影響執(zhí)行結(jié)果,將I2調(diào)度到BEQZ前,同時(shí)刪除elsepart中的副本。,6.2 跨越基本塊的靜態(tài)指令調(diào)度,全局指令調(diào)度是一個(gè)很復(fù)雜的問(wèn)題 以I1的調(diào)度為例: 需要確定分支中基本塊thenpart和elsepart的執(zhí)行頻率各是多少? 在分支語(yǔ)句前完成I1所需的開(kāi)銷(xiāo)是多大? 調(diào)度I1是否能夠縮短thenpart塊的執(zhí)行時(shí)間? I1是否是最佳的被調(diào)度對(duì)象? 是否需要向elsepart塊中增加補(bǔ)償代碼,補(bǔ)償代碼開(kāi)銷(xiāo)如何?怎樣生成補(bǔ)償代碼?,概述 蹤跡(trace):程序執(zhí)行的指令序列,通常由一個(gè)或多個(gè)基本塊組成,trace內(nèi)可以有分支,但一定不能包含循環(huán)。 蹤跡調(diào)度(trace scheduling)會(huì)優(yōu)化執(zhí)行頻率高的trace,減少其執(zhí)行開(kāi)銷(xiāo)。由于需要添加補(bǔ)償代碼以確保正確性,那些執(zhí)行頻率較低的trace的開(kāi)銷(xiāo)反而會(huì)有所增加。 蹤跡調(diào)度非常適合多流出處理器。,6.2.2 蹤跡調(diào)度,6.2 跨越基本塊的靜態(tài)指令調(diào)度,蹤跡調(diào)度的步驟 分為兩步:蹤跡選擇和蹤跡壓縮 蹤跡選擇 從程序的控制流圖中選擇執(zhí)行頻率較高的路徑,每條路徑就是一條trace。 處理轉(zhuǎn)移成功與失敗概率相差較大的情況 循環(huán)結(jié)構(gòu):循環(huán)展開(kāi) 分支結(jié)構(gòu):根據(jù)典型輸入集下的運(yùn)行統(tǒng)計(jì)信息,6.2 跨越基本塊的靜態(tài)指令調(diào)度,蹤跡選擇實(shí)例分析,6.2 跨越基本塊的靜態(tài)指令調(diào)度,將左邊的循環(huán)展開(kāi)4次并把陰影部分(執(zhí)行頻率高)拼接在一起就可以得到一條trace; 一條trace可以有多個(gè)入口和多個(gè)出口。,蹤跡壓縮 對(duì)已生成的trace進(jìn)行指令調(diào)度和優(yōu)化,盡可能地縮短其執(zhí)行時(shí)間; 跨越trace內(nèi)部的入口或出口調(diào)度指令時(shí)必須非常小心,有時(shí)還需要增加補(bǔ)償代碼 。,6.2 跨越基本塊的靜態(tài)指令調(diào)度,三條trace:B1-B3、B4以及B5-B7 指令“y = x - y”被從B1調(diào)度到B3中,跨越了trace的一個(gè)出口; 需要向塊B2中增加補(bǔ)償代碼,即將指令“y = x - y”復(fù)制到B2的第一條指令之前 。,蹤跡調(diào)度的性能特點(diǎn) 蹤跡調(diào)度能夠提升性能的最根本原因在于選出的trace都是執(zhí)行頻率很高的路徑,減少它們的執(zhí)行開(kāi)銷(xiāo)有助于縮短程序的總執(zhí)行時(shí)間。 對(duì)于某些應(yīng)用,補(bǔ)償代碼引起的開(kāi)銷(xiāo)很有可能降低蹤跡調(diào)度的優(yōu)化效果。 蹤跡調(diào)度會(huì)大大增加編譯器的實(shí)現(xiàn)復(fù)雜度。,6.2 跨越基本塊的靜態(tài)指令調(diào)度,概述 在蹤跡調(diào)度中,如果trace入口或出口位于trace內(nèi)部,編譯器生成補(bǔ)償代碼的難度將大大增加,而且編譯器很難評(píng)估這些補(bǔ)償代碼究竟會(huì)帶來(lái)多少性能損失。 超塊(superblock)是只能擁有一個(gè)入口,但可以擁有多個(gè)出口的結(jié)構(gòu) 超塊的構(gòu)造過(guò)程與trace相似,但怎樣確保只有一個(gè)入口?,6.2.3 超塊調(diào)度,6.2 跨越基本塊的靜態(tài)指令調(diào)度,超塊構(gòu)造尾復(fù)制技術(shù),6.2 跨越基本塊的靜態(tài)指令調(diào)度,將左邊的循環(huán)展開(kāi)4次并把陰影部分(執(zhí)行頻率高)拼接在一起就可以得到一個(gè)超塊; 超塊有1個(gè)入口和5個(gè)出口(n=4/3/2/1/0)。 除了n=0外,從其他4個(gè)出口退出超塊后,還需要繼續(xù)完成余下的n次疊代(黃色部分)。,超塊調(diào)度的性能特點(diǎn) 尾復(fù)制技術(shù)簡(jiǎn)化了補(bǔ)償代碼的生成過(guò)程,并降低了指令調(diào)度的復(fù)雜度。 超塊結(jié)構(gòu)目標(biāo)代碼的體積也大大增加。 補(bǔ)償代碼的生成使得編譯過(guò)程更加復(fù)雜,而且由于無(wú)法準(zhǔn)確評(píng)估由補(bǔ)償代碼引起的時(shí)間開(kāi)銷(xiāo),這限制方法超塊調(diào)度的應(yīng)用范圍。,6.2 跨越基本塊的靜態(tài)指令調(diào)度,VLIW vs. 超標(biāo)量 在動(dòng)態(tài)調(diào)度的超標(biāo)量處理器中,相關(guān)檢測(cè)和指令調(diào)度基本都由硬件完成。 在靜態(tài)調(diào)度的超標(biāo)量處理器中,部分相關(guān)檢測(cè)和指令調(diào)度工作交由編譯器完成。 在VLIW處理器中,相關(guān)檢測(cè)和指令調(diào)度工作全部由編譯器完成,它需要更“智能”的編譯器。,6.3 靜態(tài)多指令流出:VLIW技術(shù),實(shí)例分析,6.3 靜態(tài)多指令流出VLIW技術(shù),例6.3 假設(shè)某VLIW處理器每個(gè)時(shí)鐘周期可以同時(shí)流出5個(gè)操作,包括2個(gè)訪存操作,2個(gè)浮點(diǎn)操作以及1個(gè)整數(shù)或分支操作。將例6.1中的代碼循環(huán)展開(kāi),并調(diào)度到該VLIW處理器上執(zhí)行。循環(huán)展開(kāi)次數(shù)不定,但至少要能夠保證消除所有流水線(xiàn)“空轉(zhuǎn)”周期,同時(shí)不考慮分支延遲。,解:循環(huán)被展開(kāi)7次,經(jīng)調(diào)度后可以消除所有流水線(xiàn)“空轉(zhuǎn)”。在不考慮分支延遲的情況下,每執(zhí)行一個(gè)疊代需要9個(gè)時(shí)鐘周期,計(jì)算出7個(gè)結(jié)果,即平均每得到一個(gè)結(jié)果需要1.29個(gè)周期。 VLIW的不足: 編碼效率僅比50%略高一些 所需要的寄存器數(shù)量也大大增加,6.3 靜態(tài)多指令流出VLIW技術(shù),VLIW性能分析 VLIW目標(biāo)代碼編碼效率低 為消除流水線(xiàn)“空轉(zhuǎn)”需要增加循環(huán)展開(kāi)的次數(shù) 很難從應(yīng)用程序中找到足夠多的并行指令填滿(mǎn)VLIW指 令中的每一個(gè)slot VLIW流水線(xiàn)的互鎖機(jī)制 VLIW處理器中沒(méi)有實(shí)現(xiàn)任何相關(guān)檢測(cè)邏輯,而是靠互 鎖機(jī)制保證執(zhí)行結(jié)果的正確 這種簡(jiǎn)單的互鎖機(jī)制將造成較大的開(kāi)銷(xiāo) 目標(biāo)代碼兼容性差 二進(jìn)制翻譯,6.3 靜態(tài)多指令流出VLIW技術(shù),性能比較多流出處理器 vs. 向量處理器 即使對(duì)于一些結(jié)構(gòu)不規(guī)則的代碼,多流出處理器也能從中挖掘出一些指令級(jí)并行。 多流出處理器對(duì)存儲(chǔ)系統(tǒng)沒(méi)有過(guò)高的要求,價(jià)格較便宜、由Cache和主存構(gòu)成的多層次存儲(chǔ)子系統(tǒng)即可滿(mǎn)足其對(duì)性能的要求。,6.3 靜態(tài)多指令流出VLIW技術(shù),結(jié)論:多流出處理器已成為當(dāng)前實(shí)現(xiàn)指令級(jí)并行的主要選擇,而向量處理器則通常是作為協(xié)處理器集成到計(jì)算機(jī)系統(tǒng)中,以加速特定類(lèi)型的應(yīng)用程序。,超標(biāo)量和VLIW結(jié)構(gòu)都存在嚴(yán)重不足 超標(biāo)量硬件復(fù)雜度太高,8流出成為極限; VLIW存在代碼兼容問(wèn)題,編譯器智能程度不夠。 EPIC技術(shù)在VLIW基礎(chǔ)上融合了超標(biāo)量的一些優(yōu)點(diǎn) 編譯器通過(guò)蹤跡調(diào)度、超塊調(diào)度等帶有極強(qiáng)猜測(cè)性的優(yōu)化 技術(shù)盡可能多地挖掘指令級(jí)并行。 流水線(xiàn)硬件則提供豐富的計(jì)算資源實(shí)現(xiàn)這些指令級(jí)并行, 并通過(guò)專(zhuān)門(mén)的機(jī)制確保在程序執(zhí)行過(guò)程中出現(xiàn)預(yù)測(cè)錯(cuò)誤時(shí) 仍然能得到正確的運(yùn)行結(jié)果,盡量減少由此引起的額外開(kāi) 銷(xiāo)。,6.4 顯示并行指令計(jì)算EPIC,什么是EPIC? 指令級(jí)并行主要由編譯器負(fù)責(zé)開(kāi)發(fā),處理器為保證代碼正 確執(zhí)行提供必要的硬件支持,只有在這些硬件機(jī)制的輔助 下這些優(yōu)化技術(shù)才能高效完成。 系統(tǒng)結(jié)構(gòu)必須提供某種通信機(jī)制,使得流水線(xiàn)硬件能夠了 解編譯器“安排”好的指令執(zhí)行順序。 EPIC編譯器的高級(jí)優(yōu)化技術(shù) 非綁定分支 謂詞執(zhí)行 前瞻執(zhí)行,6.4 顯示并行指令計(jì)算EPIC,分支指令在傳統(tǒng)流水線(xiàn)上的執(zhí)行過(guò)程 計(jì)算分支轉(zhuǎn)移條件 生成分支目標(biāo)地址 取下一條指令 譯碼并流出下一條指令,6.4.1 非綁定分支,6.4 顯示并行指令計(jì)算EPIC,在傳統(tǒng)流水線(xiàn)上,分支指令都具有“原子性”,即上述各操作被綁定在一起,不能分開(kāi)。,非綁定分支技術(shù) 核心思想:將分支指令劃分為多條粒度更小的指令,獨(dú)立執(zhí)行。 準(zhǔn)備操作:計(jì)算分支目標(biāo)地址 比較操作:計(jì)算分支轉(zhuǎn)移條件 轉(zhuǎn)移操作:根據(jù)分支轉(zhuǎn)移條件是true還是false,改變控 制流或執(zhí)行順序的下一條指令。 運(yùn)行時(shí),流水線(xiàn)硬件根據(jù)前兩個(gè)操作的結(jié)果,動(dòng)態(tài)地將第三個(gè)操作轉(zhuǎn)換為空操作或無(wú)條件轉(zhuǎn)移。 前兩個(gè)操作應(yīng)盡早完成,6.4 顯示并行指令計(jì)算EPIC,條件執(zhí)行機(jī)制 條件執(zhí)行:指指令的執(zhí)行依賴(lài)于一定的條件,當(dāng)條件為真時(shí)指令將正常執(zhí)行,否則將什么也不做。 實(shí)例:條件傳輸指令 例6.4 在下面的語(yǔ)句中, if(A=0)S=T; 假設(shè)變量A、S、T的值分別保存在寄存器R1、R2和R3內(nèi)。請(qǐng) 用分支指令和條件傳輸指令編寫(xiě)功能相同的匯編代碼。,6.4.2 謂詞執(zhí)行,6.4 顯示并行指令計(jì)算EPIC,解:包含分支指令的MIPS匯編代碼如下: BNEZ R1,L ADDU R2,R3,R0 L: 而使用條件傳輸指令CMOVZ時(shí)的匯編代碼為: CMOVZ R2,R3,R1 指令CMOVZ有3個(gè)操作數(shù),R2為目的操作數(shù),R1和R3是源操作 數(shù),執(zhí)行條件保存在寄存器R1中。 當(dāng)R1=0時(shí),R3的值被復(fù)制到R2中,否則R2的內(nèi)容不變。,6.4 顯示并行指令計(jì)算EPIC,分析 條件傳輸指令將分支指令引起的控制相關(guān)轉(zhuǎn)換為相對(duì)于分支轉(zhuǎn)移條件(R1)的數(shù)據(jù)相關(guān)。 條件執(zhí)行機(jī)制能夠刪除代碼中那些行為難以預(yù)測(cè)的分支指令,提高分支預(yù)測(cè)準(zhǔn)確率,并減少由于分支預(yù)測(cè)錯(cuò)誤帶來(lái)的性能損失。 無(wú)論指令的執(zhí)行條件是否為真,指令都將被讀出、譯碼并執(zhí)行。 這種編譯優(yōu)化技術(shù)叫做條件轉(zhuǎn)換。,6.4 顯示并行指令計(jì)算EPIC,條件傳輸指令的應(yīng)用計(jì)算絕對(duì)值 求絕對(duì)值的運(yùn)算A = abs(B),對(duì)應(yīng)的C語(yǔ)句為: if(B<0)A=-B; else A=B; 使用條件傳輸指令后,代碼段如下(假設(shè)變量A和B分別被保存在寄存器R1和R2中): SUB R1,R0,R2 / A = -B SLT R3,R2,R0 / 若B<0,R3=1, / 否則R3=0 CMOVZ R1,R2,R3/ R3=0時(shí),A = B,6.4 顯示并行指令計(jì)算EPIC,謂詞執(zhí)行機(jī)制 條件傳輸指令的性能問(wèn)題 隨著指令數(shù)的增加,經(jīng)過(guò)條件轉(zhuǎn)換得到的條件傳輸指令和條件計(jì)算指令的數(shù)量也將增加,這會(huì)大大降低目標(biāo)代碼的效率。 謂詞執(zhí)行(predicated execution) 給指令集中的每條指令都增加一個(gè)執(zhí)行條件,這個(gè)執(zhí)行條件就叫做謂詞(predicate)。 若謂詞為真,指令正常執(zhí)行,否則什么也不做。,6.4 顯示并行指令計(jì)算EPIC,謂詞執(zhí)行機(jī)制實(shí)例分析,6.4 顯示并行指令計(jì)算EPIC,例6.5 假設(shè)在一個(gè)周期內(nèi),某雙流出的超標(biāo)量處理器可以同時(shí) 執(zhí)行一個(gè)訪存操作和一個(gè)ALU操作,或者僅執(zhí)行一個(gè)分支操作。受 此限制,下面這段匯編代碼的執(zhí)行效率并不高,表現(xiàn)在: (1)第二個(gè)周期只能流出一條ALU指令,訪存單元空閑; (2)當(dāng)分支轉(zhuǎn)移不成功時(shí),BEQZ指令后的兩條LW指令之間存 在的數(shù)據(jù)相關(guān)將引起流水線(xiàn)暫停。 試通過(guò)謂詞執(zhí)行機(jī)制解決這兩個(gè)問(wèn)題,減少此段代碼的執(zhí)行開(kāi)銷(xiāo)。,例6.5的代碼段,6.4 顯示并行指令計(jì)算EPIC,解 我們用LWC表示帶謂詞的LW指令,并假設(shè)該指令的執(zhí)行條 件為謂詞不等于0。這樣,BEQZ后的第一條LW指令就可以被轉(zhuǎn)換 為L(zhǎng)WC指令,并被調(diào)度到第二個(gè)周期執(zhí)行,如下所示:,6.4 顯示并行指令計(jì)算EPIC,分析 調(diào)度后代碼的執(zhí)行時(shí)間縮短了。 若分支轉(zhuǎn)移成功,LWC將被轉(zhuǎn)換為空操作,這不影響結(jié)果的正確性,但也不會(huì)縮短執(zhí)行時(shí)間。 周期4中的LW指令轉(zhuǎn)換為L(zhǎng)WC,結(jié)果如何?,6.4 顯示并行指令計(jì)算EPIC,謂詞執(zhí)行機(jī)制異常處理 謂詞執(zhí)行增加了異常處理的復(fù)雜度 例若LWC指令執(zhí)行時(shí)發(fā)生缺頁(yè)中斷,如何處理? LWC的謂詞為true,中斷本應(yīng)發(fā)生; LWC的謂詞為false,中斷不應(yīng)發(fā)生。,6.4 顯示并行指令計(jì)算EPIC,如何將謂詞為假的指令轉(zhuǎn)換為空操作? 兩種方法 流水線(xiàn)前端指令流出時(shí) 流水線(xiàn)后端結(jié)果確認(rèn)時(shí) 一般采用第二種方法 為什么?,6.4 顯示并行指令計(jì)算EPIC,概述 謂詞執(zhí)行與全局指令調(diào)度的不足之處 僅有少量結(jié)構(gòu)全面實(shí)現(xiàn)謂詞執(zhí)行 全局指令調(diào)度往往需要補(bǔ)償代碼 EPIC通過(guò)前瞻執(zhí)行提高猜測(cè)執(zhí)行的效果 什么是前瞻執(zhí)行? 在數(shù)據(jù)相關(guān)或控制相關(guān)尚未消除時(shí),將指令調(diào)度到相關(guān) 指令前猜測(cè)執(zhí)行。 通過(guò)硬件機(jī)制完成異常處理,確保正確性。,6.4.3 前瞻執(zhí)行,6.4 顯示并行指令計(jì)算EPIC,影響前瞻執(zhí)行效果的因素 編譯器能力的高低:能否準(zhǔn)確識(shí)別可以被前瞻執(zhí)行的指令。 異常處理機(jī)制:能否推遲處理由被前瞻執(zhí)行的指令引起的 異常,直到確定前瞻指令確實(shí)被執(zhí)行后。 如何避免前瞻引起的錯(cuò)誤?,6.4 顯示并行指令計(jì)算EPIC,實(shí)例分析,6.4 顯示并行指令計(jì)算EPIC,例6.6 下面是一個(gè)if-then-else結(jié)構(gòu)的C程序段以及相應(yīng)的MIPS匯 編代碼段,其中變量A和B分別被保存在地址為0(R3)和0(R2)的存儲(chǔ) 單元中。若分支轉(zhuǎn)移不成功的概率很大,請(qǐng)利用前瞻執(zhí)行技術(shù)將第 二條LD指令調(diào)度到分支指令BNEZ前執(zhí)行。假設(shè)寄存器R14空閑。,C語(yǔ)句: if (A0)A=A+4;else A=B; 匯編指令: LDR1,0(R3) / 取A BNEZR1,L1 /(A0)? LDR1,0(R2) / A=B(else部分) JL2 L1:DADDIR1,R1,#4 / A=A+4(then部分) L2:SDR1,0(R3) / 存A,6.4 顯示并行指令計(jì)算EPIC,解 調(diào)度結(jié)果如下: LDR1,0(R3)/ 取A sLDR14,0(R2) / 取B,前瞻執(zhí)行 BEQZR1,L3 DADDI R14,R1,#4 / A=A+4 L3:SDR14,0(R3) / A=B,6.4 顯示并行指令計(jì)算EPIC,前瞻執(zhí)行異常處理機(jī)制 問(wèn)題:若執(zhí)行sLD時(shí)發(fā)生異常應(yīng)該如何處理? 有四種方法 終止性異常 vs 可繼續(xù)異常 方法一: 立即處理 此前瞻指令引起的異常只是簡(jiǎn)單地返回一個(gè)未定義值即可 ,而不是立即結(jié)束程序的運(yùn)行。 前瞻正確時(shí),正在執(zhí)行的程序不會(huì)被終止,但它的執(zhí)行結(jié) 果肯定是錯(cuò)誤的。 前瞻錯(cuò)誤時(shí),程序也將繼續(xù)執(zhí)行下去,只是處理該異常的 返回值不會(huì)被使用。,6.4 顯示并行指令計(jì)算EPIC,方法二:借助專(zhuān)門(mén)的檢測(cè)指令判斷是否需要處理 代碼實(shí)例 LDR1,0(R3) / 取A sLDR14,0(R2) / 取B,前瞻執(zhí)行 BEQZR1,L1 SPECCK0(R2) / sLD是否產(chǎn)生異常 JL2 L1:DADDIR14,R1,#4 / A=A+4 L2:SDR14,0(R3) / A=B SPECCK的執(zhí)行條件與sLD指令相同(分支轉(zhuǎn)移失?。?基本思想:推遲處理由前瞻指令sLD引發(fā)的異常,直到已確定該指令確實(shí)應(yīng)該被執(zhí)行 。,6.4 顯示并行指令計(jì)算EPIC,方法三:借助寄存器狀態(tài)位判斷是否需要處理 為每個(gè)通用寄存器增加一個(gè)特殊的狀態(tài)標(biāo)志位:“poison”位 前瞻指令引發(fā)的可繼續(xù)異常都將被立即處理。 前瞻指令引發(fā)終止性異常時(shí),其目的寄存器R的poison位將被置1,否則該位將被清0。 當(dāng)前瞻指令之后的另一條指令訪問(wèn)R時(shí),若R的poison位為1將觸發(fā)一個(gè)終止性異常。 基本思想:將前瞻指令引起異常的處理推遲到另一條指令訪問(wèn)前瞻指令的目的寄存器時(shí)。,6.4 顯示并行指令計(jì)算EPIC,方法四:借助再定序緩沖器完成 將指令的執(zhí)行結(jié)果保存在再定序緩沖器內(nèi),并按指令流出 的順序依次確認(rèn)。 前瞻指令的確認(rèn)時(shí)機(jī)被推遲,直至能夠確定該指令的前瞻 執(zhí)行是正確(或錯(cuò)誤)的。 除了需要再定序緩沖器等硬件機(jī)制的支持外,也需要在編 譯時(shí)標(biāo)出所有被前瞻的指令,以及這些指令所跨越的條件 分支。,6.4 顯示并行指令計(jì)算EPIC,數(shù)據(jù)前瞻 將load調(diào)度到store之前前瞻執(zhí)行最常見(jiàn)的數(shù)據(jù)前瞻 為保證正確性,編譯器總是會(huì)選擇保守的調(diào)度方法,認(rèn)為相鄰的store與load間存在地址沖突,但在很多情況下,地址并不沖突。 盡早完成load指令有助于縮短關(guān)鍵路徑的長(zhǎng)度。 硬件地址沖突檢測(cè)機(jī)制 當(dāng)load指令前瞻執(zhí)行時(shí),流水線(xiàn)硬件會(huì)將它訪存的地址記錄在一個(gè)特殊的地址表中。,6.4 顯示并行指令計(jì)算EPIC,每執(zhí)行一條store指令,流水線(xiàn)硬件將該指令的訪存地址與地址表中的各有效項(xiàng)進(jìn)行匹配,命中則說(shuō)明出現(xiàn)地址沖突,前瞻失敗。 若控制流抵達(dá)load指令原來(lái)所在的位置時(shí)未出現(xiàn)沖突(編譯時(shí)在此位置放置檢測(cè)指令),說(shuō)明前瞻成功,流水線(xiàn)硬件從地址表中刪除對(duì)應(yīng)的項(xiàng)。,6.4 顯示并行指令計(jì)算EPIC,數(shù)據(jù)前瞻失敗時(shí)的處理 僅load指令被前瞻執(zhí)行:由檢測(cè)指令重新執(zhí)行l(wèi)oad指令即可 數(shù)據(jù)相關(guān)于load的其他指令也被前瞻執(zhí)行:需要補(bǔ)償代碼,why? 全局指令調(diào)度技術(shù)已經(jīng)能夠很好地處理由分支指令引起的控制相關(guān) 容易預(yù)測(cè)的前瞻執(zhí)行 不容易預(yù)測(cè)的謂詞執(zhí)行 指令間的數(shù)據(jù)相關(guān)對(duì)指令級(jí)并行開(kāi)發(fā)的限制作用反而越來(lái)越大,6.5 開(kāi)發(fā)更多的指令級(jí)并行,循環(huán)攜帶相關(guān) 循環(huán)攜帶相關(guān)是指一個(gè)循環(huán)的某個(gè)疊代中的指令與其他疊代中的指令之間的數(shù)據(jù)相關(guān)。 例6.7 在下面的循環(huán)中, for(i=1;i<=100;i=i+1) Ai+1 = Ai + Ci; /* S1 */ Bi+1 = Bi + Ai+1; /* S2 */ 假設(shè)數(shù)組A、B和C中所有元素的存儲(chǔ)地址都互不相同,請(qǐng)問(wèn)語(yǔ)句 S1與S2之間存在哪些數(shù)據(jù)相關(guān)?,6.5.1 挖掘更多的循環(huán)級(jí)并行,6.5 開(kāi)發(fā)更多的指令級(jí)并行,解 S1和S2之間存在兩種不同類(lèi)型的數(shù)據(jù)相關(guān): 循環(huán)攜帶RAW數(shù)據(jù)相關(guān):相鄰連詞疊代的語(yǔ)句S1之間,相鄰 兩次疊代中的語(yǔ)句S2之間。 RAW數(shù)據(jù)相關(guān):同一疊代內(nèi)的語(yǔ)句S2與S1之間。 分析: 循環(huán)攜帶相關(guān)迫使指令只能按照所在疊代的先后順序依 次執(zhí)行。 限制了同一疊代內(nèi)存在數(shù)據(jù)相關(guān)的各語(yǔ)句之間的相對(duì)順序。,6.5 開(kāi)發(fā)更多的指令級(jí)并行,怎樣消除循環(huán)攜帶數(shù)據(jù)相關(guān)? 例6.8 在下面的循環(huán)中,語(yǔ)句S1和S2之間存在哪些數(shù)據(jù)相關(guān)? 該循環(huán)的各次疊代是否可以并行執(zhí)行?如果不能,請(qǐng)修改其代碼, 使之可以并行。 for(i=1;i<=100;i=i+1) Ai = Ai + Bi;/* S1 */ Bi+1 = Ci + Di;/* S2 */ ,6.5 開(kāi)發(fā)更多的指令級(jí)并行,解 第i次疊代中語(yǔ)句S1與第i-1次疊代中語(yǔ)句S2之間存在RAW類(lèi)型 的循環(huán)攜帶數(shù)據(jù)相關(guān),但它們之間沒(méi)有形成環(huán)(S2與上次疊代的S1不 相關(guān))。修改后代碼 A1 = A1 + B1; for(i=1;i<=99;i=i+1) Bi+1 = Ci + Di; /* 原S2 */ Ai+1 = Ai+1 + Bi+1; /* 原S1 */ B101 = C100 + D100;,6.5 開(kāi)發(fā)更多的指令級(jí)并行,修改方法:將存在循環(huán)攜帶相關(guān)的各條指令放在同一個(gè)疊代中,復(fù)雜循環(huán)攜帶數(shù)據(jù)相關(guān)的處理 for(i=6;i<=100;i=i+1) Yi = Yi-5 + Yi; / 相關(guān)距離為5 for(i=2;i<=100;i=i+1) Yi = Yi-1 + Yi; / 相關(guān)距離為1,6.5 開(kāi)發(fā)更多的指令級(jí)并行,編譯器必須檢測(cè)出這種遞歸關(guān)系 (1) 某些系統(tǒng)結(jié)構(gòu)(特別是向量計(jì)算機(jī))為遞歸提供了專(zhuān)門(mén)的硬件支持 (2) 這樣的遞歸結(jié)構(gòu)中通常隱藏著大量的循環(huán)級(jí)并行,存儲(chǔ)別名分析 什么是存儲(chǔ)別名 一個(gè)元素可能同時(shí)擁有多個(gè)合法的地址表達(dá)式 Ai+5、Aj*2-6、Ak 數(shù)組是仿射的 如果一個(gè)一維數(shù)組Am:n的下標(biāo)可以被表示為形如 ai+b的形式,那么就稱(chēng)該數(shù)組是仿射的(affine)。 一個(gè)多維數(shù)組,如果它每一維的下標(biāo)都是仿射的,那 么它就是仿射的。,6.5 開(kāi)發(fā)更多的指令級(jí)并行,GCD測(cè)試法 算法描述 如果GCD(c, a)可以整除(d-b),那么有可能存在存儲(chǔ)別名。 如果GCD測(cè)試的結(jié)果為假(不能整除),那么一定沒(méi)有存儲(chǔ)別名存在。 例6.9 使用GCD測(cè)試方法判斷下面的循環(huán)中是否存在存儲(chǔ)別名。 for(i=1;i<=100;i=i+1) x2*i+3 = x2*i * 5.0; 解 在這個(gè)循環(huán)中,a=2,b=3,c=2,d=0, 那么GCD(a, c)=2,而d-b=-3。 由于2不能整除-3,因此沒(méi)有存儲(chǔ)別名,即無(wú)論i取何值,x2*i+3 與x2*i都將表示數(shù)組x的不同元素。,6.5 開(kāi)發(fā)更多的指令級(jí)并行,數(shù)據(jù)相關(guān)分析 除了檢測(cè)指令之間是否存在數(shù)據(jù)相關(guān)外,編譯器還會(huì)將識(shí)別出的數(shù)據(jù)相關(guān)進(jìn)一步細(xì)分為真數(shù)據(jù)相關(guān)、輸出相關(guān)和反相關(guān)等不同類(lèi)型,以便利用不同的優(yōu)化技術(shù)消除這些相關(guān)。 常用的優(yōu)化有重命名、值傳播、高度消減等。,6.5 開(kāi)發(fā)更多的指令級(jí)并行,重命名優(yōu)化實(shí)例 例6.10 找出下面循環(huán)中的所有數(shù)據(jù)相關(guān),指出它們究竟是真數(shù)據(jù) 相關(guān)、輸出相關(guān)、還是反相關(guān),并利用重命名技術(shù)消除其中的輸出 相關(guān)和反相關(guān)。 for(i=1;i<=100;i=i+1) Yi = Xi / a;/* S1 */ Xi = Xi + a; /* S2 */ Zi = Yi + a; /* S3 */ Yi = a Yi;/* S4 */ ,6.5 開(kāi)發(fā)更多的指令級(jí)并行,解 這4條語(yǔ)句中存在以下相關(guān): 1. S3與S1和S4與S1之間分別存在真數(shù)據(jù)相關(guān)。 2. S2和S1之間存在反相關(guān)。 3. S3和S4之間存在反相關(guān)。 4. S1和S4之間存在輸出相關(guān)。 for(i=1;i<=100;i=i+1) Yi = Xi / a;/* S1 */ Xi = Xi + a; /* S2 */ Zi = Yi + a; /* S3 */ Yi = a Yi;/* S4 */ ,6.5 開(kāi)發(fā)更多的指令級(jí)并行,將原代碼變換為下面的形式,可以消除所有輸出相關(guān)和反相關(guān)。 for(i=1;i<=100;i=i+1) /* 將數(shù)組Y重命名為T(mén)以消除輸出相關(guān) */ Ti = Xi / c; /* 將數(shù)組X重命名為X1以消除反相關(guān) */ X1i = Xi + c; /* 將Y重命名為T(mén)以消除反相關(guān) */ Zi = Ti + c; Yi = c Ti; ,6.5 開(kāi)發(fā)更多的指令級(jí)并行,值傳播優(yōu)化實(shí)例 優(yōu)化前代碼 DADDUIR1,R2,#4 DADDUIR1,R1,#4 優(yōu)化后代碼 DADDUIR1,R2,#8 值傳播優(yōu)化通過(guò)將變量替換為已知的值或表達(dá)式以達(dá)到消除數(shù)據(jù)相關(guān),6.5 開(kāi)發(fā)更多的指令級(jí)并行,高度消減優(yōu)化實(shí)例 目的:縮短數(shù)據(jù)流圖中關(guān)鍵路徑的長(zhǎng)度 優(yōu)化前代碼I ADDR1,R2,R3/* I1 */ ADDR4,R1,R6/* I2 */ ADDR8,R4,R7/* I3 */ 優(yōu)化后代碼I ADDR1,R2,R3 ADDR4,R6,R7 ADDR8,R1,R4,6.5 開(kāi)發(fā)更多的指令級(jí)并行,高度消減優(yōu)化實(shí)例 優(yōu)化前代碼II sum = sum + Xi; sum = sum + Xi+1; sum = sum + Xi+2; sum = sum + Xi+3; sum = sum + Xi+4; 優(yōu)化后代碼II sum = sum + Xi; t1 = Xi+1 + Xi+2; t2 = Xi+3 + Xi+4; t1 = t1 + t2; sum = sum + t1;,6.5 開(kāi)發(fā)更多的指令級(jí)并行,關(guān)鍵路徑長(zhǎng)度為5,關(guān)鍵路徑長(zhǎng)度為3,簡(jiǎn)介 軟流水技術(shù)的核心思想是從循環(huán)不同的疊代中抽取一部分指令(循環(huán)控制指令除外)拼成一個(gè)新的循環(huán)疊代。 目的 將同一疊代中的相關(guān)指令分布到不同的疊代中 將不同疊代中的相關(guān)指令封裝到同一疊代中,6.5.2 軟流水,實(shí)例分析 例6.11 試用軟流水技術(shù)處理例6.1中的循環(huán),假設(shè)數(shù)組x有n個(gè)元素。 解 軟流水需要從原循環(huán)的多個(gè)疊代中選擇指令拼成新的循環(huán),因此 我們首先將原循環(huán)展開(kāi)。 疊代i:;修改xi并保存 L.DF0,0(R1) ADD.DF4,F(xiàn)0,F(xiàn)2 S.DF4,0(R1) 疊代i+1:;修改xi-1并保存 L.DF0,0(R1) ADD.DF4,F(xiàn)0,F(xiàn)2 S.DF4,0(R1) 疊代i+2:;修改xi-2并保存 L.DF0,0(R1) ADD.DF4,F(xiàn)0,F(xiàn)2 S.DF4,0(R1),從這3個(gè)疊代中分別選出一條指令,與原有的循環(huán)控制指令拼在一起得到一個(gè)新的疊代。 DADDUIR1,R1,#-16/ I1:R1保存xn-2的地址 L.DF0,16(R1)/ I2:取xn ADD.DF4,F(xiàn)0,F(xiàn)2/ I3:xn = xn + F2 L.DF0,8(R1)/ I4:取xn-1 Loop:S.DF4,16(R1)/ I5:存xi+2 ADD.DF4,F(xiàn)0,F(xiàn)2/ I6:xi+1 = xi+1 + F2 L.DF0,0(R1)/ I7:取xi BNER1,R2,Loop/ I8 DADDUIR1,R1,#-8/ I9:填充分支延遲槽 S.DF0,8(R1)/ I10:存x2 ADD.DF4,F(xiàn)0,F(xiàn)2 / I11:x1 = x1 + F2 S.DF4,0(R1)/ I12:存x1,6.5 開(kāi)發(fā)更多的指令級(jí)并行,分析: 新循環(huán)的結(jié)束條件仍為:R1=R2 新循環(huán)從元素xn-2開(kāi)始從頭處理的,元素xn與xn-1 只是從半途開(kāi)始處理。 新循環(huán)的最后一次疊代只處理完元素x3,x2剛被修 改完結(jié)果尚未寫(xiě)回,x1 剛被取出,需要被修改并寫(xiě)回。 新循環(huán)的每個(gè)疊代相當(dāng)于流水執(zhí)行了原循環(huán)的3個(gè)疊代。 元素xn/n-1/2/1的處理相當(dāng)于充滿(mǎn)和排空這條“流水 線(xiàn)”。,6.5 開(kāi)發(fā)更多的指令級(jí)并行,性能比較:軟流水 vs. 循環(huán)展開(kāi) 循環(huán)展開(kāi)主要減少由分支指令和修改循環(huán)索引變量的指令所引起的循環(huán)控制開(kāi)銷(xiāo)。 軟流水使疊代內(nèi)的指令級(jí)并行達(dá)到最大。,6.5 開(kāi)發(fā)更多的指令級(jí)并行,IA-64簡(jiǎn)介 IA-64是Intel與HP合作研制出的64位EPIC體系結(jié)構(gòu),其設(shè)計(jì)遵循以下原則: 按照EPIC的思想開(kāi)發(fā)指令級(jí)并行; 提供大量的硬件資源實(shí)現(xiàn)指令級(jí)并行; 提供一系列輔助軟件指令級(jí)并行開(kāi)發(fā)技術(shù)的硬件機(jī)制。,6.6 實(shí)例:IA-64體系結(jié)構(gòu),Intel IA-64產(chǎn)品Itanium 主頻:800MHz 采用3級(jí)Cache 第一級(jí)為分離的指令和數(shù)據(jù)Cache 后兩級(jí)為混合Cache 第三級(jí)Cache(在片外) 流水線(xiàn)共分為10級(jí),其中實(shí)現(xiàn)了一些基于硬件的動(dòng)態(tài)指令調(diào)度機(jī)制,如分支預(yù)測(cè)、重命名、記分牌等。 提供了豐富的功能單元,所有的功能單元都是流水的。 每個(gè)周期最多流出6條指令,最多可同時(shí)執(zhí)行3條分支指令和2個(gè)訪存操作,提高了分支處理和存儲(chǔ)訪問(wèn)的能力。,6.6 實(shí)例:IA-64體系結(jié)構(gòu),整數(shù)性能(SPECint 2000) 主頻為800MHz的Itanium性能僅為2GHz主頻Pentium 4的 60%,1GHz主頻Alpha 21264的68%。 Alpha 21264主頻的功耗比Itanium低20%。 浮點(diǎn)性能(SPECfp 2000) 800MHz Itanium的性能是2GHz Pentium 4的1.04倍,是 1GHz Alpha 21264的1.20倍。 Intel IA-64產(chǎn)品Itanium 2 其性能在不經(jīng)過(guò)任何調(diào)試和優(yōu)化的條件下比Itanium提高50%到100%。,6.6 實(shí)例:IA-64體系結(jié)構(gòu),6.6 實(shí)例:IA-64體系結(jié)構(gòu),IA-64功能單元和操作的類(lèi)型,6.6.1 IA-64指令格式,IA-64的目標(biāo)代碼被劃分為多個(gè)指令組,并按照流出的時(shí)間順序依次排列,編譯器指出組邊界。 IA-64的指令被稱(chēng)為“bundle”,長(zhǎng)128位,包含123位操作信息(3個(gè)操作41位/操作=123位)和5位模板信息。 模板位的作用 簡(jiǎn)化譯碼,模板信息指明了bundle中3個(gè)操作的類(lèi)型以及 它們分別需要在哪類(lèi)功能單元上執(zhí)行。 顯式指出指令組邊界,模板中定義了停止位。,6.6 實(shí)例:IA-64體系結(jié)構(gòu),6.6 實(shí)例:IA-64體系結(jié)構(gòu),IA-64模板值及其含義,例6.12 將例6.1中的代碼展開(kāi)7次并生成IA-64指令,使得: (1) bundle數(shù)最少; (2) 執(zhí)行時(shí)間最短。 假設(shè)每時(shí)鐘周期可流出1個(gè)bundle,bundle中任何操作的暫停將導(dǎo) 致整個(gè)流水線(xiàn)暫停。各操作延遲如表6.1所示。 解 調(diào)度結(jié)果中“s”表示停止位,nop表示空操作。 第一種情況下只有9個(gè)bundle,15%的槽為空,但需要21個(gè)周期才能完成。 第二種情況代碼體積和空槽均有所增加,需要11個(gè)bundle,有30%的槽是空槽,但執(zhí)行時(shí)間大大縮短,僅用12個(gè)周期就可以完成 。,6.6 實(shí)例:IA-64體系結(jié)構(gòu),解 (1) bundle最少,6.6 實(shí)例:IA-64體系結(jié)構(gòu),(2) 執(zhí)行時(shí)間最短,6.6 實(shí)例:IA-64體系結(jié)構(gòu),6.6.2 IA-64的謂詞執(zhí)行機(jī)制 IA-64提供的硬件支持 設(shè)置了大量的謂詞寄存器(64個(gè)),每個(gè)謂詞寄存器的寬 度都是1位。 所有類(lèi)型的IA-64操作都可以按照謂詞執(zhí)行方式執(zhí)行,每 個(gè)操作41位編碼的最低6位指明了保存執(zhí)行條件的謂詞寄 存器。 增強(qiáng)了比較(compare)操作和測(cè)試(test)操作的功 能,都可以同時(shí)修改多個(gè)謂詞寄存器。,6.6 實(shí)例:IA-64體系結(jié)構(gòu),IA-64所支持的不同比較模式,6.6 實(shí)例:IA-64體系結(jié)構(gòu),例6.13 將下面的C語(yǔ)句轉(zhuǎn)換為IA-64匯編指令,使其執(zhí)行時(shí)間最短。 if (r1=1 | r2=2 | r3=3 | r4=4)s; 解 對(duì)應(yīng)的IA-64匯編代碼如下。 IA-64 cmp指令的格式為:cmp.op.mod p, q = r1, r2 這里op為要進(jìn)行的比較操作,mod為上表所示的比較模式中的一 種,p,q為兩個(gè)目的謂詞寄存器,r1和r2為要比較的操作數(shù),可以是 寄存器名,也可以是立即數(shù)。 cmp.ne p1, p0 = r0, r0 ; cmp.eq.or p1, p0 = 1, r1 cmp.eq.or p1, p0 = 2, r2 cmp.eq.or p1, p0 = 3, r3 cmp.eq.or p1, p0 = 4, r4; (p1)s,6.6 實(shí)例:IA-64體系結(jié)構(gòu),6.6.3 IA-64的前瞻執(zhí)行機(jī)制 為了標(biāo)識(shí)被前瞻執(zhí)行的load指令并檢測(cè)前瞻是否成功,IA-64專(zhuān)門(mén)設(shè)置了3條指令。 ld.a:表示被前瞻執(zhí)行的load指令 ld.c:編譯器將ld.c指令放在被前瞻執(zhí)行的load指令最初所 在的位置,ld.c執(zhí)行則前瞻成功 chk.a:編譯器將它放在與ld.c相同的位置。若執(zhí)行chk.a時(shí) 發(fā)現(xiàn)對(duì)應(yīng)的load前瞻執(zhí)行失敗,它會(huì)將控制流轉(zhuǎn)移到一段補(bǔ)償代碼中,重新執(zhí)行。 前瞻l(fā)oad指令的地址被記錄在ALAT表中 每個(gè)寄存器有一個(gè)狀態(tài)位NaT(Not A Thing),6.6 實(shí)例:IA-64體系結(jié)構(gòu),

注意事項(xiàng)

本文(計(jì)算機(jī)系統(tǒng)結(jié)構(gòu)第6章.ppt)為本站會(huì)員(za****8)主動(dòng)上傳,裝配圖網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)上載內(nèi)容本身不做任何修改或編輯。 若此文所含內(nèi)容侵犯了您的版權(quán)或隱私,請(qǐng)立即通知裝配圖網(wǎng)(點(diǎn)擊聯(lián)系客服),我們立即給予刪除!

溫馨提示:如果因?yàn)榫W(wǎng)速或其他原因下載失敗請(qǐng)重新下載,重復(fù)下載不扣分。




關(guān)于我們 - 網(wǎng)站聲明 - 網(wǎng)站地圖 - 資源地圖 - 友情鏈接 - 網(wǎng)站客服 - 聯(lián)系我們

copyright@ 2023-2025  zhuangpeitu.com 裝配圖網(wǎng)版權(quán)所有   聯(lián)系電話(huà):18123376007

備案號(hào):ICP2024067431號(hào)-1 川公網(wǎng)安備51140202000466號(hào)


本站為文檔C2C交易模式,即用戶(hù)上傳的文檔直接被用戶(hù)下載,本站只是中間服務(wù)平臺(tái),本站所有文檔下載所得的收益歸上傳人(含作者)所有。裝配圖網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)上載內(nèi)容本身不做任何修改或編輯。若文檔所含內(nèi)容侵犯了您的版權(quán)或隱私,請(qǐng)立即通知裝配圖網(wǎng),我們立即給予刪除!