ccs代碼最佳化

來源:互聯網
上載者:User

進行代碼最佳化,先要找出程式的瓶頸,即佔用CPU時間較多的代碼,然後對其進行有針對性的最佳化。使用CCS提供的代碼剖析工具Profile可以統計顯示出程式中各個重要段和函數的已耗用時間,找出運算量較大的程式段,最佳化這些程式段,對於提高演算法的效能有巨大影響。
  ⑴ 聯合使用-pm和-03編譯選項,對代碼進行項目級的最佳化:CCS提供了強大功能的編譯選項,從-O0到-O3共四級最佳化。-O3編譯選項使能軟體流水和其他最佳化方法,-pm選項從程式碼角度,把整個項目的所有來源程式聯合起來,作為一個模組來處理。-pm和-03兩個選項聯合使用,能進行一系列的最佳化,並且代碼尺寸變小很多。 
⑵ 使用const、restrict 關鍵字修飾指標:const指示編譯器其修飾的指標所指向的內容不能修改;restrict指示編譯器其修飾的指標與其他指標指向的內容不會覆蓋,這些資訊使兩個指標不會訪問同一儲存空間地址,可以消除儲存空間之間的相關性,這樣可以並存執行多個資料的讀取和運算,使代碼運行達到昀大效率。
  ⑶ 對短字長資料使用寬長度的儲存空間訪問(資料打包處理):即當CPU執行一連串短型資料(如16bit資料)操作時,可將資料類型設定為32bit長度的int型,這樣可以一次性訪問2個短型資料,然後使用C6000指令,同時進行兩個資料的操作,減少了對記憶體的訪問,這比採用16bit長度short型節約一半的時間。
  ⑷ 迴圈展開,把C語言中的迴圈開啟,把多迴圈變為少迴圈,減少迴圈嵌套,使得可能並行的指令增加,從而改進軟體流水編排,改善代碼效能。
  ⑸ 減少C函數的調用,盡量使用系統提供的內嵌函式(intrinsics函數)代替C函數,C6000編譯器提供了許多intrinsics,是直接與C6000彙編指令映射的線上函數,可以快速最佳化C代碼,這樣減少許多不必要的操作,提高代碼運算速度。
  ⑹ 使用軟體流水技術,軟體流水是一種對迴圈中的指令進行調度最佳化的技術,利用軟體流水可產生非常緊湊的迴圈代碼。當編譯時間採用-O2或-O3層級的最佳化選項時,編譯器將對程式中的迴圈進行軟體流水。通過軟體流水的最佳化,可以大大提高迴圈代碼的效率,極大地實現指令的並行性。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.