版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、第第5章章 線性匯編優(yōu)化代碼線性匯編優(yōu)化代碼5.1 匯編優(yōu)化器選項(xiàng)與偽指令匯編優(yōu)化器選項(xiàng)與偽指令5.2 編寫并行代碼編寫并行代碼5.3 軟件流水軟件流水5.4 多周期循環(huán)的模迭代多周期循環(huán)的模迭代5.5 循環(huán)傳遞路徑循環(huán)傳遞路徑5.6 循環(huán)中的循環(huán)中的IF-Then-Else語句語句5.7 循環(huán)展開循環(huán)展開5.8 生命太長問題生命太長問題5.9 消除冗余取數(shù)消除冗余取數(shù)5.10 存儲(chǔ)體存儲(chǔ)體5.11 軟件流水外循環(huán)軟件流水外循環(huán)5.12 同內(nèi)循環(huán)一起條件執(zhí)行外循環(huán)同內(nèi)循環(huán)一起條件執(zhí)行外循環(huán)5.13 通用目標(biāo)文件格式(通用目標(biāo)文件格式(COFF)5.1 匯編優(yōu)化器選項(xiàng)與偽指令匯編優(yōu)化器選項(xiàng)與偽指
2、令(1)-on選項(xiàng)(2) -mt選項(xiàng)和no_mdep偽指令(3) .mdep偽指令(4) .mptr偽指令(5) .trip偽指令5.2 編寫并行代碼編寫并行代碼|5.2.1 點(diǎn)積的點(diǎn)積的C代碼代碼a)定點(diǎn)點(diǎn)積的C代碼int dotp(short a, short b)int sum, i;sum = 0;for(i=0; i100; i+)sum += ai * bi;return(sum);5.2.1 點(diǎn)積的點(diǎn)積的C代碼代碼b)浮點(diǎn)點(diǎn)積的C代碼float dotp(float a, float b)int i;float sum;sum = 0;for(i=0; i 15ADD pi_sc
3、aled,bi,ci ; ci = (m * ai) 15 + biSTH ci,*cptr+ ; 存儲(chǔ) cicntrSUB cntr,1,cntr ; 循環(huán)計(jì)數(shù)器遞減cntrB LOOP ; 跳轉(zhuǎn)到 loop5.4.2 確定最小迭代間隔確定最小迭代間隔v1. 展開的加權(quán)矢量和的展開的加權(quán)矢量和的C代碼代碼v2. 轉(zhuǎn)換展開的內(nèi)核循環(huán)為線性匯編轉(zhuǎn)換展開的內(nèi)核循環(huán)為線性匯編v3. 確定新的最小迭代間隔確定新的最小迭代間隔5.4.3 畫相關(guān)性圖畫相關(guān)性圖圖5-11把相關(guān)性圖均勻分成了兩個(gè)部分,最小迭代間隔為2。5.4.4 線性匯編資源分配線性匯編資源分配【例例5.33】 帶資源分配的加權(quán)矢量和的線性
4、匯編程序。LDW .D2 *A4+,A2 ; ai & ai+1LDW .D1 *B4+,B2 ; bi & bi+1MPY .M1 A2,B6,A5 ; pi = m * aiMPYHL .M2 A2,B6,B5 ; pi+1 = m * ai+1SHR .S1 A5,15,A7 ; pi_scaled = (m * ai) 15SHR .S2 B5,15,B7 ; pi+1_scaled = (m * ai+1) 15AND .L2X B2,B10,B8 ; biSHR .S2 B2,16,B1 ; bi+1ADD .L1X A7,B8,A9 ; ci = (m * ai)
5、 15 + biADD .L2 B7,B1,B9 ; ci+1 = (m * ai+1) 15 + bi+1STH .D1 A9,*A6+2 ; 存儲(chǔ) ciSTH .D2 B9,*B0+2 ; 存儲(chǔ) ci+1A1 SUB .L1 A1,1,A1 ; 循環(huán)計(jì)數(shù)器遞減A1 B .S1 LOOP ; 跳轉(zhuǎn)至 loop5.4.5 模迭代間隔編排模迭代間隔編排v1. 資源沖突資源沖突v2. 生命太長生命太長v3. 解決生命生命太長的問題解決生命生命太長的問題v4. 安排剩余指令安排剩余指令5.4.6 使用匯編優(yōu)化器出來加權(quán)矢量和使用匯編優(yōu)化器出來加權(quán)矢量和例5.34為加權(quán)矢量和的線性匯編,該代碼作為匯編
6、優(yōu)化器的輸入,由匯編優(yōu)化器產(chǎn)生軟件流水循環(huán)?!纠?.34】 加權(quán)矢量和的線性匯編。5.4.7 最后匯編最后匯編該代碼包括如下優(yōu)化:由于第次迭代的STHci+1與第+1次迭代的STHci并行執(zhí)行,為防止STHci+執(zhí)行次,而STHci執(zhí)行次,對(duì)循環(huán)限定執(zhí)行49次,但在循環(huán)退出后安排ADD ci+1和STHci+指令;用于ADD指令的mask由MVK和MVKH指令設(shè)置;數(shù)組C的奇元素指針也在前面填充部分設(shè)置。【例例5.35】加權(quán)矢量和匯編代碼。5.5 循環(huán)傳遞路徑循環(huán)傳遞路徑|5.5.1 將將C代碼的內(nèi)核循環(huán)轉(zhuǎn)換為線性匯編代碼的內(nèi)核循環(huán)轉(zhuǎn)換為線性匯編【例例5.37】 IIR內(nèi)核循環(huán)的線性匯編。L
7、DH *xptr+,xi ; xi+1MPY c1,xi,p0 ; c1 * xiLDH *xptr,xi+1 ; xi+1MPY c2,xi+1,p1 ; c2 * xi+1ADD p0,p1,s0 ; c1 * xi + c2 * xi+1LDH *yptr+,yi ; yiMPY c3,yi,p2 ; c3 * yiADD s0,p2,s1 ; c1 * xi + c2 * xi+1 + c3 * yiSHR s1,15,yi+1 ; yi+1STH yi+1,*yptr ; 存儲(chǔ) yi+1cntrSUB cntr,1,cntr ; 循環(huán)計(jì)數(shù)器遞減cntrB LOOP ; 跳轉(zhuǎn)至loop
8、5.5.2 畫相關(guān)性圖畫相關(guān)性圖圖5-15是IIR濾波器的相關(guān)性圖,從存yi+1到取yi之間形成了一個(gè)循環(huán)傳遞路徑,由于存取指令使用相同的存儲(chǔ)器流水線。5.5.3 確定最小迭代間隔確定最小迭代間隔v1. 畫新的相關(guān)性圖畫新的相關(guān)性圖圖5-16中所示是一個(gè)循環(huán)傳遞路徑為4(2+1+1)的新的相關(guān)性圖,因?yàn)镸PY p2指令能夠直接從寄存器中讀取yi+1,因此循環(huán)傳遞路徑可以減少6個(gè)周期,5.5.3 確定最小迭代間隔確定最小迭代間隔v2. 新的新的TMS320C6x指令(內(nèi)核循環(huán))指令(內(nèi)核循環(huán))【例例5.38】 循環(huán)傳遞路徑較小的IIR內(nèi)核循環(huán)的線性匯編。LDH *xptr+,xi ; xi+1M
9、PY c1,xi,p0 ; c1 * xiLDH *xptr,xi+1 ; xi+1MPY c2,xi+1,p1 ; c2 * xi+1ADD p0,p1,s0 ; c1 * xi + c2 * xi+1MPY c3,y,p2 ; c3 * yiADD s0,p2,s1 ; c1 * xi + c2 * xi+1 + c3 * yiSHR s1,15,y ; yi+1STH y,*yptr+ ; 存儲(chǔ) yi+1cntrSUB cntr,1,cntr ; 循環(huán)計(jì)數(shù)器遞減cntrB LOOP ; 跳轉(zhuǎn)至loop5.5.4 線性匯編資源分配線性匯編資源分配【例例5.39】 帶分配資源的IIR內(nèi)核循環(huán)
10、線性匯編。LDH .D1 *A4+,A2 ; xi+1MPY .M1 A6,A2,A5 ; c1 * xiLDH .D1 *A4,A3 ; xi+1MPY .M1X B6,A3,A7 ; c2 * xi+1ADD .L1 A5,A7,A9 ; c1 * xi + c2 * xi+1MPY .M2X A8,B2,B3 ; c3 * yiADD .L2X B3,A9,B5 ; c1 * xi + c2 * xi+1 + c3 * yiSHR .S2 B5,15,B2 ; yi+1STH .D2 B2,*B4+ ; 存儲(chǔ) yi+1A1 SUB .L1 A1,1,A1 ; 循環(huán)計(jì)數(shù)器遞減A1 B .S
11、1 LOOP ; 跳轉(zhuǎn)至loop5.5.5 線模迭代間隔安排線模迭代間隔安排表5-14是IIR濾波器的模迭代間隔表,表中SHR指令及時(shí)在周期10結(jié)束,以便下次迭代的MPY p2在周期11讀取其結(jié)果。5.5.6 使用匯編優(yōu)化器處理使用匯編優(yōu)化器處理IIR濾波器濾波器【例例5.40】 IIR濾波器的線性匯編。.global _iir_iir: .cproc x, y, c1, c2, c3.reg xi, xi1, yi1.reg p0, p1, p2, s0, s1, cntrMVK 100,cntr ; cntr = 100LDH .D2 *y+,yi1 ; yi+1LOOP: .trip 1
12、00LDH .D1 *x+,xi ; xiMPY .M1 c1,xi,p0 ; c1 * xiLDH .D1 *x,xi1 ; xi+1MPY .M1X c2,xi1,p1 ; c2 * xi+1ADD .L1 p0,p1,s0 ; c1 * xi + c2 * xi+1MPY .M2X c3,yi1,p2 ; c3 * yiADD .L2X s0,p2,s1 ; c1 * xi + c2 * xi+1 + c3 * yiSHR .S2 s1,15,yi1 ; yi+1STH .D2 yi1,*y+ ; 存儲(chǔ) yi+1cntr SUB .L1 cntr,1,cntr ; 循環(huán)計(jì)數(shù)器遞減cntr
13、 B .S1 LOOP ; 跳轉(zhuǎn)至 loop.endproc5.5.7 最后匯編最后匯編例5.41是IIR濾波器的最后匯編代碼,代碼中,循環(huán)外有一個(gè)取y0指令,除此之外沒有取y數(shù)組指令,執(zhí)行該代碼需要408個(gè)周期(4100)+8)?!纠?.41】 IIR濾波器的匯編代碼。5.6 循環(huán)中的循環(huán)中的IF-Then-Else語句語句|5.6.1 IF-Then-Else的的C代碼代碼【例例5.42】 IF-Then-Else的C代碼。int if_then(short a, int codeword, int mask, short theta)int i,sum, cond;sum = 0;fo
14、r (i = 0; i 32; i+)cond = codeword & mask;if (theta = !(!(cond)sum += ai;elsesum = ai;mask = mask 1;return(sum);5.6.2 轉(zhuǎn)換轉(zhuǎn)換C代碼為線性匯編代碼為線性匯編【例例5.43】 IF-Then-Else內(nèi)核循環(huán)的線性匯編。AND codeword,mask,cond ; cond = codeword & maskcondMVK 1,cond ; !(!(cond)CMPEQ theta,cond,if ; (theta = !(!(cond)LDH *aptr+,
15、ai ; aiif ADD sum,ai,sum ; sum += ai!if SUB sum,ai,sum ; sum = aiSHL mask,1,mask ; mask = mask 1;cntrADD 1,cntr,cntr ; 計(jì)數(shù)器遞減cntrB LOOP ; 循環(huán)5.6.3 畫相關(guān)性圖畫相關(guān)性圖圖5-17是If-Then-ElseC代碼的相關(guān)性圖。5.6.4 確定最小迭代間隔確定最小迭代間隔從表5-15中可以看出,沒有一個(gè)資源是使用超過兩次的,因此,最小迭代間隔仍然為2。單元指令合計(jì)/單元單元指令合計(jì)/單元.M10.M20.S1SHL&B2.S2MVK1.D1LDH1.L
16、2CMPEQ1.D2ADD&SUB2.L2或.S2AND1.L1,.S1,或.D1.L2,.S2或.D2ADD1非.M單元合計(jì)5非.M單元合計(jì)45.6.5 線性匯編資源分配線性匯編資源分配【例例5.44】If-Then-Else代碼的線性匯編。 .global _if_then_if_then: .cproc a, cword, mask, theta.reg cond, if, ai, sum, cntrMVK 32,cntr ; cntr = 32ZERO sum ; sum = 0LOOP: .trip 32AND .S2X cword,mask,cond ; cond = co
17、deword & maskcond MVK .S2 1,cond ; !(!(cond)CMPEQ .L2 theta,cond,if ; (theta = !(!(cond)LDH .D1 *a+,ai ; aiif ADD .L1 sum,ai,sum ; sum += ai!if SUB .D1 sum,ai,sum ; sum = aiSHL .S1 mask,1,mask ; mask = mask 1;cntr ADD .L2 1,cntr,cntr ; 計(jì)數(shù)器遞減cntr B .S1 LOOP ; 循環(huán).return sum.endproc5.6.6 最后匯編最后匯編例5
18、.45是軟件流水后的最后匯編代碼,該循環(huán)代碼的性能為70個(gè)周期。【例例5.45】 If-Then-Else 匯編代碼。5.6.7 性能比較性能比較【例例5.46】 循環(huán)次數(shù)大于3的If-Then-Else匯編代碼。5.7 循環(huán)展開循環(huán)展開|5.7.1 展開展開IF-Then-Else的的C代碼代碼【例例5.47】if-Then-Else的C代碼。5.7.2 C代碼轉(zhuǎn)換會(huì)線性匯編代碼轉(zhuǎn)換會(huì)線性匯編【例例5.48】 循環(huán)展開的If-Then-Else內(nèi)核線性匯編。AND codeword,maski,condi ; condi = codeword & maskicondiMVK 1,co
19、ndi ; !(!(condi)CMPEQ theta,condi,ifi ; (theta = !(!(condi)LDH *aptr+,ai ; aiifi ADD sumi,ai,sumi ; sum += ai!ifiSUB sumi,ai,sumi ; sum = aiSHL maski,1,maski+1 ; maski+1 = maski 1;AND codeword,maski+1,condi+1 ; condi+1 = codeword & maski+1condi+1MVK 1,condi+1 ; !(!(condi+1)CMPEQ theta,condi+1,if
20、i+1 ; (theta = !(!(condi+1)LDH *aptr+,ai+1 ; ai+!ifi+1 ADD sumi+1,ai+1,sumi+1 ; sum += ai+1!ifi+1 SUB sumi+1,ai+1,sumi+1 ; sum = ai+1SHL maski+1,1,maski ; maski = maski+1 15MPY a1,d,a2 ; a2 = a1 * dADD a2,a0,a3 ; a3 = a2 + a0ADD sum0,a3,sum0 ; sum0 += a3MPY bi,c,b0 ; b0 = bi * cSHR b0,15,b1 ; b1 = b
21、0 15MPY b1,e,b2 ; b2 = b1 * eADD b2,b0,b3 ; b3 = b2 + b0ADD sum1,b3,sum1 ; sum1 += b3cntrSUB cntr,1,cntr ; 循環(huán)計(jì)數(shù)器遞減cntrB LOOP ; 跳轉(zhuǎn)到loop5.8.3 畫相關(guān)性圖畫相關(guān)性圖圖5-19所示為生命太長代碼相關(guān)性圖,該算法包含3個(gè)各自獨(dú)立的圖,其中兩個(gè)獨(dú)立圖中有分開的聯(lián)合路徑,從a0到a3與從b0到b3。5.8.4 確定最小迭代間隔確定最小迭代間隔根據(jù)圖5-19的相關(guān)性圖和線性匯編指令可得出生命太長代碼的資源表如表5-17所示。單元指令合計(jì)/單元單元指令合計(jì)/單元.M1MP
22、Y2.M2MPY2.S1B&SHR2.S2SHR1.D1LDHs1.D2LDH1.L1,S1或.D12 ADDs2.L2,.S2或.D22ADDs and SUB3非.M單元合計(jì)5非.M單元合計(jì)55.8.4 確定最小迭代間隔確定最小迭代間隔圖5-20是加MV指令的新相關(guān)圖,該圖左邊的叉路由MV指令分成兩段。5.8.5 線性匯編資源安排線性匯編資源安排例5.53是根據(jù)相關(guān)圖得出的安排功能單元的線性匯編,此處使用了兩個(gè)2x和一個(gè)1x通路,c、d、和e可以載入循環(huán)外的另一端寄存器中?!纠?.53】 生命太長代碼的線性匯編。5.8.6 帶帶MV指令的最后匯編指令的最后匯編例5.54是帶有MV
23、指令的生命太長代碼的最后匯編代碼,執(zhí)行該代碼需要212個(gè)周期(200*100+11+1)。【例例5.54】 帶有MV指令的生命太長代碼的最后匯編代碼。5.9 消除冗余取數(shù)消除冗余取數(shù)|5.9.1 轉(zhuǎn)換轉(zhuǎn)換C代碼為線性匯編代碼為線性匯編【例例5.57】 FIR濾波器內(nèi)核循環(huán)的線性匯編。LDH .D2 *x_1+2,x1 ; x1 = xj+i+1LDH .D1 *h+2,h0 ; h0 = hiMPY .M1 x0,h0,p00 ; x0 * h0MPY .M1X x1,h0,p10 ; x1 * h0ADD .L1 p00,sum0,sum0 ; sum0 += x0 * h0ADD .L2X
24、 p10,sum1,sum1 ; sum1 += x1 * h0LDH .D1 *x+2,x0 ; x0 = xj+i+2LDH .D2 *h_1+2,h1 ; h1 = hi+1MPY .M2 x1,h1,p01 ; x1 * h1MPY .M2X x0,h1,p11 ; x0 * h1ADD .L1X p01,sum0,sum0 ; sum0 += x1 * h1ADD .L2 p11,sum1,sum1 ; sum1 += x0 * h1ctr SUB .S2 ctr,1,ctr ; 循環(huán)計(jì)數(shù)器遞減ctr B .S2 LOOP ; 跳轉(zhuǎn)至loop5.9.2 畫相關(guān)性圖畫相關(guān)性圖圖5-21
25、是消除冗余取后的FIR濾波器的相關(guān)性圖。5.9.3 確定最小迭代間隔確定最小迭代間隔表5-18是FIR濾波器代碼的資源表,可以確定最小迭代間隔為2,這意味著每個(gè)周期可執(zhí)行兩個(gè)乘累加操作。單元指令合計(jì)/單元單元指令合計(jì)/單元.M12 MPY2.M22 MPY2.S1B&SHR0.S2B1.D12 LDH2.D22 LDHs2.L1,S1或.D12 ADDs2.L2,.S2或.D22ADDs and SUB3非.M單元合計(jì)4非.M單元合計(jì)61x路徑22x路徑25.9.4 線性匯編資源分配線性匯編資源分配【例例5.58】 例 FIR濾波器的線性匯編。5.9.5 最后匯編最后匯編該嵌套循環(huán)執(zhí)行
26、的總周期數(shù)為2350,此處每個(gè)外循環(huán)都有15個(gè)周期的開銷:9個(gè)周期執(zhí)行內(nèi)環(huán)填充;6個(gè)周期執(zhí)行到外環(huán)的跳轉(zhuǎn)?!纠?.59】 例消除冗余取指令的最終FIR濾波器匯編代碼。5.10 存儲(chǔ)體存儲(chǔ)體|5.10.1 FIR濾波器的內(nèi)核循環(huán)濾波器的內(nèi)核循環(huán)【例例5.60】 FIR濾波器最后匯編代碼的內(nèi)核循環(huán)。LOOP:ADD .L2X A8,B9,B9 ; sum1 += x1 * h0| ADD .L1 A7,A9,A9 ; sum0 += x0 * h0| MPY .M2 B1,B0,B7 ;* x1 * h1| MPY .M1X B1,A1,A8 ;* x1 * h0|B2 B .S2 LOOP ;
27、* 跳轉(zhuǎn)至內(nèi)循環(huán)| LDH .D1 *A5+2,A1 ;* h0 = hi| LDH .D2 *B5+2,B1 ;* x1 = xj+i+1ADD .L1X B7,A9,A9 ; sum0 += x1 * h1| ADD .L2 B8,B9,B9 ; sum1 += x0 * h1| MPY .M2X A0,B0,B8 ;* x0 * h1| MPY .M1 A0,A1,A7 ;* x0 * h0|B2 SUB .S2 B2,1,B2 ;* 內(nèi)循環(huán)計(jì)數(shù)器遞減| LDH .D2 *B4+2,B0 ;* h1 = hi+1| LDH .D1 *A4+2,A0 ;* x0 = xj+i+25.10.
28、1 FIR濾波器的內(nèi)核循環(huán)濾波器的內(nèi)核循環(huán)畫出數(shù)組的奇偶元素的讀取安排在同一循環(huán)周期內(nèi)的FIR濾波器相關(guān)圖,如圖5-24所示。5.10.2 展開的展開的FIR濾波器的濾波器的C代碼代碼例5.61是展開內(nèi)核循環(huán)后的FIR濾波器C代碼,該方法增加了安排指令的靈活性,而在不考慮數(shù)組存儲(chǔ)形式和存儲(chǔ)器block的情況下,寫出不產(chǎn)生存儲(chǔ)體沖突的FIR濾波器代碼?!纠?.61】 展開內(nèi)核循環(huán)后的FIR濾波器C代碼。5.10.3 將將C代碼轉(zhuǎn)換為線性匯編代碼轉(zhuǎn)換為線性匯編例5.62為循環(huán)展開的FIR濾波器C代碼內(nèi)核循環(huán)的線性匯編?!纠?.62】 展開的FIR濾波器內(nèi)核循環(huán)線性匯編。5.10.4 畫相關(guān)性圖
29、畫相關(guān)性圖圖5-25是不存在存儲(chǔ)器沖突的FIR濾波器的相關(guān)性圖。5.10.5 含有含有.mptr命令的展開后命令的展開后FIR線性匯編線性匯編例5.63給出了具有.mptr偽指令的展開FIR濾波器內(nèi)核循環(huán)的線性匯編,.mptr偽指令允許匯編優(yōu)化器根據(jù)特定指針寄存器和存儲(chǔ)器訪問信息,確定兩個(gè)存儲(chǔ)器操作是否存在bank沖突?!纠?.63】 展開的FIR濾波器線性匯編。5.10.6 線性匯編資源分配線性匯編資源分配隨著一個(gè)循環(huán)內(nèi)的指令數(shù)的增加,對(duì)該循環(huán)內(nèi)的每個(gè)數(shù)值安排特定的寄存器越來越困難,由于TMS320C6000僅有32個(gè)寄存器,如果一個(gè)循環(huán)內(nèi)有33條指令,且每一條指令都有一個(gè)數(shù)值,則這些數(shù)值
30、不能單獨(dú)占用一個(gè)寄存器,而是由該循環(huán)中不在相同周期存活的數(shù)值分享寄存器,手工安排寄存器雖然不復(fù)雜,但是可能會(huì)很慢。5.10.7 確定最小迭代間隔確定最小迭代間隔如表5-19所示為FIR濾波器代碼資源,沒有存儲(chǔ)器沖突的FIR濾波器的最小迭代間隔應(yīng)該是4,這意味著每周期完成2個(gè)乘累加。單元指令合計(jì)/單元單元指令合計(jì)/單元.M14 MPY4.M24 MPY2.S10.S2B1.D14 LDHs4.D24 LDHs2. L 1 , S 1或.D14 ADDs4.L2,.S2或.D24ADDs and SUB3非.M單元合計(jì)8非.M單元合計(jì)101x路徑42x路徑45.10.8 最后匯編最后匯編例5.64
31、是消除冗余取和無存儲(chǔ)器沖突的FIR濾波器的最后匯編代碼,該代碼的執(zhí)行周期數(shù)為2402(50(8*4+10+6)+2),其外環(huán)開銷為16個(gè)周期。【例例5.64】 消除冗余取和無存儲(chǔ)器沖突的FIR濾波器匯編代碼。5.11 軟件流水外循環(huán)軟件流水外循環(huán)| 5.11.1 展開展開FIR濾波器的濾波器的C代碼代碼【例例5.65】 循環(huán)展開后的FIR濾波器C代碼。5.11.2 最后匯編最后匯編例5.66是軟件流水外環(huán)的FIR濾波器的最后匯編代碼。在內(nèi)循環(huán)后的每條指令注釋中使用了e、p或o標(biāo)記,分別表示指令是排空、填充和外環(huán)指令?!纠?.66】 消除冗余取、無存儲(chǔ)器沖突和軟件流水外環(huán)的FIR濾波器匯編代碼
32、。5.12 同內(nèi)循環(huán)一起條件執(zhí)行外循環(huán)同內(nèi)循環(huán)一起條件執(zhí)行外循環(huán)| 5.12.1 展開展開FIR濾波器的濾波器的C代碼代碼【例例5.67】 展開后的FIR濾波器C代碼。5.12.2 將內(nèi)核循環(huán)的將內(nèi)核循環(huán)的C代碼轉(zhuǎn)換為線性匯編代碼轉(zhuǎn)換為線性匯編【例例5.68】 展開后的FIR內(nèi)核循環(huán)的線性匯編。5.12.3 將外環(huán)的將外環(huán)的C代碼轉(zhuǎn)換為線性匯編代碼轉(zhuǎn)換為線性匯編【例例5.69】 FIR濾波器外環(huán)線性匯編。sctr SUB sctr,1,sctr ; 存儲(chǔ)循環(huán)計(jì)數(shù)器遞減!sctr SHR sum07,15,y0 ; (sum0 15)!sctr SHR sum17,15,y1 ; (sum1 1
33、5)!sctrSTH y0,*y+2 ; yj = (sum0 15)!sctr STH y1,*y_1+2 ; yj+1 = (sum1 15)!sctr MVK 4,sctr ; 復(fù)位存儲(chǔ)循環(huán)計(jì)數(shù)器pctr SUB pctr,1,pctr ; 復(fù)位循環(huán)計(jì)數(shù)器指針遞減!pctr SUB x,rstx2,x ; 復(fù)位 x ptr!pctr SUB x_1,rstx1,x_1 ; 復(fù)位 x_1 ptr!pctr SUB h,rsth1,h ; 復(fù)位 h ptr!pctr SUB h_1,rsth2,h_1 ; 復(fù)位 h_1 ptr!pctr MVK 4,pctr ; 復(fù)位指針復(fù)位循環(huán)計(jì)數(shù)器5.12.4 展開展開FIR濾波器的濾波器的C代碼代碼由例5.70可看出內(nèi)循環(huán)與外循環(huán)總指令數(shù)為38條,顯然不能使用4周期循環(huán),為減少外環(huán)開銷,又不降低內(nèi)環(huán)吞吐量,必須再展開一次內(nèi)循環(huán),例為展開后的FIR濾波器C代碼,其每次內(nèi)環(huán)迭代處理8個(gè)元素?!纠?.70】 展開的FIR濾波器C代碼。5.12.5 C代碼轉(zhuǎn)換為線性匯編(內(nèi)核循環(huán))代碼轉(zhuǎn)換為線性匯編(內(nèi)核循環(huán))該代碼中指令有如下的調(diào)整:使用LDW指令代替LDH指令
溫馨提示
- 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. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 專業(yè)選擇講座模板
- 2025年度茶葉產(chǎn)品溯源體系建設(shè)合同范本4篇
- 2025年度場(chǎng)化項(xiàng)目服務(wù)類采購項(xiàng)目合同附件定制版4篇
- 2025年度電競主題商鋪?zhàn)赓U合作協(xié)議4篇
- 2025年度生態(tài)環(huán)保園區(qū)場(chǎng)地委托出租與環(huán)保技術(shù)服務(wù)合同樣本4篇
- 專業(yè)技能提升課程2024培訓(xùn)協(xié)議
- 人教版九年級(jí)化學(xué)上冊(cè)第1章開啟化學(xué)之門《第2節(jié) 化學(xué)研究什么》公開示范課教學(xué)課件
- 二零二四事業(yè)單位聘用合同四種類別適用范圍與條件3篇
- 2025年度文化演藝中心場(chǎng)地租用協(xié)議范本4篇
- 2025年度城市綜合體項(xiàng)目場(chǎng)地購置合同示范文本4篇
- 格式塔心理咨詢理論與實(shí)踐
- 精神發(fā)育遲滯的護(hù)理查房
- 有效排痰的護(hù)理ppt(完整版)
- 魯教版七年級(jí)數(shù)學(xué)下冊(cè)(五四制)全冊(cè)完整課件
- 英語六級(jí)詞匯(全)
- 算法向善與個(gè)性化推薦發(fā)展研究報(bào)告
- 聚合物的流變性詳解演示文稿
- 電氣設(shè)備預(yù)防性試驗(yàn)安全技術(shù)措施
- 醫(yī)院出入口安檢工作記錄表范本
- 內(nèi)科學(xué)教學(xué)課件:免疫性血小板減少癥(ITP)
- 中華人民共和國文物保護(hù)單位登記表
評(píng)論
0/150
提交評(píng)論