---
# System prepended metadata

title: 第 2 講 Performance/Power/Cost
tags: [計算機結構]

---

# 計算機架構 Computer Architecture

有五個面向會影響計算機架構

- Technology：也就是製程的部分
- Programming Languages：編譯器的部分
- Operating Systems：作業系統的部分
- Applications：人類的應用，像是因應最近 AI 而發展起來的 NPU
- History：為了相容性，所以歷史上出現的架構會延續至今

# 設計跟評估

評估 Evaluation/Analysis 是除了設計之外，相當重要的另一部分。
評估之後你才知道你強調的面向在哪，才知道要在哪裡做取捨；所謂的不同面向就是 Matrices，或者說指標。
下面介紹三種指標：

- Performance
- Power
- Cost

# Performance

- CPU 中最常用來作為效能的指標是 ==Response time== 跟 ==Throughput==。目前我們先專注於 ==Response Time==。
- ==Response Time== 會影響你的 Throughput；Response time 又叫做 ==Execution Time==。
- ==Performance 效率== 定義為 ==Execution Time 時間== 的倒數：

$$
\text{Performance}=\frac{1}{\text{Execution Time}}
$$

直觀來說就是效率有多好。

當我們說「A 比 B 快 $n$ 倍」的時候，就是指 A 的效率是 B 的幾倍，所以定義如下：

$$
\frac{\text{Performance}_{A}}{\text{Performance}_{B}}=\frac{\text{Execution Time}_{B}}{\text{Execution Time}_{A}}=n
$$

當然也可以用於新舊比較。

## Elapsed Time

包含了各種時間(Processing, I/O, OS overhead, idle time ... .etc)的 Execution Time。

## CPU Time

單純考量 CPU 的 Processing 時間；可以再細分為 user 跟 system 的 CPU time。

本課程主要討論 ==CPU Time==。

## CPU Time

==CPU Time== 的定義是多少 Cycles 乘上一個 Cycle 要多久(或是除以速率)。白話就是總共要跑多久。

$$
\displaylines{
\text{CPU Time}=\text{CPU Clock Cycles}\times\text{Clock Cycle Time
}=\frac{\text{CPU Clock Cycles}}{\text{Clock Rate}}
}
$$

所以要嘛降低 Cycle 數，要嘛提高頻率；但是實務上常常都是有一好沒兩好，需要進行取捨。

## Instruction Count and CPI

那我要怎麼知道有多少 Cycles？，就是看執行的程式的 ==Instruction Count== 跟 ==Cycles per Instructions (CPI)==

$$
\displaylines{
\text{CPU Clock Cycles}=\text{Instruction Count}\times\text{Cycles per Instruction}\\
\text{CPU Time}=\text{Instruction Count}\times\text{Cycles per Instruction}\times\text{Clock Cycle Time}
}
$$

下面這張表格表示 CPU Time 的三要素：==Instruction Count==, ==CPI==, ==Clock Rate== 底層上分別會受誰影響：

|           | Instruction Count | CPI | Clock Rate |
|:---------:|:-----------------:|:---:|:----------:|
| Algorithm |         X         |  X  |            |
| Language  |         X         |  X  |            |
| Compiler  |         X         |  X  |            |
|    ISA    |         X         |  X  |      X     |

> X 代表會受影響
>ISA (instruction set architecture) 是跟硬體有關的部分

**所以比較兩個 CPU 的時候，CPU Time 三要素一個都不能少，這樣的比較才是全面的。**

## Weighted average CPI

理論上每條指令所需的 Cycle 數都不同，但為了方便比較，我們是採用平均的方式計算出 CPI：

$$
\frac{\text{Total Cycles Count}}{\text{Total Instruction Count}}
$$

---

# Power

Power 功率，直觀來說就是消耗能量的效率，所以越低越好：)

$$
\text{Power}\approx\text{Capacitive load}\times\text{Voltage}^{2}\times\text{Frequency}
$$

