第06章 指令級(jí)并行-軟件方法_第1頁(yè)
第06章 指令級(jí)并行-軟件方法_第2頁(yè)
第06章 指令級(jí)并行-軟件方法_第3頁(yè)
第06章 指令級(jí)并行-軟件方法_第4頁(yè)
第06章 指令級(jí)并行-軟件方法_第5頁(yè)
已閱讀5頁(yè),還剩27頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、張晨曦 編著華中科技大學(xué) 計(jì)算機(jī)學(xué)院2 0 1 3 年 4 月2 232326.1指令調(diào)度與循環(huán)展開6.2跨越基本塊的靜態(tài)流水指令調(diào)度6.3靜態(tài)多指令流出: VLIW6.4顯式并行指令計(jì)算EPIC6.5 開發(fā)更多的指令級(jí)并行第六章 指令級(jí)并行軟件方法3 332326.1.1 循環(huán)展開調(diào)度的基本方法1. 1. 指令調(diào)度指令調(diào)度 通過(guò)改變指令在程序中的位置,將相關(guān)指通過(guò)改變指令在程序中的位置,將相關(guān)指令之間的距離加大到不小于指令執(zhí)行延遲,將令之間的距離加大到不小于指令執(zhí)行延遲,將相關(guān)指令轉(zhuǎn)化為無(wú)關(guān)指令。相關(guān)指令轉(zhuǎn)化為無(wú)關(guān)指令。 指令調(diào)度是循環(huán)展開的技術(shù)基礎(chǔ)。指令調(diào)度是循環(huán)展開的技術(shù)基礎(chǔ)。2. 2.

2、 編譯器在完成這種指令調(diào)度時(shí),受限于以下兩編譯器在完成這種指令調(diào)度時(shí),受限于以下兩 個(gè)特性:個(gè)特性: 程序固有的指令級(jí)并行性程序固有的指令級(jí)并行性 流水線功能部件的執(zhí)行延遲流水線功能部件的執(zhí)行延遲6.1 指令級(jí)并行的概念4 432326.1 指令級(jí)并行的概念表表6.2 6.2 假設(shè)的流水線延遲假設(shè)的流水線延遲產(chǎn)生結(jié)果指令產(chǎn)生結(jié)果指令使用結(jié)果指令使用結(jié)果指令延遲時(shí)鐘周期數(shù)延遲時(shí)鐘周期數(shù)浮點(diǎn)計(jì)算浮點(diǎn)計(jì)算另外的浮點(diǎn)操作另外的浮點(diǎn)操作3 3浮點(diǎn)計(jì)算浮點(diǎn)計(jì)算浮點(diǎn)數(shù)據(jù)存操作浮點(diǎn)數(shù)據(jù)存操作(SD)(SD)2 2浮點(diǎn)數(shù)據(jù)取操作浮點(diǎn)數(shù)據(jù)取操作(LD)(LD)浮點(diǎn)計(jì)算浮點(diǎn)計(jì)算1 1浮點(diǎn)數(shù)據(jù)取操作浮點(diǎn)數(shù)據(jù)取操作(L

3、D)(LD)浮點(diǎn)數(shù)據(jù)存操作浮點(diǎn)數(shù)據(jù)存操作(SD)(SD)0 0u 分支指令使用上一條指令的結(jié)果作為分支條件分支指令使用上一條指令的結(jié)果作為分支條件, , 將要等待一拍將要等待一拍u 分支指令有一個(gè)節(jié)拍的延遲槽分支指令有一個(gè)節(jié)拍的延遲槽5 53232例例6.16.1 對(duì)于下面的源代碼,轉(zhuǎn)換成對(duì)于下面的源代碼,轉(zhuǎn)換成MIPSMIPS匯編語(yǔ)言,匯編語(yǔ)言,在在不進(jìn)行指令調(diào)度不進(jìn)行指令調(diào)度和和進(jìn)行指令調(diào)度進(jìn)行指令調(diào)度兩種情況下,兩種情況下,分析代碼一次循環(huán)的執(zhí)行時(shí)間。分析代碼一次循環(huán)的執(zhí)行時(shí)間。 for (i=1; i=1000; i+)for (i=1; i=1000; i+) xi = xi + s

