2023年全國碩士研究生考試考研英語一試題真題(含答案詳解+作文范文)_第1頁
已閱讀1頁,還剩44頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、第6章 C6000 軟件優(yōu)化,第2節(jié) 線性匯編和匯編優(yōu)化器,寫線性匯編代碼使用匯編優(yōu)化器多周期循環(huán)的軟件流水匯編優(yōu)化器選項(xiàng)和偽指令,本節(jié)學(xué)習(xí)內(nèi)容,主要內(nèi)容,一、寫線性匯編代碼二、寫線性匯編代碼舉例—點(diǎn)積三、調(diào)用匯編優(yōu)化器四、多周期循環(huán)的軟件流水五、加權(quán)矢量和(WVS)循環(huán)展開,一、寫線性匯編代碼,,1、軟件工具流程,2、線性匯編文件基本考慮事項(xiàng),線性匯編文件使用“.sa”擴(kuò)展名僅對(duì)指定的代碼段進(jìn)行優(yōu)化,指定代碼段外的

2、代碼被拷貝為輸出“.asm”文件線性匯編過程可以:傳遞參數(shù)返回結(jié)果使用符號(hào)變量不考慮流水線問題,二、寫線性匯編代碼舉例 —點(diǎn)積,,1、點(diǎn)積線性匯編,線性匯編不需要指出和考慮:功能單元寄存器延遲間隙,2、確定優(yōu)化代碼段,Dotp: .cproc zero sumloop: ldh *p_m++, m

3、 ldh *p_n++, n mpy m, n, prod add prod, sum, sum [count] sub count, 1, count [count] b loop .endproc,,.cproc/ .endproc:確定要優(yōu)化的代碼段必須

4、成對(duì)使用可作為C調(diào)用的函數(shù),在匯編代碼中使用.proc/ .endproc確定要優(yōu)化的代碼段,它們也必須成對(duì)使用,3、使用符號(hào)變量,Dotp: .cproc .reg p_m, m, p_n, n, prod,sum,count zero sumloop: ldh *p_m++, m

5、ldh *p_n++, n mpy m, n, prod add prod, sum, sum [count] sub count, 1, count [count] b loop .endproc,,.reg偽指令:聲明符號(hào)變量,變量由優(yōu)化器選擇與功能單元一致的寄存器

6、.reg在.(c)proc/ .endproc內(nèi)有效當(dāng)變量為40/64bit時(shí),變量使用寄存器對(duì)格式:如ahi:alo,4、參數(shù)傳遞,Dotp: .cproc p_m, p_n, count .reg p_m, m, p_n, n, prod,sum,count zero sumloop: ldh *

7、p_m++, m ldh *p_n++, n mpy m, n, prod add prod, sum, sum [count] sub count, 1, count [count] b loop .return s

8、um .endproc,,.cproc [variable1[,variable2,?]]:給出輸入?yún)?shù).return:給出返回結(jié)果.return僅在.cproc/ .endproc內(nèi)有效,.proc [register1[,register2, ?]]; 給出輸入?yún)?shù).reg p_m, ? mv register1, p_m ;建立輸入寄存器 :

9、 ;與變量關(guān)系mv sum, register1.endproc [register1[,register2, ?]];給出返回結(jié)果,5、保護(hù)寄存器,Dotp: .cproc p_m, p_n, count .reg p_m, m, p_n, n, prod,sum,count .reserve

10、 a3 zero sumloop: ldh *p_m++, m ldh *p_n++, n mpy m, n, prod add prod, sum, sum [count] sub count, 1, c

11、ount [count] b loop .return sum .endproc,,,.reserve指出需要保護(hù)的寄存器當(dāng).cproc/ .endproc內(nèi)的代碼明顯使用了要保護(hù)的寄存器,優(yōu)化器也可能使用該寄存器,如:,,6、流水代碼的最小循環(huán)次數(shù),具有填充和排空5次運(yùn)算迭代,循環(huán)計(jì)數(shù)設(shè)置為3最小循環(huán)次數(shù):3,,循環(huán)測(cè)試,7、

