版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
C6000軟件優(yōu)化實(shí)例1.定點(diǎn)點(diǎn)積通過軟件流水等技術(shù),N點(diǎn)點(diǎn)積的時(shí)間
N/2。循環(huán)展開。一次迭代出兩次結(jié)果。但是,必須保證循環(huán)次數(shù)為偶數(shù)次。
如果不是循環(huán)偶數(shù)次,程序員自己補(bǔ)充memorypad.定點(diǎn)點(diǎn)積的相關(guān)圖(.sa)Almostperfect!L1:;PIPEDLOOPPROLOGLDW.D2T2*B5++,B6;|16|(P)<0,0>loadai&ai+1frommemory||[A0]BDEC.S1LOOP,A0;|23|(P)<0,2>branchtoloop||LDW.D1T1*A5++,A4;|17|(P)<0,0>loadbi&bi+1frommemoryLDW.D2T2*B5++,B6;|16|(P)<1,0>loadai&ai+1frommemory||[A0]BDEC.S1LOOP,A0;|23|(P)<1,2>branchtoloop||LDW.D1T1*A5++,A4;|17|(P)<1,0>loadbi&bi+1frommemoryLDW.D2T2*B5++,B6;|16|(P)<2,0>loadai&ai+1frommemory||[A0]BDEC.S1LOOP,A0;|23|(P)<2,2>branchtoloop||LDW.D1T1*A5++,A4;|17|(P)<2,0>loadbi&bi+1frommemoryLDW.D2T2*B5++,B6;|16|(P)<3,0>loadai&ai+1frommemory||[A0]BDEC.S1LOOP,A0;|23|(P)<3,2>branchtoloop||LDW.D1T1*A5++,A4;|17|(P)<3,0>loadbi&bi+1frommemoryMV.S2XA6,B4||MVK.L20x2,B0 ;initprologcollapsepredicate||LDW.D2T2*B5++,B6;|16|(P)<4,0>loadai&ai+1frommemory||[A0]BDEC.S1LOOP,A0;|23|(P)<4,2>branchtoloop||LDW.D1T1*A5++,A4;|17|(P)<4,0>loadbi&bi+1frommemory;**--------------------------------------------------------------------------*LOOP:;PIPEDLOOPKERNEL[B0]SUB.S2B0,1,B0;<0,7>||[!B0]ADD.L2B7,B4,B4;|20|<0,7>sum0+=(ai*bi)||[!B0]ADD.L1A6,A3,A3;|21|<0,7>sum1+=(ai+1*bi+1)||MPY.M2XB6,A4,B7;|18|<2,5>ai*bi||MPYH.M1XB6,A4,A6;|19|<2,5>ai+1*bi+1||[A0]BDEC.S1LOOP,A0;|23|<5,2>branchtoloop||LDW.D2T2*B5++,B6;|16|<7,0>loadai&ai+1frommemory||LDW.D1T1*A5++,A4;|17|<7,0>loadbi&bi+1frommemoryC64定點(diǎn)點(diǎn)積線性匯編程序生成的匯編代碼:collapsprolog技術(shù),縮小代碼尺寸2.浮點(diǎn)復(fù)數(shù)數(shù)組求模難點(diǎn):開方運(yùn)算解決方法:用C67xx的特殊指令
rcpsp,rsqrsp循環(huán)展開提高速度學(xué)習(xí)重點(diǎn):特殊指令,no_mdep(關(guān)于循環(huán)傳遞路徑問題)存在問題:精度,3bit有效位C67xx求模的C代碼voidfloat_abs_asm(float*sadd,float*dadd,intabslong){ inti; floatans1,ans2; _nassert(abslong>64); for(i=0;i<abslong;i++) { ans1 =sadd[2*i]*sadd[2*i]+sadd[2*i+1]*sadd[2*i+1]; ans2 =_rcpsp(ans1); dadd[i]=_rsqrsp(ans2); } }觀察指針聲明restrict的區(qū)別.求模的線性匯編代碼求模的線性匯編程序生成的
匯編代碼的循環(huán)核LOOP:;PIPEDLOOPKERNEL
STW.D2T2B8,*B7++(8);|75|<0,16>||[A1]B.S1LOOP;|78|<1,13>||ADDSP.L2B5,B4,B8;|67|<2,10>||MPYSP.M1A4,A4,A4;|64|<3,7>||[A2]LDDW.D1T1*A7++(16),A5:A4;|60|<5,1>[A2]SUB.D1A2,1,A2;<0,17>||RCPSP.S1A0,A0;|71|<0,17>||RSQRSP.S2B8,B8;|70|<1,14>||ADDSP.L1A3,A4,A3;|66|<2,11>||MPYSP.M2B5,B5,B5;|63|<4,5>[B0]SUB.L2B0,1,B0;<0,18>||STW.D1T1A0,*A6++(8);|74|<0,18>||RSQRSP.S1A3,A0;|69|<1,15>||RCPSP.S2B8,B8;|72|<1,15>||[A1]ADD.L10xffffffff,A1,A1;|77|<2,12>||MPYSP.M1A5,A5,A3;|62|<4,6>||MPYSP.M2B4,B4,B4;|65|<4,6>||[B0]LDDW.D2T2*B6++(16),B5:B4;|61|<6,0>3.循環(huán)中的If-Then-Else在C代碼中有If-Then-Else語句,這個(gè)語句是當(dāng)條件為真時(shí)執(zhí)行某條指令,當(dāng)條件為假時(shí)執(zhí)行另一條指令。C6000的所有指令都可以根據(jù)C62x和C67x的五個(gè)通用寄存器中的一個(gè)和C64x的六個(gè)通用寄存器中的一個(gè)來?xiàng)l件執(zhí)行,因此在線性匯編中,可通過條件指令來實(shí)現(xiàn)這一功能。條件指令可以處理If-Then-Else語句的真假兩種情況。(多種情況不能僅用條件指令處理)顯然,跳轉(zhuǎn)是執(zhí)行If-Then-Else語句的一種方法,即條件為真時(shí)轉(zhuǎn)向ADD,否則轉(zhuǎn)向SUB。然而由于每個(gè)跳轉(zhuǎn)都有5個(gè)延遲間隙,這種方法需要額外的延遲周期。另外,在循環(huán)內(nèi)跳轉(zhuǎn)也使軟件流水幾乎不可能實(shí)現(xiàn)。
If語句的例子:short復(fù)數(shù)求模,并求最大模值和位置//declareanddefinetheCfunctionbelowvoidPlur_Arr_ABS_c(PlurData*restrictpPlurA,unsignedint*restrictpAbsResult,intn,int*restrictpMaxAbsVal,int*restrictpMaxAbsLoct){ inti,real,imag;// *pMaxAbsVal=0;//initialitherewaste1cpucycle #pragmaMUST_ITERATE(40,,2); for(i=n-1;i>=0;i--){ real=(pPlurA+i)->Real;//gettherealpartofPlurData imag=(pPlurA+i)->Imag;//gettheimagpartofPlurData //getthesqareroot *(pAbsResult+i)=_rcpsp(_rsqrsp(imag*imag+real*real)); if(*(pAbsResult+i)>*pMaxAbsVal){ *pMaxAbsVal=*(pAbsResult+i); *pMaxAbsLoct=i; } }}typedefstruct{ shortReal; shortImag;}PlurData; .global _plursa ;beginlinearasm_plursa:.cproc pPlurA,pAbsResult,n,pMaxAbsVal,pMaxAbsLoct .reg cntr,maxval,flag,maxloct,k .reg real,imag,sum0,sum1,sum2,sum3,sum4 .no_mdep ;nomemorydependencesoccurwithinthisfunction ZERO maxval ;maxval=0 ZERO k ;k=0,kindicatethelooptimesLOOP:.trip 40 ;iterate40timesatleast LDW *pPlurA++,real ;loadthearrayfrommemory MV real,imag ;copythe32bitsdatatoimag MPYH imag,imag,imag ;imag*imag MPY real,real,real ;real*real ADD real,imag,sum0 ;real*real+imag*imag INTSP sum0,sum1 ;int->single-precision RSQRSP sum1,sum2 ;getthesingle-precisionfloating-pointsquare-rootreciprocalapproximationvalue RCPSP sum2,sum3 ;sum3=1/sum2 SPTRUNC sum3,sum4 ;single-precision->int STW sum4,*pAbsResult++ ;storetheresult CMPGTU sum4,maxval,flag ;if(sum4>maxval)flag=1;elseflag=0[flag]MV sum4,maxval ;if(flag)maxval=sum4[flag]MV k,maxloct ;if(flag)maxloct=k[n] sub n,1,n ;decreasetheloopcountern add k,1,k ;increasethelooptimescounterk[n] B LOOP ;gotoloopifn!=0 STW maxloct,*pMaxAbsLoct;storethemaxlocttothememory STW maxval,*pMaxAbsVal ;storethemaxvaltothememory .endproc ;linearasmendsC生成的代碼和
線性匯編生成的代碼比較C生成的代碼尺寸:604Byte線性匯編生成的代碼尺寸:365ByteC生成的代碼的執(zhí)行時(shí)間: 154CLK線性匯編生成的代碼的執(zhí)行時(shí)間: 155CLK4.生命太長問題(Live-Too-Long)
定義:
當(dāng)要求父指令結(jié)果存活時(shí)間比循環(huán)的最小迭代間隔長(從資源的角度看,得到的循環(huán)的最小迭代間隔),這時(shí)就產(chǎn)生一個(gè)生命太長問題。產(chǎn)生問題的原因:
因?yàn)槊織l指令每隔一個(gè)迭代間隔周期執(zhí)行一次,當(dāng)要求父指令結(jié)果存活時(shí)間大于迭代間隔時(shí),在子指令讀父指令結(jié)果之前,這條父指令的下次迭代用新的值覆蓋了這個(gè)寄存器的值。生命周期太長的例子生命周期太長的例子兩個(gè)分開的路徑從a0到a3和從b0到b3產(chǎn)生了生命太長問題。因?yàn)锳DDa3指令必須在SHRa1和MPYa2指令完成后才能執(zhí)行,所以a0必須存活至少4周期。
解決生命周期太長的辦法1.循環(huán)展開
在每次迭代中所做的工作將是原先的兩倍。展開循環(huán)后,基于資源和路徑數(shù)據(jù)相關(guān)的最小迭代間隔上升為4。盡管這種方法可獲得盡可能高的循環(huán)吞吐量
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 管道布置圖(標(biāo)識(shí))
- 2024琴行教師聘請(qǐng)與教學(xué)成果轉(zhuǎn)化與推廣服務(wù)合同范本6篇
- 二零二五年度房產(chǎn)交易及院落使用權(quán)投資合同3篇
- 2024版宣傳合同十
- 嗜鉻細(xì)胞瘤的個(gè)案護(hù)理
- 2025年度肉羊養(yǎng)殖基地肉羊購銷合同范本36篇
- 實(shí)踐教育開啟學(xué)生自我發(fā)展的新篇章
- 2025年度肉類產(chǎn)品電商平臺(tái)市場調(diào)研與分析服務(wù)合同范本2篇
- 黑板的英語5篇
- 2025年度煤炭運(yùn)輸合同環(huán)保績效評(píng)估與改進(jìn)協(xié)議3篇
- 淮北市和淮南市2025屆高三第一次質(zhì)量檢測(cè)(一模)地理試卷(含答案)
- 安徽省淮北市部分學(xué)校2024-2025學(xué)年七年級(jí)上學(xué)期1月期末歷史試卷
- 化學(xué)-安徽省淮北市和淮南市2025屆高三第一質(zhì)量檢測(cè)(淮北淮南一模)試題和答案
- 2025內(nèi)蒙古電力(集團(tuán))限責(zé)任公司供電單位邊遠(yuǎn)地區(qū)崗位招聘713高頻重點(diǎn)提升(共500題)附帶答案詳解
- 2020-2021學(xué)年【江西省撫州市】八年級(jí)(上)期末生物試卷
- 2025年山西文旅集團(tuán)招聘筆試參考題庫含答案解析
- 2023學(xué)年杭州市十四中高二數(shù)學(xué)(上)期末考試卷附答案解析
- GB/T 8607-2024專用小麥粉
- 中國AI+Agent應(yīng)用研究報(bào)告
- 七年級(jí)上冊(cè)生物2024-2025學(xué)年新人教版期末綜合試卷(含答案)
- 2024年全國教育大會(huì)精神全文課件
評(píng)論
0/150
提交評(píng)論