4、; xi = xi + s;6.1 指令級(jí)并行的概念6 63232解:解:(1)(1) 變量分配寄存器變量分配寄存器 整數(shù)寄存器整數(shù)寄存器R1R1:循環(huán)計(jì)數(shù)器,初值為:循環(huán)計(jì)數(shù)器,初值為=8000?=8000? 中最高端地址元素的地址。中最高端地址元素的地址。 浮點(diǎn)寄存器浮點(diǎn)寄存器F2F2:保存常數(shù):保存常數(shù)S S。 假定最低端元素的地址為假定最低端元素的地址為8 8。 (2)(2) MIPSMIPS匯編語(yǔ)言后的程序匯編語(yǔ)言后的程序 Loop: LD F0,0(R1) Loop: LD F0,0(R1) / /* *0(R1)0(R1)即即x x的地址的地址* */ / ADDD F4,F0,

5、F2 ADDD F4,F0,F2 SD SD 0(R1),F4 0(R1),F4 SUBI R1,R1,#8 SUBI R1,R1,#8/ /* *為什么是為什么是8?8?* */ / BNEZ R1,Loop BNEZ R1,Loop6.1 指令級(jí)并行的概念7 73232(3)(3) 程序執(zhí)行的實(shí)際時(shí)鐘程序執(zhí)行的實(shí)際時(shí)鐘根據(jù)根據(jù)表表6-26-2中給出的的延遲,實(shí)際時(shí)鐘如下:中給出的的延遲,實(shí)際時(shí)鐘如下: 指令流出時(shí)鐘指令流出時(shí)鐘 Loop: LD F0, 0(R1) 1Loop: LD F0, 0(R1) 1 ( (空轉(zhuǎn)空轉(zhuǎn)) ) 2 2 ADDD F4, F0 , F2 3 ADDD F4

6、, F0 , F2 3 ( (空轉(zhuǎn)空轉(zhuǎn)) ) 4 4 ( (空轉(zhuǎn)空轉(zhuǎn)) ) 5 5 SD SD 0(R1), F4 0(R1), F4 6 6 SUBI R1, R1, #8 SUBI R1, R1, #8 7 7 ( (空轉(zhuǎn)空轉(zhuǎn)) ) 8 8 BNEZ R1, Loop 9 BNEZ R1, Loop 9 ( (空轉(zhuǎn)空轉(zhuǎn)) 10) 10每個(gè)元素的操作需要每個(gè)元素的操作需要1010個(gè)時(shí)鐘周期,其中個(gè)時(shí)鐘周期,其中5 5個(gè)個(gè)是空轉(zhuǎn)周期。是空轉(zhuǎn)周期。6.1 指令級(jí)并行的概念8 83232(4)(4) 指令調(diào)度以后,程序的執(zhí)行情況指令調(diào)度以后,程序的執(zhí)行情況SDSD放在分支指令的分支延遲槽中放在分支

7、指令的分支延遲槽中,BNEZBNEZ放在了空轉(zhuǎn)周期!放在了空轉(zhuǎn)周期!對(duì)存儲(chǔ)器地址偏移量進(jìn)行調(diào)整對(duì)存儲(chǔ)器地址偏移量進(jìn)行調(diào)整 指令流出時(shí)鐘指令流出時(shí)鐘Loop: LD F0, 0(R1) 1Loop: LD F0, 0(R1) 1 SUBI R1, R1 , #SUBI R1, R1 , #8 8 2 2 ADDD F4, F0 , F2 ADDD F4, F0 , F2 3 3 ( (空轉(zhuǎn)空轉(zhuǎn)) ) 4 4 BNEZ R1, LoopBNEZ R1, Loop 5 5 SD SD 8 8(R1), F4(R1), F4 6 6一個(gè)元素的操作時(shí)間從一個(gè)元素的操作時(shí)間從1010個(gè)時(shí)鐘周期減少到個(gè)時(shí)鐘

8、周期減少到6 6個(gè)個(gè)5 5個(gè)周期是有指令執(zhí)行的,個(gè)周期是有指令執(zhí)行的,1 1個(gè)空轉(zhuǎn)周期。個(gè)空轉(zhuǎn)周期。6.1 指令級(jí)并行的概念9 93232(5)(5) 例子中的問(wèn)題及解決方案例子中的問(wèn)題及解決方案只有只有LDLD、ADDDADDD和和SDSD這這3 3條指令是有效操作條指令是有效操作. .占用占用3 3個(gè)時(shí)鐘周期個(gè)時(shí)鐘周期而而SUBISUBI、空轉(zhuǎn)空轉(zhuǎn)和和BENZBENZ這這3 3個(gè)時(shí)鐘周期都是個(gè)時(shí)鐘周期都是附加附加的的循環(huán)控制開銷循環(huán)控制開銷。循環(huán)展開技術(shù)循環(huán)展開技術(shù)多次復(fù)制循環(huán)體并相應(yīng)調(diào)整展開后的指令和循環(huán)多次復(fù)制循環(huán)體并相應(yīng)調(diào)整展開后的指令和循環(huán)結(jié)束條件,增加有效操作時(shí)間與控制操作時(shí)間的