在維持 Power (甚至降低)的情況下，隨著科技的進步我們可以把福特數壓到很低，由於其平方項的關係，讓我們可以把頻率拉得很高。
但是福特數最終也壓到瓶頸了，再拉頻率會飆高功耗，所以才會出現轉向多核的時代。

:::warning
跟上面計算時間誰比誰快幾倍一樣，A 的功率是 B 的幾倍就是 A 的 Power 除以 B 的 Power。
>... 好吧有點像在講廢話
:::

:::info
上面的公式由來是計算 CMOS 電路對電壓進行的充放電過程中消耗的能量，理論上還會乘上一個 $\alpha$ 項代表動態時間中大概有多少電容在充放電。
- $C_L$：負載電容 (Capacitive Load)，代表所有需要充電和放電的電容總和，包括閘極電容、接線電容等。
- $V$：電壓 (Voltage)，通常是電源電壓 $V_{DD}$。
- $f$：頻率 (Frequency)，通常是時脈頻率 $f_{clock}$。
- $\alpha$：開關活動因子 (Activity Factor)。
- by Google Gemini 3 ：)
:::

## 多核省電

為甚麼多核可以減少功耗？準確來說是多核讓工作量平均分配，也讓頻率可以平均分配掉。
上面的公式中，$V$ 通常來說正比於頻率，也就是說 Power 公式可以簡化為
$$\text{Power}\propto\text{Frequency}^{3}$$

例如從單核心變為雙核心，$f$ 可以降一半：

- $C$ 變成 2 倍，畢竟多一顆核心，電容數理論上翻倍：)
- $f$ 只剩 0.125 倍

整體來說就是 0.25 倍。

:::warning
$V$ 跟 $f$ 之間是存在相互關係的，想要拉高頻率，通常來說需要更高的電壓，反之降頻率可以降低電壓
:::

## 平行運算

邁向多核之前，是稱為平行指令 Instruction Level Parallelism 的時代。平行化是做在硬體的指令架構上。寫高階語言的軟體工程師還不用在意：)。

但是邁向多核後，就變成軟體工程師要自己學會寫平行運算的程式了；這時代又叫做 Thread & Processor Level Parallelism。

# Cost

在很多地方都有成本，這裡以製造晶片的時候產生的成本舉例。

製造晶片時，會有壞掉的晶片，所以會有以下公式計算成本：

$$
\displaylines{
\text{Cost per die}=\frac{\text{Cost per Wafer}}{\text{Dies per Wafer}\times\text{Yield}}\\
\text{Dies per Wafer}\approx\frac{\text{Wafer area}}{\text{Dies area}}\\
\text{Yield}=\frac{1}{(1+\frac{\text{Defect per area}\times\text{Dies area}}{2})^{2}}
}
$$

上面公式的白話叫做：$$\text{每「塊」多少錢} = \frac{每片多少錢}{( \text{每片有多少塊} × 良率 )}$$
可以看到，如果 die 越小片，就可以提高良率。

---

# Benchmark

上面的 Performance、Power、Cost 三大指標是 Design 時需要考慮的面向。
接著來看實際做 Analysis 時需要看得東西，Benchmark。

桌機、伺服器、嵌入式，到 GPU 等等，有各自的 Benchmark。

## SPEC CPU Benchmark

這是一個給桌機使用的 Benchmark；時間是參考 Elapsed time，但是其所選用的 programs 的 I/O 等等其他時間過於微小可以忽略不計，所以一個專注於 CPU performance 的 Benchmark。

並且有分為 CINT 跟 CFP，也就是分成整數運算跟浮點數運算。

### SPECRatio

對於一個 program，會去計算 SPECRatio，某種意義上來說可以看作==絕對效率 Performance==。
SPECRatio 是以某一台基準電腦的 benchmark 結果作為基準，看看你的電腦相對於他，==Performance 效率==是幾倍：

$$
\text{performance}=\frac{\text{time on reference computer}}{\text{time on computer being rated}}
$$

