用 CPI 火焰圖分析 Linux 性能問題

1. 什麼是 CPI ?

本小節講述爲何使用 CPI 分析程序性能的意義。若是已經很是瞭解 CPI 對分析程序性能的意義,能夠跳過本小節的閱讀。算法

1.1 程序怎麼樣才能跑得快 ?

理解什麼是 CPI,首先讓咱們思考一個問題:在一個給定的處理器上,如何才能讓程序跑得更快呢?性能

假設程序跑得快慢的標準是程序的執行時間,那麼程序執行的快慢,就能夠用以下公式來表示:優化

程序執行時間 = 程序總指令數 x 每 CPU 時鐘週期時間 x 每指令執行所需平均時鐘週期數

所以,要想程序跑得快,即減小程序執行時間,咱們就須要在如下三個方面下功夫:spa

  1. 減小程序總指令數scala

    要減小程序執行的總指令數,可能有如下手段:設計

    • 算法優化;好的算法設計,可能帶來更少的指令執行數
    • 更高效的編譯器或者解釋器;新的編譯器或者解釋器,可能對一樣的源代碼,生成更少的機器碼。
    • 用更底層的語言優化;這是爲什麼 Linux 內核代碼使用 C 語言,而且還喜歡內聯彙編。
    • 更新的處理器指令;新的處理器指令,對處理某類特殊目的運算更有幫助,而新版本編譯器最重要的工做就是,在新的處理器上,用最新的高效指令;例如,x86 SSE,AVX 指令。
  2. 減小每 CPU 時鐘週期時間

    這一點很容易理解,縮短 CPU 時鐘週期的時間,實際上就是要提升 CPU 的主頻。這正是 Intel 過去佔無不勝的法寶之一。今天,因爲主頻的提升已經到了製造工藝的極限,CPU 時鐘週期的時間很難再繼續下降了。code

  3. 減小每指令執行所需平均時鐘週期數ip

    如何減小每指令執行所需平均 CPU 時鐘週期數呢?讓咱們先從 CPU 設計角度看一下:編譯器

    • 標量處理器 (Scalar Processor) ;一個 CPU 時鐘週期只能執行一條指令;
    • 超標量處理器 (Superscalar Processor);一個 CPU 時鐘週期能夠執行多條指令;一般這個是靠在處理器裏實現多級流水線 (Pipeline) 來實現的。

    所以不難看出,若是使用支持超標量處理器的 CPU,利用 CPU 流水線提升指令並行度,那麼就能夠達到咱們的目的了。流水線的並行度越高,執行效率越高,那麼每指令執行所需平均時鐘週期數就會越低。編譯

相關文章
相關標籤/搜索