# Introduction
## 1. 關於 Processor
### 1.1 Processor 是什麼
負責執行計算機程序中的指令,包括算術運算、邏輯運算、控制指令流和數據傳輸等基本操作
- Arithmetic Logic Unit (ALU): Executes arithmetic and logical operations.
- Control Unit (CU): Decodes instructions and controls all the components.
- Registers: High-speed storage units, used for temporarily storing data and instructions.
- Cache: storage component between register and main memory.
- Bus: Data transmission channel used to connect the processor with other hardware components.
### 1.2 影響 Process Performance 的因素

因素: Program, Compiler, Instruction Set, Organization, Technology
指標: Instruction Count, CPI(Cycle per instruction), Clock Rate,這些指標結合起來可以用來計算總體的性能表現
每一個因素都可能影響到以上三個關於性能的指標
! 有些版本顯示 ISA 也會影響到 clock rate
> 分析
1. **Program(程序)**:程序的設計和演算法效率可以直接影響到 Instruction Count 和 CPI
ex: 更高效的演算法可能需要更少的指令來完成相同的任務
2. **Compiler(編譯器)**:編譯器的優化水平可以影響到生成的code的效率,從而影響指令數和 CPI
ex: 高度優化的編譯器可以減少執行程序所需的指令數和降低 CPI
3. **Instruction Set(指令集)**:不同的指令集設計(例如RISC-V、x86、ARM等)會對指令數、CPI 和 Clock Rate 有不同的影響。一些指令集可能設計為較少指令數但每指令的週期數可能較多
RISC vs. CISC
4. **Organization(組織結構)**:指的可能是處理器的微架構,包括如何組織 pipeline, cache等,這些因素會影響 CPI 和Clock Rate
5. **Technology (Moore's law)(技術,摩爾定律)**
摩爾定律: 半導體元件的密度每兩年增加一倍
更高的元件密度意味著transistor之間的距離變短,減少了訊號傳遞的延遲,就可以提高數據傳輸的速度,從而提升整體的 Clock Rate
### 1.3 processor performance 的演進

### 1.4 ISA (Instruction set Architecture)
<img src="https://hackmd.io/_uploads/Bkh5EOR80.png" width="60%">
- 目標: 夠軟體用,且硬體寫得出來
- CISC v.s. RISC
++CISC (complex instruction set computer)++
早期memory貴,而CISC一條指令做很多事,instruction memory較小
缺點: 硬體難做
++RISC (reduced instruction set computer)++
需要compiler將complex instruction compile成simple instruction
(C、java… → assembly language)
## 2. Uni-processor to Multi-processor
### 2.1 Parallelism
目的: 提高speed
1. **Instruction-level parallelism**
在一個 processor 中同時執行多條指令
2. **Data-level parallelism**
- 單指令多數據 (SIMD) : 單個指令在多個數據元素上同時操作
- Vector Processors
- GPU: 擁有大量的並行處理單元,專為Data-level parallelism 設計
3. **Thread-level parallelism**
多處理器系統(Multi-Processor Systems)和多核處理器(Multi-Core Processors)
通過多個處理單元同時執行不同任務來提高性能
4. **Request-level parallelism (不討論)**
同時處理多個獨立的請求,這些請求之間沒有相互依賴關係。RLP 主要應用於伺服器、資料庫管理系統和高性能計算等場景,以提高系統的吞吐量和資源利用率。
### 2.2 Flynn’s Taxonomy
高效能計算機的分類方式,分類計算機系統的parallelism
這種分類基於兩個基本維度:指令流(instruction streams)和數據流(data streams)
<img src="https://hackmd.io/_uploads/B10QBu0LA.png" width="70%">
1. **單指令流單數據流(SISD)**
- Single Instruction stream, Single Data stream
- 每個時間單位只處理一個指令和一個數據流。在SISD系統中,每個操作是順序執行的,沒有並行處理。(早期)
2. **單指令流多數據流(SIMD)**
- Single Instruction stream, Multiple Data streams
- 單一指令操作多個數據流。
- 常用在GPU,非常適合於data parallelism 的任務
3. **多指令流單數據流(MISD)**
- Multiple Instruction streams, Single Data stream
- 少見
4. **多指令流多數據流(MIMD)**
- Multiple Instruction streams, Multiple Data streams
- 允許多個獨立處理的指令流同時操作多個數據流
- 多核和多處理器系統(如伺服器、高性能計算機和現代個人電腦)中最常見的parallel方式。
- Thread parallelism
## 3. 關於IC
### 3.1 Cost of an IC
<img src="https://hackmd.io/_uploads/rJ_4rd0UA.png" width="80%">
### 3.2 評估 module/system 的 dependability (可靠性)
* Mean Time to Failure(MTTF): run 多久碰到 failure
* Mean Time to Repair(MTTR): 平均修復時間
* Mean Time between Failure(MTBF): MTTF + MTTR,平均故障的間隔時間
* Availability = MTTF/MTBF
* FIT (failures in time) = 1/MTTF, the rate of failures
### 3.3 評估 speed
1. Time
**Wall Clock Time**
- 也稱為 "real time" 或 "elapsed time",指的是從**程式開始執行到結束所經過的實際時間**。這包括所有程序執行時所花費的時間,例如計算時間、系統呼叫、I/O操作,甚至其他程式的干擾等,ex: 檔案讀寫、介面操作
- 實際反映了一個用戶等待程式完成所需的時間。
**CPU Time**:
- 指的是CPU實際上花費在你的程式上的時間,不包括等待系統資源(如I/O操作或等待其他程序執行)的時間。
<img src="https://hackmd.io/_uploads/S14rSd080.png" width="80%">
- relation between CPI and CPU Time
<img src="https://hackmd.io/_uploads/rksSH_0UC.png" width="80%">
2. benchmark
提供一個公平且一致的方法來比較不同CPU之間的性能
### 3.4 Principle of Computer Design
<img src="https://hackmd.io/_uploads/rJK8rd0UC.png" width="80%">
Locality: 1. **temporal locality**(locality in time), 2. **spatial locality**(locality in space)
## 附註
- word 的大小取決於所使用的處理器和系統的位數。例如,在現代的 64位系統中,一個 word 通常是 8 bytes。
- byte-addressable: 每個byte在記憶體都有一個獨立的地址