12、計(jì)算最小循環(huán)次數(shù),最小循環(huán)次數(shù)=循環(huán)和排空的周期數(shù),這個(gè)點(diǎn)積代碼最小循環(huán)次數(shù)=?,8、冗余循環(huán),非流水代碼執(zhí)行較慢,運(yùn)算迭代次數(shù)>=最小循環(huán)次數(shù),流水代碼執(zhí)行較快,,,9、消除冗余循環(huán),關(guān)閉軟件流水(-mu)減小代碼尺寸,但也減小吞吐量指出運(yùn)算迭代次數(shù)(.trip)如果.trip≧最小循環(huán)次數(shù),僅產(chǎn)生流水循環(huán)如果.trip<最小循環(huán)次數(shù),產(chǎn)生兩種循環(huán)不產(chǎn)生冗余循環(huán)(-ms)如果沒給出.trip,僅產(chǎn)生不流

13、水循環(huán)如果給出.trip,且.trip≧最小循環(huán)次數(shù),僅產(chǎn)生流水循環(huán),10、指出運(yùn)算迭代次數(shù),_Dotp: .cproc p_m, p_n, count .reg p_m, m, p_n, n, prod,sum,count zero sumloop: .trip 40 l

14、dh *p_m++, m ldh *p_n++, n mpy m, n, prod add prod, sum, sum [count] sub count, 1, count [count] b loop

15、 .return sum .endproc,,指出運(yùn)算迭代次數(shù),11、點(diǎn)積的完整線性匯編,Dotp: .cproc p_m, p_n, count .reg p_m, m, p_n, n, prod,sum,count zero sumloop: .trip 40

16、 ldh *p_m++, m ldh *p_n++, n mpy m, n, prod add prod, sum, sum [count] sub count, 1, count [count] b loop

17、 .return sum .endproc,,三、調(diào)用匯編優(yōu)化器,調(diào)用匯編優(yōu)化器和匯編器,,僅調(diào)用匯編器,,四、多周期循環(huán)的軟件流水,,1、軟件流水過程,. 用C語言實(shí)現(xiàn)算法并驗(yàn)證. 寫C6x線性匯編代碼. 畫相關(guān)圖. 分配功能單元和寄存器. 建編排表. 將編排表轉(zhuǎn)換為C6x匯編代碼,第一步:C代碼,第二步:線性匯編代碼,第三步:相關(guān)圖,第四步:分配功能單

18、元,2周期循環(huán),2個(gè)周期/每次循環(huán)迭代,迭代間隔:每次循環(huán)迭代占用的周期數(shù),多周期循環(huán),第五步:建迭代間隔編排表(1),第五步:建迭代間隔編排表(2),第五步:建迭代間隔編排表(3),第五步:建迭代間隔編排表(4),第五步:建迭代間隔編排表(5),第五步:建迭代間隔編排表(6),展開加權(quán)矢量和代碼,展開加權(quán)矢量和:2個(gè)結(jié)果/每3個(gè)周期,要點(diǎn): 循環(huán)展開,充分利用資源,五、匯編優(yōu)化器選項(xiàng)和偽指令,-on選項(xiàng) -mt選項(xiàng)和.no_mdep

19、偽指令 【C程序的 restrict關(guān)鍵字】.mdep偽指令 .mptr偽指令 .trip偽指令 【C程序的MUST_ITERATE pragma】,-on選項(xiàng),軟件流水需要選擇-o2或-o3選項(xiàng)-o = -o2-o3優(yōu)化的工作:文件級(jí)優(yōu)化 1.刪除未使用的所有函數(shù) 2.當(dāng)函數(shù)的返回值沒有用到時(shí),簡(jiǎn)化函數(shù)返回的形式 3.內(nèi)聯(lián)小的函數(shù) 4.重新對(duì)函數(shù)聲明進(jìn)行排序。這樣就使得當(dāng)優(yōu)化調(diào)用代