9、結(jié)束條件,增加有效操作時(shí)間與控制操作時(shí)間的比率。比率。也給編譯器進(jìn)行指令調(diào)度帶來(lái)了更大的空間。也給編譯器進(jìn)行指令調(diào)度帶來(lái)了更大的空間。6.1 指令級(jí)并行的概念10103232例例6.2 6.2 體現(xiàn)循環(huán)展開技術(shù)的特點(diǎn)體現(xiàn)循環(huán)展開技術(shù)的特點(diǎn) 將將例例6.16.1中的循環(huán)展開成中的循環(huán)展開成3 3次次得到得到4 4個(gè)個(gè)循循環(huán)體,再對(duì)展開后的指令序列在不調(diào)度和環(huán)體,再對(duì)展開后的指令序列在不調(diào)度和調(diào)度兩種情況下,分析代碼的性能。調(diào)度兩種情況下,分析代碼的性能。 假定假定R1R1的初值為的初值為3232的倍數(shù),即循環(huán)的倍數(shù),即循環(huán)次數(shù)為次數(shù)為4 4的倍數(shù)。的倍數(shù)。6.1 指令級(jí)并行的概念11113232

10、解:解:補(bǔ)償代碼問(wèn)題補(bǔ)償代碼問(wèn)題寄存器分配寄存器分配展開后的循環(huán)體內(nèi)不重復(fù)使用寄存器。展開后的循環(huán)體內(nèi)不重復(fù)使用寄存器。F0F0、F4F4:用于展開后的第:用于展開后的第1 1個(gè)循環(huán)體個(gè)循環(huán)體F2F2:保存常數(shù):保存常數(shù)F6F6和和F8F8:用于展開后的第用于展開后的第2 2個(gè)循環(huán)體個(gè)循環(huán)體F10F10和和F12F12:用于第用于第3 3個(gè)循環(huán)體個(gè)循環(huán)體F14F14和和F16F16:用于第用于第4 4個(gè)循環(huán)體個(gè)循環(huán)體6.1 指令級(jí)并行的概念12123232(1)(1) 展開后沒(méi)有調(diào)度的代碼展開后沒(méi)有調(diào)度的代碼流出時(shí)鐘流出時(shí)鐘Loop:Loop:LD F0,0(R1)LD F0,0(R1) 1

11、1(空轉(zhuǎn))(空轉(zhuǎn)) 2 2ADDD F4,F0,F2ADDD F4,F0,F2 3 3(空轉(zhuǎn))(空轉(zhuǎn)) 4 4(空轉(zhuǎn))(空轉(zhuǎn)) 5 5SD 0(R1),F4SD 0(R1),F4 6 6LD F6,LD F6,-8-8(R1)(R1) 7 7(空轉(zhuǎn))(空轉(zhuǎn)) 8 8ADDD F8,F6,F2ADDD F8,F6,F2 9 9(空轉(zhuǎn))(空轉(zhuǎn)) 1010(空轉(zhuǎn))(空轉(zhuǎn)) 1111SD SD -8-8(R1),F8 12(R1),F8 12LD F10,-16(R1) 13LD F10,-16(R1) 13(空轉(zhuǎn))(空轉(zhuǎn)) 1414流出時(shí)鐘流出時(shí)鐘ADDDADDDF12,F10,F2F12,F10,

