版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、第6章 C6000 軟件優(yōu)化,第2節(jié) 線性匯編和匯編優(yōu)化器,寫線性匯編代碼使用匯編優(yōu)化器多周期循環(huán)的軟件流水匯編優(yōu)化器選項和偽指令,本節(jié)學(xué)習(xí)內(nèi)容,主要內(nèi)容,一、寫線性匯編代碼二、寫線性匯編代碼舉例—點積三、調(diào)用匯編優(yōu)化器四、多周期循環(huán)的軟件流水五、加權(quán)矢量和(WVS)循環(huán)展開,一、寫線性匯編代碼,,1、軟件工具流程,2、線性匯編文件基本考慮事項,線性匯編文件使用“.sa”擴展名僅對指定的代碼段進行優(yōu)化,指定代碼段外的
2、代碼被拷貝為輸出“.asm”文件線性匯編過程可以:傳遞參數(shù)返回結(jié)果使用符號變量不考慮流水線問題,二、寫線性匯編代碼舉例 —點積,,1、點積線性匯編,線性匯編不需要指出和考慮:功能單元寄存器延遲間隙,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、成對使用可作為C調(diào)用的函數(shù),在匯編代碼中使用.proc/ .endproc確定要優(yōu)化的代碼段,它們也必須成對使用,3、使用符號變量,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偽指令:聲明符號變量,變量由優(yōu)化器選擇與功能單元一致的寄存器
6、.reg在.(c)proc/ .endproc內(nèi)有效當(dāng)變量為40/64bit時,變量使用寄存器對格式:如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、保護寄存器,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指出需要保護的寄存器當(dāng).cproc/ .endproc內(nèi)的代碼明顯使用了要保護的寄存器,優(yōu)化器也可能使用該寄存器,如:,,6、流水代碼的最小循環(huán)次數(shù),具有填充和排空5次運算迭代,循環(huán)計數(shù)設(shè)置為3最小循環(huán)次數(shù):3,,循環(huán)測試,7、
12、計算最小循環(huán)次數(shù),最小循環(huán)次數(shù)=循環(huán)和排空的周期數(shù),這個點積代碼最小循環(huán)次數(shù)=?,8、冗余循環(huán),非流水代碼執(zhí)行較慢,運算迭代次數(shù)>=最小循環(huán)次數(shù),流水代碼執(zhí)行較快,,,9、消除冗余循環(huán),關(guān)閉軟件流水(-mu)減小代碼尺寸,但也減小吞吐量指出運算迭代次數(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、指出運算迭代次數(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,,指出運算迭代次數(shù),11、點積的完整線性匯編,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語言實現(xiàn)算法并驗證. 寫C6x線性匯編代碼. 畫相關(guān)圖. 分配功能單元和寄存器. 建編排表. 將編排表轉(zhuǎn)換為C6x匯編代碼,第一步:C代碼,第二步:線性匯編代碼,第三步:相關(guān)圖,第四步:分配功能單
18、元,2周期循環(huán),2個周期/每次循環(huán)迭代,迭代間隔:每次循環(huán)迭代占用的周期數(shù),多周期循環(huán),第五步:建迭代間隔編排表(1),第五步:建迭代間隔編排表(2),第五步:建迭代間隔編排表(3),第五步:建迭代間隔編排表(4),第五步:建迭代間隔編排表(5),第五步:建迭代間隔編排表(6),展開加權(quán)矢量和代碼,展開加權(quán)矢量和:2個結(jié)果/每3個周期,要點: 循環(huán)展開,充分利用資源,五、匯編優(yōu)化器選項和偽指令,-on選項 -mt選項和.no_mdep
19、偽指令 【C程序的 restrict關(guān)鍵字】.mdep偽指令 .mptr偽指令 .trip偽指令 【C程序的MUST_ITERATE pragma】,-on選項,軟件流水需要選擇-o2或-o3選項-o = -o2-o3優(yōu)化的工作:文件級優(yōu)化 1.刪除未使用的所有函數(shù) 2.當(dāng)函數(shù)的返回值沒有用到時,簡化函數(shù)返回的形式 3.內(nèi)聯(lián)小的函數(shù) 4.重新對函數(shù)聲明進行排序。這樣就使得當(dāng)優(yōu)化調(diào)用代
20、碼時,被調(diào)用函數(shù)的屬性是已知的。 5.當(dāng)所用調(diào)用都傳遞一個相同的參數(shù)時,把這個參數(shù)直接放到函數(shù)體中去,不再通過寄存器/存儲器的方式傳遞這個參數(shù)。 6.識別文件級變量的特征,-o3 + -pm :程序級優(yōu)化,如果一個函數(shù)中的一個特殊的變量的值總是一樣的,編譯器會用這個值直接代替該變量,直接進行值傳遞而不是參數(shù)傳遞。 如果一個函數(shù)的返回值都沒有被用到,編譯器就會刪除這個函數(shù)的返回值。 如果
21、一個函數(shù)沒有被直接或間接地被調(diào)用,編譯器就會刪除這個函數(shù)。,-mt選項和.no_mdep偽指令,因為當(dāng)你執(zhí)行讀取或存儲指令時,匯編優(yōu)化器并不知道你要訪問的對象在哪里,所以匯編優(yōu)化器就非常保守地認為存儲器操作之間有相關(guān)性。匯編優(yōu)化器會確保在下一次從reg1地址中讀取數(shù)據(jù)之前往reg5地址中存儲數(shù)據(jù)的工作已經(jīng)完成。如果要存的.reg5中的地址不是“reg1”要讀取的下一個地址,將導(dǎo)致循環(huán)優(yōu)化效果不好。對于那些“reg5”是指向“
22、reg1”的下一個地址的循環(huán),這些是必要的。對于大部分的循環(huán),并不是這樣的,可以告訴匯編優(yōu)化器更積極地安排存儲器操作??梢酝ㄟ^在線性匯編函數(shù)中使用“.no_mdep” (無存儲器相關(guān)性)偽指令或者在編譯線性匯編文件的時候用-mt選項實現(xiàn)。,,.mdep偽指令,假如你需要指明2個或更多的存儲體的相關(guān)性,你可以使用.mdep偽指令。用存儲體相關(guān)性標號來注釋你的代碼,并且在線性匯編函數(shù)中加上.mdep偽指令。當(dāng)使用了.no_mdep或-m
23、t后,才需要使用.mdep偽指令。.mdep偽指令表明從LDW指令到STW指令中有存儲體相關(guān)性。這就意味著STW指令必須在LDW指令后執(zhí)行。.mdep偽指令不表明在STW指令到LDW指令中存在存儲體相關(guān)性。要處理后一種情況,還需要一個.mdep偽指令。,.mptr偽指令,.mptr偽指令給匯編優(yōu)化器提供了怎樣避免存儲體(bank)沖突的內(nèi)容。匯編優(yōu)化器會重新安排匯編代碼中生成的存儲體引用,以避免存儲器的沖突,這些沖突是由偽指令
24、.mptr指明的。這意味著通過避免存儲器的沖突,匯編優(yōu)化器產(chǎn)生的代碼的執(zhí)行速度會更快,沒有因為存儲體沖突而出現(xiàn)流水線停頓(stall)的情況。,.mptr偽指令,C64的 L1D的存儲體結(jié)構(gòu):8×32bit,流水線停頓,同一周期對同一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偽指令例子:點積,.mptr偽指令例子:點積(續(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等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- c6000系列dsp測試系統(tǒng)設(shè)計與實現(xiàn)
- C6000系列DSP測試系統(tǒng)設(shè)計與實現(xiàn).pdf
- 第十七講 c6000的主機口hpi
- 基于C6000系列DSP的PMP測量系統(tǒng).pdf
- 基于C6000的圖像處理器的設(shè)計.pdf
- 基于C6000 DSP數(shù)字語音壓縮技術(shù)的研究.pdf
- 基于C6000系列DSP的JPEG圖像壓縮技術(shù)研究.pdf
- 基于C6000 DSP的JPEG2000圖像壓縮技術(shù)研究.pdf
- 基于C6000指令集可靠性評估方法的研究.pdf
- tms320c6000內(nèi)聯(lián)指令匯編
- 6_2關(guān)于態(tài)度與品德形成與改變的幾種理論
- 基于TMS320C6000IDK的視頻編碼實現(xiàn)與優(yōu)化.pdf
- c6微能力點優(yōu)秀案例匯編
- acs6000c故障說明書
- 優(yōu)化營商環(huán)境表態(tài)發(fā)言匯編(6篇)
- 基于GCC的DSP C Compiler匯編優(yōu)化初步.pdf
- 辦公軟件應(yīng)用試題中級匯編第6套
- c2微能力點優(yōu)秀案例匯編
- jis c1806-2-6-2012
- 匯編語言到C語言翻譯軟件的設(shè)計與實現(xiàn).pdf
評論
0/150
提交評論