# 誰是最棒的狗勾 ###### tags: `IT鐵人` ## 效能的定義 生活中很常對各種東西做出比較,哪本書比較好看、哪個星座比較好相處、安卓跟蘋果哪個更好用,種種的比較很難有一定的答案,我們要針對某個特定的項目作比較才行,比如說我們拿戰鬥機跟客機比較: | 戰鬥機 | 客機 | |---|---| | ![](https://i.imgur.com/Ua77tpj.jpg) | ![](https://i.imgur.com/DuE8vkm.png) | 單純直接說哪個比較好都不公平,戰鬥機絕對能得到速度上的優勢,而客機絕對能在載運人數上勝過對方。 剛剛提到的速度跟載運人數,類似於電腦的**Response time (Execution time)** 和**Throughput**,前者代表工作開始到完成所花的時間,後者代表單位時間所完成的工作量,在不同情況我們會考慮用不同的標準檢視,比如說在個人電腦中我們比較在乎Response time,多人共用的伺服器我們比較在乎Throughput。 |Response time(Execution time)|Throughput| |--|--| |工作從開始到完成所花的**時間**|單位時間內所完成的**工作量**| |個人電腦|多人共用伺服器| ### Performance 要討論電腦的優秀程度,我們定義Performance = $\frac{1}{Execution Time}$ 所以如果有兩部電腦X與Y: Performance~X~>Performance~Y~ -> $\frac{1}{Execution Time~X~}$ > $\frac{1}{Execution Time~Y~}$ -> Execution Time~Y~ > Execution Time~X~ 比較兩台不同電腦的效能,X的速度是Y的n倍則表示成: $\frac{Performance~X~}{Performance~Y~}$ = n 此時Y的執行時間會是X的n倍。 ## CPU Time 前面提到的Execution Time,包含了很多動作,比如說硬碟存時間、記憶體存取時間、輸入/輸出時間、作業系統時間等等。 CPU Execution Time,簡稱為CPU Time,是指CPU花在處理某一項工作的時間,不包括那些存取以及輸入輸出的時間。 而CPU Time又有User CPU Time跟System CPU Time兩者,前者是執行程式的部分,後者是為了服務程式執行所花在作業系統上的時間。 大概是下圖這樣: ![](https://i.imgur.com/dCMY84c.png) 一個程式的CPU Time = Clock cycles x Clock cycle time,也就是Clock跑了幾個循環,乘以一個循環會跑多少時間,就是整個程式到底使用了多久的CPU,底下慢慢跟各位介紹CPI(Clock per Instruction)。 ## CPI CPI是Clock per Instruction的縮寫。 一個程式一定有很多行的程式碼,轉換成Assembly code之後通常會有更多行。 > Assembly code複習 > add $t0 $t1 $t2 (將t1加上t2的結果放在t0 register) CPI的算法為 $\frac{Clock Cycles}{Instruction count}$。 也就是說Clock Cycles = CPI x Instruction count。 套回去CPU Time = Clock cycles x Clock cycle time = CPI x Instruction count x Clock cycle time。 不過因為不是每個Instruction的執行時間,所以準確來說Clock cycle應該要寫成 $\sum{CPIi * Ci}$ (C~i~代表類別i所使用之指令個數) ## 例題示範 講講都是紙上談兵,我們現在實際在紙上操作一次。 > 假設有兩個使用相同ISA的電腦,執行同一個程式, > Machine A的clock cycle time為250ps,CPI為2.0, > Machine B的clock cycle time為500ps,CPI為1.2。 > 請問哪一部電腦比較快?快多少? 假設總共有I個cycle。 首先算出A的CPU cycles = I x 2。 B的CPU cycles = I x 1.2。 CPU time A = 2I x 250ps = 500I ps CPU time B = 1.2I x 500ps = 600I ps $\frac{Performance A}{Performance B}$ = $\frac{Execution Time B}{Execution Time A}$ = $\frac{600I}{500I}$ = 1.2 所以A的速度是B的1.2倍。 ## 牛刀小試 > Consider the following performance measurements for a program: > > | Measurement | Computer A | Computer B | > | ---- | ---- | ---- | > | Instruction count | 10 billion |8billion | > | Clock cycle time | 250ps | 250ps | > | CPI | 1.0 | 1.1 | Which computer is faster? |上一篇|下一篇| |--|--| | [CLA以及bit乘法](https://hackmd.io/@dZfCcN4hT8aUuDPv3B8CWQ/Sk4AiBGyt) | [Build a CPU](https://hackmd.io/@dZfCcN4hT8aUuDPv3B8CWQ/SJjc9CPyF) | ## 誰比較快? ![](https://i.imgur.com/WxCkn8H.png =50%x50%)