12、F2 15 15(空轉(zhuǎn))(空轉(zhuǎn)) 16 16 (空轉(zhuǎn))(空轉(zhuǎn)) 1717SDSD-16(R1),F12-16(R1),F12 18 18LDLDF14,-24(R1) 19F14,-24(R1) 19(空轉(zhuǎn))(空轉(zhuǎn)) 2020ADDDADDDF16,F14,F2F16,F14,F2 21 21(空轉(zhuǎn))(空轉(zhuǎn)) 2222(空轉(zhuǎn))(空轉(zhuǎn)) 2323SDSD-24(R1),F16 24-24(R1),F16 24SUBISUBIR1,R1,#R1,R1,#3232 25 25(空轉(zhuǎn))(空轉(zhuǎn)) 2626BNEZBNEZR1,Loop 27R1,Loop 27(空轉(zhuǎn))(空轉(zhuǎn)) 28286.1 指令級(jí)并行

13、的概念13133232結(jié)果分析結(jié)果分析: :這個(gè)循環(huán)每遍共使用了這個(gè)循環(huán)每遍共使用了2828個(gè)時(shí)鐘周期個(gè)時(shí)鐘周期有有4 4個(gè)個(gè)循環(huán)體,完成循環(huán)體,完成4 4個(gè)個(gè)元素的操作元素的操作平均每個(gè)元素使用平均每個(gè)元素使用28/4=728/4=7個(gè)時(shí)鐘周期個(gè)時(shí)鐘周期原始循環(huán)的每個(gè)元素需要原始循環(huán)的每個(gè)元素需要1010個(gè)時(shí)鐘周期個(gè)時(shí)鐘周期節(jié)省的時(shí)間節(jié)省的時(shí)間: :從從減少循環(huán)控制減少循環(huán)控制的開銷中獲得的的開銷中獲得的在整個(gè)展開后的循環(huán)中,實(shí)際指令只有在整個(gè)展開后的循環(huán)中,實(shí)際指令只有1414條,條,其它其它1313個(gè)周期都是空轉(zhuǎn)。個(gè)周期都是空轉(zhuǎn)。 效率并不高效率并不高6.1 指令級(jí)并行的概念141432

14、32(2)(2) 對(duì)指令序列進(jìn)行優(yōu)化調(diào)度對(duì)指令序列進(jìn)行優(yōu)化調(diào)度Loop:Loop:LDLDF0F0,0(R1),0(R1)1 1 LD LDF6F6,-8(R1),-8(R1)2 2 LD LDF10F10,-16(R1),-16(R1) 3 3 LD LDF14F14,-24(R1),-24(R1) 4 4 ADDD ADDDF4,F0,F2F4,F0,F25 5 ADDD ADDDF8,F6,F2F8,F6,F26 6 ADDD ADDDF12,F10,F2F12,F10,F2 7 7 ADDD ADDDF16,F14,F2F16,F14,F2 8 8 SD SD0(R1),F40(R1)

15、,F49 9 SD SD-8(R1),F8-8(R1),F81010 SUBI SUBIR1,R1,#32R1,R1,#32 12 12 SD SD16(R1),F1216(R1),F12 11 11 / /* *16-32=-1616-32=-16* */ / BNEZ BNEZR1,LoopR1,Loop 13 13 SD SD8(R1),F168(R1),F16 14 14 / /* *8-32=-248-32=-24* */ /6.1 指令級(jí)并行的概念指令流出時(shí)鐘指令流出時(shí)鐘15153232結(jié)果分析:結(jié)果分析:沒(méi)有數(shù)據(jù)相關(guān)引起的空轉(zhuǎn)等待沒(méi)有數(shù)據(jù)相關(guān)引起的空轉(zhuǎn)等待整個(gè)循環(huán)僅僅使用整個(gè)循環(huán)

16、僅僅使用了了1414個(gè)時(shí)鐘周期個(gè)時(shí)鐘周期平均每個(gè)元素的操作使用平均每個(gè)元素的操作使用14/4=3.514/4=3.5個(gè)時(shí)鐘周期個(gè)時(shí)鐘周期循環(huán)展開循環(huán)展開和和指令調(diào)度指令調(diào)度可以有效地提高循環(huán)級(jí)并可以有效地提高循環(huán)級(jí)并行性。行性。這種循環(huán)級(jí)并行性的提高實(shí)際是通過(guò)實(shí)現(xiàn)指令級(jí)這種循環(huán)級(jí)并行性的提高實(shí)際是通過(guò)實(shí)現(xiàn)指令級(jí)并行來(lái)達(dá)到的。并行來(lái)達(dá)到的。寄存器開銷增大!寄存器開銷增大!可以使用編譯器來(lái)完成,也可以通過(guò)硬件來(lái)可以使用編譯器來(lái)完成,也可以通過(guò)硬件來(lái)完成。完成。6.1 指令級(jí)并行的概念161632324. 4. 循環(huán)展開和指令調(diào)度時(shí)要注意的問(wèn)題循環(huán)展開和指令調(diào)度時(shí)要注意的問(wèn)題(1) (1) 保證正確

