最佳化程式效能(CSAPP:5)

來源:互聯網
上載者:User

標籤:style   總結   組織   應該   經典   結合   大型   形式   瞭解   

【前言】雖然現在沒有接觸過大型項目,但是工作了會注重效能。學習一下,應該能更好更快的理解別人寫的經典優秀的代碼。結合CSAPP和自己的理解,總結一下。

一、程式最佳化綜述

1、高效程式的特點

  (1)適當的演算法和資料結構。方法和資料的組織形式無疑是最關鍵的,是最佳化的基礎;

  (2)代碼能夠被編譯器轉化成高效的可執行代碼。需要深入瞭解使用的編譯器的最佳化方法,和常見的最佳化策略;

  (3)運用現代並行編程技術。多核以及硬體支援提供更大的加速可能,例如GPU;

2、最佳化程式的一般步驟

  (1)消除不必要的工作,例如消除不必要的函數調用(加大棧區負擔),條件測試和記憶體引用;

  (2)利用處理器提供的指令級並行能力,同時執行多條指令;指令級並行介於線程級並發和單指令多資料並行之間,一個處理器可實現多指令執行,例如流水線技術;

  (3)最佳化關鍵路徑。就是反覆執行的資料和代碼;

二、最佳化編譯器的能力和局限性

  我們可以使用-O1、-O2、-O3來指定編譯器的最佳化層級,層級越高可能會增加程式的規模。注意一點,最佳化層級高一般比層級低的效能好,肯定比原始未最佳化的好!但是,編譯器在最佳化時會考慮安全問題,如果最佳化一定會在安全範圍內最佳化,有一個條件不滿足就會放棄某模組的最佳化。

例如:

1 {2       *y += *x;3       *y += *x; 4 }5 //上面的代碼會被最佳化為下面嗎?6 {7     *y += 2* *x;8 }

不會,雖然適用一般情況y=y+2x。但是,當x=y時:y=4x 不是3x。編譯器會考慮所有特殊情況,保證安全。還有一種情況,是記憶體別名使用的時候兩個變數值不同,但是指標地址有可能相同。也不會最佳化.

  函數調用也會妨礙最佳化,此時就是用內嵌函式最佳化了。避免頻繁出棧入棧。

 

最佳化程式效能(CSAPP:5)

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.