




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
1、BIT/TI第十講 C的性能優(yōu)化1第十講 C的性能優(yōu)化BIT/TI第十講 C的性能優(yōu)化2建議的程序開發(fā)流程C程序C程序優(yōu)化用線性匯編改寫關(guān)鍵代碼段BIT/TI第十講 C的性能優(yōu)化3學(xué)習(xí)內(nèi)容一、C代碼的性能優(yōu)化 變量聲明兩種變量訪問方式 C編譯選項 Intrinsics 字訪問二、混合語言編程編寫C可調(diào)用的匯編程序 建立C環(huán)境 建立匯編環(huán)境 編寫線性匯編函數(shù)三、實驗BIT/TI第十講 C的性能優(yōu)化4一、C代碼的性能優(yōu)化1. 變量聲明BIT/TI第十講 C的性能優(yōu)化5對局部變量的訪問.cinit變量初值表.const常量.text代碼.bss全局變量和靜態(tài)變量.stack堆棧空間.sysmem用于
2、存儲器分配函數(shù).farFar變量 在堆棧內(nèi)分配存儲空間 用堆棧首地址作首基地址,用指針*+B15(disp)來訪問 堆棧分配在默認(rèn)段.stackBIT/TI6全局變量/靜態(tài)變量兩種訪問方式1.默認(rèn)的訪問方式Near變量intint n; n; main()main() . . n +=. n +=. 編譯后的匯編輸出和訪問方式. .bssbss _n, 4, 4 _n, 4, 4ldw.d1ldw.d1* *+ +DP(_n), A0DP(_n), A02.Far變量far intfar int n; n; main()main() . . n += . n += . 編譯后的匯編輸出和訪問方
3、式_n_n.usect.usect .far.far,2,2,2,2mvkmvk_n, A1_n, A1mvkhmvkh_n, A1_n, A1ldw.d1 ldw.d1 * *+ +A1, A0A1, A0在.bss內(nèi)分配地址一條指令訪問在.far內(nèi)分配地址三條指令訪問BIT/TI第十講 C的性能優(yōu)化7Near變量的生成和使用C語言匯編語言LDW .D2 *+B15(12), Reg相對偏移地址BIT/TI第十講 C的性能優(yōu)化8為什么要使用Far變量? 程序中使用的全局變量和靜態(tài)變量超過了32K字節(jié) 需要把變量存放在.bss以外的數(shù)據(jù)段*+DP(offset)DP的偏移地址的偏移地址限制在限
4、制在15位位BIT/TI第十講 C的性能優(yōu)化9Far變量的生成 使用關(guān)鍵字Far定義,在.far段內(nèi)分配地址 用#pragma DATA_SECTION ( )定義新的數(shù)據(jù)段far short m;short far n;#pragmaDATA_SECTION (y, “myVariables”);inty32;關(guān)鍵字far新的數(shù)據(jù)段作用相當(dāng)于偽指令作用相當(dāng)于偽指令.usectBIT/TI第十講 C的性能優(yōu)化10Near/Far變量例子編譯輸出聲明C變量名加下劃線BIT/TI第十講 C的性能優(yōu)化11變量聲明總結(jié) 局部變量在堆棧段.stack分配地址,用一條指令訪問。 采用near形式聲明全局變
5、量,變量分配在數(shù)據(jù)段.bss,用一條指令訪問。 采用far形式聲明全局變量,變量分配在數(shù)據(jù)段.far或用戶自定義數(shù)據(jù)段,用三條指令訪問,應(yīng)盡量避免采用。BIT/TI第十講 C的性能優(yōu)化12一、C代碼的性能優(yōu)化2. C編譯選項BIT/TI第十講 C的性能優(yōu)化13C優(yōu)化器選項優(yōu)化選項作用優(yōu)化級別-o0優(yōu)化寄存器的使用-o1本地優(yōu)化-o2或-o全局優(yōu)化-o3文件級優(yōu)化低高優(yōu)化器選項有軟件流水功能BIT/TI第十講 C的性能優(yōu)化14與優(yōu)化有關(guān)的其它編譯選項 建議使用建議使用 -pm與-o3合用,進行程序級優(yōu)化 -mt程序中沒有數(shù)據(jù)aliasing -x2函數(shù)內(nèi)聯(lián) 不要使用不要使用 -ml大模式(使得.
6、bss段內(nèi)的變量都按far方式訪問) -g符號調(diào)試 -s, -ss, -os C編譯器生成的匯編文件內(nèi),C語句作為注釋出現(xiàn)Aliasing兩個指針指向同一個變量,或一個指針修改后指向另外一個變量BIT/TI第十講 C的性能優(yōu)化15一、C代碼的性能優(yōu)化3. IntrinsicsIntrinsics:直接與C62xx匯編指令相對應(yīng)的特殊內(nèi)聯(lián)函數(shù),沒有函數(shù)調(diào)用開支。BIT/TI第十講 C的性能優(yōu)化16常用Intrinsics列表加法、減法、乘法加法、減法、乘法位域操作、位域操作、long轉(zhuǎn)換轉(zhuǎn)換為為int對應(yīng)匯編指令對應(yīng)匯編指令.tripBIT/TI第十講 C的性能優(yōu)化17幾種編程方式的比較C代碼代
7、碼使用使用Intrinsics的的C代碼代碼嵌入?yún)R編嵌入?yún)R編匯編代碼匯編代碼y = a * b;y = _mpy (a, b);asm (“MPY A0, A1, A2”);MPY A0, A1, A2, ; a, b, y代碼效率低容易破壞C環(huán)境編程工作量大BIT/TI第十講 C的性能優(yōu)化18Intrinsics的特點 函數(shù)參數(shù)使用C變量名(不是寄存器),與C環(huán)境兼容 不增加C的編程工作量 代碼效率與匯編相同BIT/TI第十講 C的性能優(yōu)化19一、C代碼的性能優(yōu)化4. 字訪問BIT/TI第十講 C的性能優(yōu)化20字訪問優(yōu)化方法1. 利用32位字訪問16位數(shù)據(jù)(三種方法)1) 聯(lián)合Union2)
8、 強制類型轉(zhuǎn)換3) 把數(shù)據(jù)直接定義為32位字2. 利用Intrinsics完成數(shù)值運算(_mpy, _mpyh, _add2, _sub2BIT/TI第十講 C的性能優(yōu)化211) 字訪問聯(lián)合Union必須按照word數(shù)據(jù)定界BIT/TI第十講 C的性能優(yōu)化222) 字訪問強制類型轉(zhuǎn)換16位訪問32位訪問BIT/TI第十講 C的性能優(yōu)化233) 字訪問把數(shù)據(jù)直接定義為32位字BIT/TI第十講 C的性能優(yōu)化24字訪問小結(jié) 用union方式需要對調(diào)用函數(shù)和被調(diào)用函數(shù)進行修改 用強制類型轉(zhuǎn)換,只需要修改被調(diào)用函數(shù) 直接定義為32字,影響程序可讀性BIT/TI第十講 C的性能優(yōu)化25二、混合語言編程C
9、與線性匯編的混合編程BIT/TI第十講 C的性能優(yōu)化26編寫可被C調(diào)用的線性匯編函數(shù)1. 建立C環(huán)境2. 建立匯編環(huán)境3. 編寫線性匯編函數(shù) 入口代碼 算法 出口代碼BIT/TI第十講 C的性能優(yōu)化271. 建立C環(huán)境1) 在C程序前聲明線性匯編函數(shù)2) 調(diào)用匯編函數(shù)1)聲明2)調(diào)用BIT/TI第十講 C的性能優(yōu)化282. 建立匯編環(huán)境1) 匯編函數(shù)的入口地址聲明為全局變量匯編函數(shù)的入口地址C函數(shù)名前加下劃線2) 定義函數(shù)入口地址1)聲明2)定義BIT/TI第十講 C的性能優(yōu)化293. 編寫線性匯編函數(shù). .defdef_DP_DP;聲明函數(shù)名,建立匯編環(huán)境;聲明函數(shù)名,建立匯編環(huán)境_ _DP
10、DP: :.cproc.cprocparam0, param1param0, param1;函數(shù)參數(shù);函數(shù)參數(shù).reserve.reserve reserve_regreserve_reg;需要保護的寄存器;需要保護的寄存器. .regreglocal_val0, local_val1, local_val0, local_val1, ;函數(shù)內(nèi)的寄存器變量;函數(shù)內(nèi)的寄存器變量MV MV param0,local_val0param0,local_val0;建立函數(shù)參數(shù)與;建立函數(shù)參數(shù)與MVMVparam1,local_val1 param1,local_val1 ;寄存器變量名的關(guān)系;寄存器變量名的關(guān)系. .;算法;算法. . .return .return return_valuereturn_value;函數(shù)返回,;函數(shù)返回,return_valuereturn_value為為;物理寄存器或寄存器變量名;物理寄存器或寄存器變量名. .endprocendproc入口代碼出口代碼BIT/TI第十講 C的性能優(yōu)化30線性匯編的寄存器保護問題匯編優(yōu)化器自動完成匯編優(yōu)化器自動
溫馨提示
- 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. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 年度財務(wù)報表及審計結(jié)果
- 河南省駐馬店市部分學(xué)校2024-2025學(xué)年高三下學(xué)期3月月考地理試題(含答案)
- 基于區(qū)塊鏈技術(shù)的農(nóng)業(yè)溯源體系構(gòu)建方案
- 服裝設(shè)計與制造業(yè)務(wù)外包合作協(xié)議
- 個性化培訓(xùn)計劃實施效果分析表
- 網(wǎng)絡(luò)優(yōu)化服務(wù)升級合作協(xié)議
- 汽車采購銷售合同書及保修條款
- 智能醫(yī)療項目合作協(xié)議
- 企業(yè)危機管理機制構(gòu)建與運行
- 交通行業(yè)交通事故處理保障預(yù)案
- GA/T 1788.4-2021公安視頻圖像信息系統(tǒng)安全技術(shù)要求第4部分:安全管理平臺
- FEKO教程-教學(xué)講解課件
- 鋼板型材機械性能試驗報告
- 2023年蘇州市吳中產(chǎn)業(yè)投資集團有限公司招聘筆試模擬試題及答案解析
- 船舶制造基地可行性研究報告
- 腫瘤生物靶向治療護理課件
- 紅樓夢人物關(guān)系圖譜可A4打印版
- 石化公司建設(shè)項目竣工文件整理歸檔規(guī)范
- A4線纜標(biāo)簽數(shù)據(jù)模板
- 加油站電器火災(zāi)應(yīng)急預(yù)案演練記錄
- 沖壓件,汽車表面零件缺陷及原因分析
評論
0/150
提交評論