17、性保證正確性(2) (2) 注意有效性注意有效性(3) (3) 使用不同的寄存器使用不同的寄存器(4) (4) 盡可能減少循環(huán)控制中的測(cè)試指令和分支指令盡可能減少循環(huán)控制中的測(cè)試指令和分支指令(5) (5) 注意對(duì)存儲(chǔ)器數(shù)據(jù)的相關(guān)性分析注意對(duì)存儲(chǔ)器數(shù)據(jù)的相關(guān)性分析(6) (6) 注意新的相關(guān)性注意新的相關(guān)性5. 5. 實(shí)現(xiàn)循環(huán)展開的關(guān)鍵實(shí)現(xiàn)循環(huán)展開的關(guān)鍵 分析清楚代碼中指令的相關(guān)性,然后通過(guò)分析清楚代碼中指令的相關(guān)性,然后通過(guò) 指令調(diào)度來(lái)消除相關(guān)指令調(diào)度來(lái)消除相關(guān). .6.1 指令級(jí)并行的概念171732326.5.1 相關(guān)性開發(fā)指令級(jí)并行的開發(fā)指令級(jí)并行的關(guān)鍵關(guān)鍵存在相關(guān)的兩條指令,不能改變

18、它們的順序。存在相關(guān)的兩條指令,不能改變它們的順序。相關(guān)是否導(dǎo)致流水線的空轉(zhuǎn),還與流水線的相關(guān)是否導(dǎo)致流水線的空轉(zhuǎn),還與流水線的組織與結(jié)構(gòu)有關(guān)。組織與結(jié)構(gòu)有關(guān)。程序中程序中的相關(guān)主要有以下三種的相關(guān)主要有以下三種 數(shù)據(jù)相關(guān)數(shù)據(jù)相關(guān) 名相關(guān)名相關(guān) 控制相關(guān)控制相關(guān)6.5 開發(fā)更多的指令級(jí)并行181832321. 1. 數(shù)據(jù)相關(guān)數(shù)據(jù)相關(guān)(Data dependenceData dependence)對(duì)于對(duì)于指令指令i i和和指令指令j j,如果,如果 (1) (1) 指令指令j j使用使用指令指令i i產(chǎn)生的結(jié)果,或者產(chǎn)生的結(jié)果,或者 (2) (2) 指令指令j j與與指令指令k k數(shù)據(jù)相關(guān),數(shù)據(jù)