這跟上面提到的 Performance 計算一模一樣：你的效率除以他的效率=他的時間除以你的時間。

:::warning
有了 SPECRatio 的好處是，兩台電腦的 SPECRatio 相除等同兩台電腦的效率相除，所以可以直接用 SPECRatio 替代 Performance 來計算誰的效率是誰的幾倍。
:::

### GeometricMean

最後把整個 Benchmark 中全部的 Program 所得到的 SPECRatio 進行幾何平均：

$$
\text{GeometricMean}=\sqrt[n]{\prod_{i=1}^{n}\text{SPECRatio}_{i}}
$$

## SPEC Power Benchmark

這是給 Power 的 Benchmark；這裡以 SPECJBB2005 (Java Business Application) 舉例。

$$
\frac{\sum_{i=0}^{10}\text{ssj_ops}_{i}}{\sum_{i=0}^{10}\text{Power}_{i}}
$$

$\text{ssj_ops}$ 是在不同 workload levels 下的 operation 數量。
SPECJBB2005 的特色是會進行從 0% 一直到 100% 共 11 種 workload levels 的測試，每種測試會得到各自的 $\text{ssj_ops}$ 跟 $\text{Power}$。

最終將總共的 $\text{ssj_ops}$ 數量除以全部的 $\text{Power}$ 數，得到平均來說每 $W$ 可以做多少 operation。

---

# Amdahl’s Law
>[Amdal 阿姆達爾，是位美國人：)](https://zh.wikipedia.org/wiki/%E5%90%89%E6%81%A9%C2%B7%E9%98%BF%E5%A7%86%E9%81%94%E7%88%BE)


核心概念就是：

$$
\text{T}_{\text{improved}}=\frac{\text{T}_{\text{affected}}}{\text{improvement factor}}+\text{T}_{\text{unaffected}}
$$

如果只有優化某個部分的時間，那麼整體時間的縮短會有個上限。

例如我們依照上面套入公式：$20=\frac{80}{n}+20$，總體是 $100=80+20$ 秒，如果我想讓他變快 5 倍，也就是時間變 $20$ 秒，那麼 improvement factor $n$ 要是多少，答案是不可能或是無限大：)

:::warning
所以結論是讓 common case 的時間縮短才是最好的
:::

# Low Power at Idle

上面 SPEC Power Benchmark 如果去看實際數據，會發現目前的問題是 Power 跟 workload level 沒有成正比，閒置或是 loading 不大的時候沒有低 Power，而是有著一定程度的 Power，造成能源的浪費。

所以現在的目標希望就是能夠低負荷時低功耗。

# MIPS as a Performance Metric

MIPS 叫做 Millions of Instructions Per Second：
>此 MIPS 非彼 MIPS


$$
\text{MIPS}=\frac{\text{Instruction count}}{\text{Execution time(second)}}\\
=\frac{\text{IC}}{\text{IC}\times\text{CPI}\times\text{Clock Cycle Time}}\\
=\frac{\text{Clock Rate}}{\text{CPI}}
$$

可以看到 MIPS 他只考慮了 CPI 跟 Clock Rate 2 個面相。對應[上方的表格](https://hackmd.io/oi8xxVaNQQehnZbQHRxYKQ#Instruction-Count-and-CPI)，他少了 $IC$ 這個要素。

所以如果用 MIPS 比較兩顆 CPU，會是不公平的，有可能兩顆 CPU 比較時的 IC 會因為 ISA、Compiler、Algorithm 或 Language 而有所不同。

# architectural innovation

在 Instruction Level Parallelism 的時代，或者說尚未有 Power Limit 的時候，可以達到每年 58% 的提升，其中如果只單看技術的進步 Technology advance，會發現只有 35% 的進步，其餘是靠架構的進步增強的。

架構也是重要的一環。

---

## 回顧

- Performance 公式 + CPU 時間公式
- Power 公式 & Cost 公式？
- SPECRatio & GeometricMean
- Amdahl’s Law
- MIPS not good