20、碼時(shí),被調(diào)用函數(shù)的屬性是已知的。 5.當(dāng)所用調(diào)用都傳遞一個(gè)相同的參數(shù)時(shí),把這個(gè)參數(shù)直接放到函數(shù)體中去,不再通過寄存器/存儲(chǔ)器的方式傳遞這個(gè)參數(shù)。 6.識(shí)別文件級(jí)變量的特征,-o3 + -pm :程序級(jí)優(yōu)化,如果一個(gè)函數(shù)中的一個(gè)特殊的變量的值總是一樣的,編譯器會(huì)用這個(gè)值直接代替該變量,直接進(jìn)行值傳遞而不是參數(shù)傳遞。 如果一個(gè)函數(shù)的返回值都沒有被用到,編譯器就會(huì)刪除這個(gè)函數(shù)的返回值。 如果

21、一個(gè)函數(shù)沒有被直接或間接地被調(diào)用,編譯器就會(huì)刪除這個(gè)函數(shù)。,-mt選項(xiàng)和.no_mdep偽指令,因?yàn)楫?dāng)你執(zhí)行讀取或存儲(chǔ)指令時(shí),匯編優(yōu)化器并不知道你要訪問的對(duì)象在哪里,所以匯編優(yōu)化器就非常保守地認(rèn)為存儲(chǔ)器操作之間有相關(guān)性。匯編優(yōu)化器會(huì)確保在下一次從reg1地址中讀取數(shù)據(jù)之前往reg5地址中存儲(chǔ)數(shù)據(jù)的工作已經(jīng)完成。如果要存的.reg5中的地址不是“reg1”要讀取的下一個(gè)地址,將導(dǎo)致循環(huán)優(yōu)化效果不好。對(duì)于那些“reg5”是指向“

22、reg1”的下一個(gè)地址的循環(huán),這些是必要的。對(duì)于大部分的循環(huán),并不是這樣的,可以告訴匯編優(yōu)化器更積極地安排存儲(chǔ)器操作。可以通過在線性匯編函數(shù)中使用“.no_mdep” (無存儲(chǔ)器相關(guān)性)偽指令或者在編譯線性匯編文件的時(shí)候用-mt選項(xiàng)實(shí)現(xiàn)。,,.mdep偽指令,假如你需要指明2個(gè)或更多的存儲(chǔ)體的相關(guān)性,你可以使用.mdep偽指令。用存儲(chǔ)體相關(guān)性標(biāo)號(hào)來注釋你的代碼,并且在線性匯編函數(shù)中加上.mdep偽指令。當(dāng)使用了.no_mdep或-m

23、t后,才需要使用.mdep偽指令。.mdep偽指令表明從LDW指令到STW指令中有存儲(chǔ)體相關(guān)性。這就意味著STW指令必須在LDW指令后執(zhí)行。.mdep偽指令不表明在STW指令到LDW指令中存在存儲(chǔ)體相關(guān)性。要處理后一種情況,還需要一個(gè).mdep偽指令。,.mptr偽指令,.mptr偽指令給匯編優(yōu)化器提供了怎樣避免存儲(chǔ)體(bank)沖突的內(nèi)容。匯編優(yōu)化器會(huì)重新安排匯編代碼中生成的存儲(chǔ)體引用,以避免存儲(chǔ)器的沖突,這些沖突是由偽指令

24、.mptr指明的。這意味著通過避免存儲(chǔ)器的沖突,匯編優(yōu)化器產(chǎn)生的代碼的執(zhí)行速度會(huì)更快,沒有因?yàn)榇鎯?chǔ)體沖突而出現(xiàn)流水線停頓(stall)的情況。,.mptr偽指令,C64的 L1D的存儲(chǔ)體結(jié)構(gòu):8×32bit,流水線停頓,同一周期對(duì)同一bank的兩次讀取引起流水線阻塞的情況。LDW .D1 *A4++,A5 ; load 1, A4 address is in bank 0 || LDW .D2 *B4++,

25、B5; load 2, B4 address is in bank 0,.mptr偽指令例子:點(diǎn)積,.mptr偽指令例子:點(diǎn)積(續(xù)),.trip偽指令,label: .trip minimum_value[, maximum value[, factor]] Loop: .trip 10 告訴匯編優(yōu)化器循環(huán)迭代的次數(shù)至少10次。Loop:.trip 20,20 告訴匯編優(yōu)化器循環(huán)迭代20次。 Loop: .trip 8,

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲(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)論