19、相關(guān),指令指令k k與與指令指令i i數(shù)據(jù)相數(shù)據(jù)相 關(guān),則關(guān),則指令指令j j與與指令指令i i數(shù)據(jù)相關(guān)。數(shù)據(jù)相關(guān)。 數(shù)據(jù)相關(guān)具有傳遞性。數(shù)據(jù)相關(guān)具有傳遞性。數(shù)據(jù)相關(guān)是兩條指令之間存在一個(gè)先寫后讀相關(guān)鏈。數(shù)據(jù)相關(guān)是兩條指令之間存在一個(gè)先寫后讀相關(guān)鏈。相關(guān)鏈貫穿整個(gè)程序,是程序的內(nèi)在特征。相關(guān)鏈貫穿整個(gè)程序,是程序的內(nèi)在特征。這種相關(guān)鏈?zhǔn)菍?dǎo)致流水線停頓的原因之一。這種相關(guān)鏈?zhǔn)菍?dǎo)致流水線停頓的原因之一。6.5 開發(fā)更多的指令級(jí)并行19193232指令的相關(guān)指令的相關(guān)( (依賴依賴) )距離(距離(DistanceDistance) 兩條指令之間的指令條數(shù)。兩條指令之間的指令條數(shù)。分析數(shù)據(jù)相關(guān)的主要

20、工作分析數(shù)據(jù)相關(guān)的主要工作: : (1) (1) 確定指令的相關(guān)性,找到所有可能產(chǎn)生停確定指令的相關(guān)性,找到所有可能產(chǎn)生停 頓的地方。頓的地方。 (2) (2) 確定必須嚴(yán)格遵守的數(shù)據(jù)的計(jì)算順序。確定必須嚴(yán)格遵守的數(shù)據(jù)的計(jì)算順序。 (3) (3) 確定指令的最大相關(guān)距離,確定程序中可確定指令的最大相關(guān)距離,確定程序中可 能的最大并行性。能的最大并行性。6.5 開發(fā)更多的指令級(jí)并行202032322. 2. 名相關(guān)(名相關(guān)(Name dependenceName dependence)指令使用的寄存器或存儲(chǔ)器稱為指令使用的寄存器或存儲(chǔ)器稱為名名。如果兩條指令使用相同的名,但是它們之間并如果兩條指

21、令使用相同的名,但是它們之間并沒(méi)有數(shù)據(jù)流,則稱之為沒(méi)有數(shù)據(jù)流,則稱之為名相關(guān)名相關(guān)。指令指令j j與與指令指令i i之間名相關(guān)有以下兩種:之間名相關(guān)有以下兩種: (1) (1) 反相關(guān)反相關(guān)(anti-dependenceanti-dependence) (2) (2) 輸出相關(guān)輸出相關(guān)(output dependenceoutput dependence)6.5 開發(fā)更多的指令級(jí)并行21213232 消除名相關(guān)消除名相關(guān)名相關(guān)的指令之間沒(méi)有數(shù)據(jù)交換。名相關(guān)的指令之間沒(méi)有數(shù)據(jù)交換。如果一條指令中的名改變了,并不影響另外一如果一條指令中的名改變了,并不影響另外一條指令的執(zhí)行。條指令的執(zhí)行。通過(guò)改

22、變指令中操作數(shù)的名來(lái)消除名相關(guān),這通過(guò)改變指令中操作數(shù)的名來(lái)消除名相關(guān),這就是就是換名(換名(renamingrenaming)技術(shù))技術(shù)。對(duì)于寄存器操作數(shù)進(jìn)行換名稱為對(duì)于寄存器操作數(shù)進(jìn)行換名稱為寄存器換名寄存器換名。 (register renaming)(register renaming)可以用編譯器靜態(tài)完成或硬件動(dòng)態(tài)完成??梢杂镁幾g器靜態(tài)完成或硬件動(dòng)態(tài)完成。6.5 開發(fā)更多的指令級(jí)并行22223232例:例:我們對(duì)我們對(duì)例例6.26.2編譯過(guò)程進(jìn)行分析,來(lái)仔細(xì)考察編譯過(guò)程進(jìn)行分析,來(lái)仔細(xì)考察 換名的過(guò)程。換名的過(guò)程。 (1) (1) 首先,僅僅去除首先,僅僅去除4 4遍循環(huán)體中的分支指

23、令,遍循環(huán)體中的分支指令, 得到以下由得到以下由1717條指令構(gòu)成的指令序列:條指令構(gòu)成的指令序列:6.5 開發(fā)更多的指令級(jí)并行23233232Loop: LD F0, 0(R1)Loop: LD F0, 0(R1) ADDD F4, F0, F2 ADDD F4, F0, F2 SD 0(R1), F4 SD 0(R1), F4 SUBI SUBI R1R1, R1, #8, R1, #8 LD F0, 0( LD F0, 0(R1R1) ) ADDD F4, F0, F2 ADDD F4, F0, F2 SD 0( SD 0(R1R1), F4), F4 SUBI R1, SUBI R1,

24、 R1R1, #8, #8LD LD F0, 0(R1)F0, 0(R1)ADDDADDDF4, F0, F2F4, F0, F2SDSD 0(R1), F4 0(R1), F4SUBISUBIR1, R1, #8R1, R1, #8LDLD F0, 0(R1) F0, 0(R1)ADDDADDDF4, F0, F2F4, F0, F2SDSD 0(R1), F4 0(R1), F4SUBISUBIR1, R1, #8R1, R1, #8BNEZBNEZR1, LoopR1, Loop6.5 開發(fā)更多的指令級(jí)并行24243232(2) (2) 編譯器可以通過(guò)對(duì)相關(guān)鏈上存儲(chǔ)器訪問(wèn)偏移量的編譯器可

25、以通過(guò)對(duì)相關(guān)鏈上存儲(chǔ)器訪問(wèn)偏移量的直接調(diào)整,將前直接調(diào)整,將前3 3條條SUBISUBI指令消除掉,從而得到下面指令消除掉,從而得到下面一個(gè)一個(gè)1414條指令構(gòu)成的指令序列:條指令構(gòu)成的指令序列: 6.5 開發(fā)更多的指令級(jí)并行25253232Loop: LDLoop: LD F0, 0(R1) F0, 0(R1) ADDD F4, F0, F2 ADDD F4, F0, F2 SD SD 0(R1), F4 0(R1), F4 LD LD F0, -8(R1) F0, -8(R1) ADDD F4, F0, F2 ADDD F4, F0, F2 SD SD -8(R1), F4 -8(R1),

26、 F4 LDLD F0, -16(R1) F0, -16(R1) ADDD F4, F0, F2 ADDD F4, F0, F2 SD SD -16(R1), F4 -16(R1), F4 LD LD F0, -24(R1) F0, -24(R1) ADDD ADDD F4, F0, F2 F4, F0, F2 SD SD -24(R1), F4 -24(R1), F4 SUBI R1, R1, SUBI R1, R1, #32#32 BNEZ R1, Loop BNEZ R1, Loop6.5 開發(fā)更多的指令級(jí)并行26263232(3)(3)通過(guò)寄存器換名,通過(guò)寄存器換名,消除名相關(guān)。得到消

27、除名相關(guān)。得到右邊的指令序列:右邊的指令序列: Loop:Loop:LDLDF0, 0(R1)F0, 0(R1)ADDDADDDF4, F0, F2F4, F0, F2SDSD0(R1), F40(R1), F4LDLDF6F6, -8(R1), -8(R1)ADDDADDDF8, F6, F2F8, F6, F2SDSD-8(R1), F8-8(R1), F8LDLDF10F10, -16(R1), -16(R1)ADDDADDDF12, F10, F2F12, F10, F2SDSD-16(R1), F12-16(R1), F12LDLDF14F14, -24(R1), -24(R1)AD

28、DDADDDF16, F14, F2F16, F14, F2SDSD-24(R1), F16-24(R1), F16SUBISUBIR1, R1, #32R1, R1, #32BNEZBNEZR1, LoopR1, Loop換名操作需要較大換名操作需要較大的寄存器開銷。的寄存器開銷。 6.5 開發(fā)更多的指令級(jí)并行272732323 3控制相關(guān)(控制相關(guān)(control dependencecontrol dependence) 控制相關(guān)控制相關(guān)是指由分支指令引起的相關(guān)。是指由分支指令引起的相關(guān)。 典型的程序結(jié)構(gòu)是典型的程序結(jié)構(gòu)是“if-thenif-then”結(jié)構(gòu)。結(jié)構(gòu)。 看下面一個(gè)示例:看下

29、面一個(gè)示例: if p1if p1 S1; S1; S; S; if p2 if p2 S2; S2; 6.5 開發(fā)更多的指令級(jí)并行28283232 處理控制相關(guān)的處理控制相關(guān)的兩個(gè)原則兩個(gè)原則: (1) (1) 與控制相關(guān)的指令不能移到分支指令之與控制相關(guān)的指令不能移到分支指令之 前,即控制有關(guān)的指令不能調(diào)度到分支前,即控制有關(guān)的指令不能調(diào)度到分支 指令控制范圍以外;指令控制范圍以外; (2) (2) 與控制無(wú)關(guān)的指令不能移到分支指令之與控制無(wú)關(guān)的指令不能移到分支指令之 后,即控制無(wú)關(guān)的指令不能調(diào)度到分支后,即控制無(wú)關(guān)的指令不能調(diào)度到分支 指令控制范圍以內(nèi)。指令控制范圍以內(nèi)。6.5 開發(fā)更多

30、的指令級(jí)并行29293232再考察再考察例例6.26.2: 假設(shè)循環(huán)展開時(shí),循環(huán)控制分支指令沒(méi)有去除,假設(shè)循環(huán)展開時(shí),循環(huán)控制分支指令沒(méi)有去除,則指令序列如下:則指令序列如下: 6.5 開發(fā)更多的指令級(jí)并行30303232Loop: LDLoop: LDF0, 0(R1)F0, 0(R1)ADDDADDDF4, F0, F2F4, F0, F2SDSD0(R1), F40(R1), F4SUBISUBIR1, R1, #8R1, R1, #8BEQZBEQZR1, ExitR1, ExitLDLDF0, 0(R1)F0, 0(R1)ADDDADDDF4, F0, F2F4, F0, F2SDSD0

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論