程式的cpu執行時間
計算機效能類似與幹體力勞動搬東西。
衡量計算機效能的標準
常見提公升效能辦法
cpu 的效能提公升其實在 10 年前就處於「擠牙膏」的狀態,所以響應時間的提公升沒有那麼容易,一般把效能定義如下:
效能 = 1 / 響應時間
響應時間越短,效能的數值就越大。
同樣乙個程式,在 intel 最新的 cpu coffee lake 上,只需要 30s 就能執行完成,在 5 年前 cpu sandy bridge 上,需要 1min 才能完成。
所以coffee lake 的效能是 1/30,sandy bridge 的效能是 1/60,兩個的效能比為 2,coffee lake 的效能是 sandy bridge 的 2 倍。
用時間來衡量存在兩個問題:時間不准和超頻執行
時間不准
一般統計下,我們記錄的是程式執行結束的時間減去程式執行開始的時間,在這個時間裡,計算機可能不停的在各個程式之間切換,去執行別的程式去了,所以要準確統計某個程式的執行時間,進而去比較效能差異,需要去除這部分時間。
time 命令可以幫我們統計出來,同樣的 wall clock time 下,程式實際在 cpu 上到底花了多少時間。
$ time
seq 1000000 |
wc -l
1000000
real 0m0.101s
user 0m0.031s
sys 0m0.016s
而程式實際花費的 cpu 執行時間(cpu time),就是 user time 加上 sys time。例子中實際上程式用了 0.101s,cpu time 有 0.031+0.016 = 0.047s,執行程式的時間裡只有不到一半是實際花在這個程式上的。
超頻執行
拿到了 cpu 時間,不一定可以直接「比較」出兩個程式的效能差異。
在同一臺計算機上,cpu 可能滿載執行也可能降頻執行,降頻執行的時候自然花的時間會多一些。
對「時間」這個我們可以感知的指標進行拆解,程式的 cpu 執行時間變成 cpu 時鐘週期數(cpu cycles)和 時鐘週期時間(clock cycle)的乘積。
程式的cpu執行時間 = cpu 時鐘週期數 × 時鐘週期時間
cpu 內部有乙個叫晶體振盪器(oscillator crystal,晶振)的東西,我們把晶振當成 cpu 內部的電子錶來使用,晶振帶來的每一次「滴答」,就是時鐘週期時間。在2.8ghz 的 cpu 上,這個時鐘週期時間,就是 1/2.8g,可以先粗淺地認為cpu 在 1 秒時間內可以執行的簡單指令的數量是 2.8g 條。
cpu是按照這個「時鐘」提示的時間來進行自己的操作。主頻越高,意味著這個錶走得越快,我們的 cpu 也就「被逼」著走得越快。
提公升效能方案如下:
對於 cpu 時鐘週期數,我們可以再做乙個分解,把它變成「指令數×每條指令的平均時鐘週期數(cycles per instruction,簡稱 cpi)」。
不同的指令需要的 cycles 是不同的,加法和乘法都對應著一條 cpu 指令,但是乘法需要的 cycles 就比加法要多,自然也就慢。
在這樣拆分了之後,我們的程式的 cpu 執行時間就可以變成這樣三個部分的乘積。
程式的cpu執行時間 = 指令數 × cpi × clock cycle time
通過cpu主頻,了解效能
什麼是效能?時間的倒數 主要有兩個標準來衡量 1 響應時間又叫執行時間,指的是我們執行乙個程式,到底需要花多少時間 跑的快 2 吞吐率 指我們在一定的時間範圍內,到底能處理多少事情。這裡的 事情 在計算機裡就是處理的資料或者執行的程式指令 搬到更多 注釋 一般把效能,定義成響應時間的倒數,也就是 效...
設定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...