什麼是效能?時間的倒數
主要有兩個標準來衡量
(1)響應時間又叫執行時間,指的是我們執行乙個程式,到底需要花多少時間(跑的快)。
(2)吞吐率 ,指我們在一定的時間範圍內,到底能處理多少事情。這裡的「事情」,在計算機裡就是處理的資料或者執行的程式指令(搬到更多)。
注釋:一般把效能,定義成響應時間的倒數,也就是:效能 = 1/ 響應時間
計算機的計時單位:cpu 時鐘
使用時間衡量效能的兩個問題
(1)第乙個就是時間不「準」
linux 下有乙個叫 time 的命令執行一下 time 命令。
它會返回三個值,第乙個是 real time,也就是我們說的 wall clock time,也就是執行程式整個過程中流逝掉的時間(掐秒錶)。
第二個是 user time,也就是 cpu 在執行你的程式,在使用者態執行指令的時間。
第三個是 sys time,是 cpu 在執行你的程式,在作業系統核心裡執行指令的時間。
程式實際花費的 cpu 執行時間(cpu time),就是 user time 加上 sys time。
$ time seq 1000000 | wc -l
1000000
real 0m0.101s
user 0m0.031s
sys 0m0.016s
實際上程式用了 0.101s,但是 cpu time 只有 0.031+0.016 = 0.047s。
注釋:我們的程式實際在作業系統裡面是執行在「保護模式」下的,很多指令我們的應用程式並沒有許可權去操作執行,需要切換到核心態,由作業系統去執行,比如說操作硬體的時候。
real < cpu,表明程序為計算密集型(cpu bound),利用多核處理器的並行執行優勢;
real ≈ cpu,表明程序為計算密集型(cpu bound),未並行執行;
real > cpu,表明程序為i/o密集型(i/o bound),多核並行執行優勢並不明顯。
(2)即使我們已經拿到了 cpu 時間,我們也不一定可以直接「比較」出兩個程式的效能差異
<1>cpu 可能滿載執行也可能降頻執行,降頻執行的時候自然花的時間會多一些
<2>時間這個效能指標還會受到主機板、記憶體這些其他相關硬體的影響
注釋:程式的 cpu 執行時間 =cpu 時鐘週期數×時鐘週期時間
此處提公升效能的方法:乙個是減少時鐘週期時間即提高主頻,乙個是減少程式需要的時鐘週期數
程式的 cpu 執行時間 = 指令數×cpi×clock cycle time /*cpi每條指令的平均時鐘週期數*/
課後思考
每次有新手機發布的時候,總會有一些對於手機的跑分結果的議論。乃至於有「作弊」跑分或者「針對跑分優化」的說法。我們能針對「跑分」作弊麼?怎麼做到呢?
答:常用作弊手段提高主頻或過熱不降頻,使用針對這些預設程式專門優化的編譯器和彙編器,可以減少指令數;使用流水線、**等技術,可以減小cpi等
疑惑
主頻如果沒散熱和門延遲問題是否有極限?極限是多少?是否和電訊號的傳播速度和距離有關
通過CPU主頻來看效能
程式的cpu執行時間 計算機效能類似與幹體力勞動搬東西。衡量計算機效能的標準 常見提公升效能辦法 cpu 的效能提公升其實在 10 年前就處於 擠牙膏 的狀態,所以響應時間的提公升沒有那麼容易,一般把效能定義如下 效能 1 響應時間響應時間越短,效能的數值就越大。同樣乙個程式,在 intel 最新的...
設定CPU主頻
define strict include include include inline unsigned int64 getcyclecount void class ktimer void start void unsigned int64 stop void int winapi winmai...
CPU主頻,倍頻,外頻,前端匯流排
前端匯流排是處理器與主機板北橋晶元或記憶體控制集線器之間的資料通道,其頻率高低直接影響cpu訪問記憶體的速度。電腦時鐘是由主機板晶振提供時鐘,稱為系統匯流排頻率,cpu的實際執行頻率是通過內部倍頻技術提供,所以要比系統頻率 又稱外頻 高2的整數倍。如 外頻100,倍頻為4,則cpu主頻即為100 4...