第十講C的性能優化_第1頁
第十講C的性能優化_第2頁
第十講C的性能優化_第3頁
第十講C的性能優化_第4頁
第十講C的性能優化_第5頁
已閱讀5頁,還剩27頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、BIT/TI第十講 C的性能優化1第十講 C的性能優化BIT/TI第十講 C的性能優化2建議的程序開發流程C程序C程序優化用線性匯編改寫關鍵代碼段BIT/TI第十講 C的性能優化3學習內容一、C代碼的性能優化 變量聲明兩種變量訪問方式 C編譯選項 Intrinsics 字訪問二、混合語言編程編寫C可調用的匯編程序 建立C環境 建立匯編環境 編寫線性匯編函數三、實驗BIT/TI第十講 C的性能優化4一、C代碼的性能優化1. 變量聲明BIT/TI第十講 C的性能優化5對局部變量的訪問.cinit變量初值表.const常量.text代碼.bss全局變量和靜態變量.stack堆棧空間.sysmem用于

2、存儲器分配函數.farFar變量 在堆棧內分配存儲空間 用堆棧首地址作首基地址,用指針*+B15(disp)來訪問 堆棧分配在默認段.stackBIT/TI6全局變量/靜態變量兩種訪問方式1.默認的訪問方式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內分配地址一條指令訪問在.far內分配地址三條指令訪問BIT/TI第十講 C的性能優化7Near變量的生成和使用C語言匯編語言LDW .D2 *+B15(12), Reg相對偏移地址BIT/TI第十講 C的性能優化8為什么要使用Far變量? 程序中使用的全局變量和靜態變量超過了32K字節 需要把變量存放在.bss以外的數據段*+DP(offset)DP的偏移地址的偏移地址限制在限

4、制在15位位BIT/TI第十講 C的性能優化9Far變量的生成 使用關鍵字Far定義,在.far段內分配地址 用#pragma DATA_SECTION ( )定義新的數據段far short m;short far n;#pragmaDATA_SECTION (y, “myVariables”);inty32;關鍵字far新的數據段作用相當于偽指令作用相當于偽指令.usectBIT/TI第十講 C的性能優化10Near/Far變量例子編譯輸出聲明C變量名加下劃線BIT/TI第十講 C的性能優化11變量聲明總結 局部變量在堆棧段.stack分配地址,用一條指令訪問。 采用near形式聲明全局變

5、量,變量分配在數據段.bss,用一條指令訪問。 采用far形式聲明全局變量,變量分配在數據段.far或用戶自定義數據段,用三條指令訪問,應盡量避免采用。BIT/TI第十講 C的性能優化12一、C代碼的性能優化2. C編譯選項BIT/TI第十講 C的性能優化13C優化器選項優化選項作用優化級別-o0優化寄存器的使用-o1本地優化-o2或-o全局優化-o3文件級優化低高優化器選項有軟件流水功能BIT/TI第十講 C的性能優化14與優化有關的其它編譯選項 建議使用建議使用 -pm與-o3合用,進行程序級優化 -mt程序中沒有數據aliasing -x2函數內聯 不要使用不要使用 -ml大模式(使得.

6、bss段內的變量都按far方式訪問) -g符號調試 -s, -ss, -os C編譯器生成的匯編文件內,C語句作為注釋出現Aliasing兩個指針指向同一個變量,或一個指針修改后指向另外一個變量BIT/TI第十講 C的性能優化15一、C代碼的性能優化3. IntrinsicsIntrinsics:直接與C62xx匯編指令相對應的特殊內聯函數,沒有函數調用開支。BIT/TI第十講 C的性能優化16常用Intrinsics列表加法、減法、乘法加法、減法、乘法位域操作、位域操作、long轉換轉換為為int對應匯編指令對應匯編指令.tripBIT/TI第十講 C的性能優化17幾種編程方式的比較C代碼代

7、碼使用使用Intrinsics的的C代碼代碼嵌入匯編嵌入匯編匯編代碼匯編代碼y = a * b;y = _mpy (a, b);asm (“MPY A0, A1, A2”);MPY A0, A1, A2, ; a, b, y代碼效率低容易破壞C環境編程工作量大BIT/TI第十講 C的性能優化18Intrinsics的特點 函數參數使用C變量名(不是寄存器),與C環境兼容 不增加C的編程工作量 代碼效率與匯編相同BIT/TI第十講 C的性能優化19一、C代碼的性能優化4. 字訪問BIT/TI第十講 C的性能優化20字訪問優化方法1. 利用32位字訪問16位數據(三種方法)1) 聯合Union2)

8、 強制類型轉換3) 把數據直接定義為32位字2. 利用Intrinsics完成數值運算(_mpy, _mpyh, _add2, _sub2BIT/TI第十講 C的性能優化211) 字訪問聯合Union必須按照word數據定界BIT/TI第十講 C的性能優化222) 字訪問強制類型轉換16位訪問32位訪問BIT/TI第十講 C的性能優化233) 字訪問把數據直接定義為32位字BIT/TI第十講 C的性能優化24字訪問小結 用union方式需要對調用函數和被調用函數進行修改 用強制類型轉換,只需要修改被調用函數 直接定義為32字,影響程序可讀性BIT/TI第十講 C的性能優化25二、混合語言編程C

9、與線性匯編的混合編程BIT/TI第十講 C的性能優化26編寫可被C調用的線性匯編函數1. 建立C環境2. 建立匯編環境3. 編寫線性匯編函數 入口代碼 算法 出口代碼BIT/TI第十講 C的性能優化271. 建立C環境1) 在C程序前聲明線性匯編函數2) 調用匯編函數1)聲明2)調用BIT/TI第十講 C的性能優化282. 建立匯編環境1) 匯編函數的入口地址聲明為全局變量匯編函數的入口地址C函數名前加下劃線2) 定義函數入口地址1)聲明2)定義BIT/TI第十講 C的性能優化293. 編寫線性匯編函數. .defdef_DP_DP;聲明函數名,建立匯編環境;聲明函數名,建立匯編環境_ _DP

10、DP: :.cproc.cprocparam0, param1param0, param1;函數參數;函數參數.reserve.reserve reserve_regreserve_reg;需要保護的寄存器;需要保護的寄存器. .regreglocal_val0, local_val1, local_val0, local_val1, ;函數內的寄存器變量;函數內的寄存器變量MV MV param0,local_val0param0,local_val0;建立函數參數與;建立函數參數與MVMVparam1,local_val1 param1,local_val1 ;寄存器變量名的關系;寄存器變量名的關系. .;算法;算法. . .return .return return_valuereturn_value;函數返回,;函數返回,return_valuereturn_value為為;物理寄存器或寄存器變量名;物理寄存器或寄存器變量名. .endprocendproc入口代碼出口代碼BIT/TI第十講 C的性能優化30線性匯編的寄存器保護問題匯編優化器自動完成匯編優化器自動

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論