---
# System prepended metadata

title: 電腦效能介紹

---

# 電腦性能(Performance)介紹
## Below Your Program
* Application software
    * 以high-level language(高階語言 以下簡稱HHL)編寫
* System software
    * Compiler：將HLL code轉換為machine code
    * OS：service code
        * 處理input/output
        * 管理memory 和 storage
        * Scheduling tasks & sharing resources
* Hardware
    * Processor、memory、I/O controllers

## Levels of Program Code(不同層次的程式碼)

* HLL：
    * abstraction 使開發者在使用HLL時，可以更關注解決問題本身，而無需深入了解底層Hardware 或系統細節。
    * 使得程式碼更容易理解和維護，同時提高了生產力。
* 組合語言：
    * 組合語言提供了對 machine code 的文本表示形式，是一種相對較低階的語言。
    * 組合語言的 abstraction 程度介於 HLL 和 Hardware 之間，提供了更多控制的同時仍然隱藏了底層 Hardware 的細節。
* Hardware representation：
    * Hardware representation 直接使用二進制數位（位元）和機器碼，這是電腦 Hardware 能直接執行的語言。
    * 計算機的指令和數據以特定的編碼形式存在。指令是用來告訴計算機進行何種操作的二進制碼，而數據則是操作的對象。
## abstraction(抽象化)
不同層次的程式碼和語言與抽象化有著密切的關係。

* 抽象化的目的：
    * 是一種將複雜的內部實現細節隱藏起來，僅暴露必要的、高層次的操作接口或表示形式的概念。
* Instruction set architecture（ISA）： 
    * ISA 是一種抽象層次，它定義了hardware/software interface。
* Application binary interface（ABI）：
    * ABI 是建立在 ISA 之上的抽象層次，它包括 ISA 和系統軟體之間的界面。ABI 定義了二進制程式碼在特定平台上的運行細節，確保不同軟體元件之間的互通性。
* Implementation：
    * Implementation 是最底層的細節，包括計算機的實際 Hardware 結構和 OS 的實現細節。

## Response Time and Throughput

在計算機性能評估中，Response Time 和 Throughput 是兩個重要的概念，用來評估系統的效能和效率。

* Response Time：
    * Response Time是指完成一項任務所需的time。較短的 Response Time 通常被視為系統性能優越的指標。
* Throughput：
    * Throughput 表示在一個特定的時間內完成的總工作量。它可以用來衡量系統處理能力的高低
        * 通常以每小時、每分鐘或每秒完成的任務或交易數量為單位。
* 在考慮如何影響 Response Time 和 Throughput 的因素時，一些關鍵問題包括：
    * 替換處理器為更快版本：
        * 更快的處理器通常可以縮短每個任務的處理時間，進而降低 Response Time 。然而，對於 Throughput 而言，這可能也受限於其他系統組件的效能。
    * 增加更多處理器：
        * 添加更多處理器有助於同時處理多個任務，提高 Throughput 。然而，對於單個任務的 Response Time 可能不會有明顯改善，甚至可能因為調度和同步的開銷而增加。

在系統優化和設計中，需要在 Response Time 和 Throughput 之間找到平衡，以滿足特定應用和用例的需求。

## Measuring Execution Time(測量執行時間)

在評估計算機系統性能時，有不同的指標可以用來測量執行時間，其中兩個主要的概念是「Elapsed time」和「CPU time」。

* Elapsed time
    * 完成一個任務或程序所需的總時間，包括處理時間、I/O 操作、操作系統的開銷、閒置時間等。
* CPU time
    * CPU time 是指 CPU 用於執行特定工作的所花費的時間
        * 不計入 I/O 操作的時間，也不考慮其他工作可能佔用的份額。
    * 包括「user CPU time」（在用戶程序中花費的時間）和「system CPU time」（在OS kernel 中花費的時間）。

不同的程序對 CPU 和系統性能的影響可能會有所不同。因此，在性能分析中，這兩個指標都提供了不同層次和角度的信息，有助於全面了解系統的執行效能。

## Relative Performance

在比較計算機系統的性能時，Relative Performance 是一種常見的度量方式。其基本思想是，性能可以定義為執行時間的倒數

* Performance 定義： 1 / Execution Time
*  "X 比 Y 快 n 倍"
    *  Performance<sub>x</sub>/Performance<sub>y</sub> 
    *  = Execution time<sub>y</sub>/Execution time<sub>x</sub> 
    *  = n ``
* 例子：運行一個程序的時間
    * A 上花了 10 秒，B 上花了 15 秒
    * Execution Time<sub>B</sub> / Execution Time<sub>A</sub> = 15 秒 / 10 秒 = 1.5
    * 所以 A 比 B 快 1.5 倍

## CPU Clocking
在數位硬體中，Clock 的概念非常重要，它像是一個恆定的心跳，掌管著整個系統的運行。

![image](https://hackmd.io/_uploads/H1G3285t6.png)

* Clock period (Clock Cycle Time): 
    * 指一個 clock cycle 的持續時間。
        * 例：250ps 就等於 0.25ns，也等於 250×10^(-12)s。
* Clock frequency (rate)：
    * 表示每秒內的 cycles 數。
        * 例：4.0GHz 就等於 4000MHz，也等於 4.0×10^9Hz。
* Clock period 與 Clock frequency 互為倒數關係

## CPU Time

CPU Time = CPU Clock Cycles × Clock Cycle Time = CPU Clock Cycles / Clock Rate

其中，CPU Clock Cycles 是執行任務所需的 Clock 週期數。

* 性能的提升通常可以通過兩種方式實現：
    * 降低 Clock Cycles。
    * 增加 Clock Rate。

硬體設計師通常需要在 Clock Rate 和 Clock Cycles 之間進行權衡。

## Instruction Count and CPI
Clock Cycles = Instruct Count × Cycles per Instruct
CPU time = CPI × Instruction Count × Clock Cycle Time
= CPI × Instruction Count / Clock Rate

* CPI：Clock Per Instruction
    * CPI 是表示執行一條 Instruction 所需的平均 CPU Clock Cycles 。CPI 越低，表示每條 Instruction 的執行速度越快。
* Instruction Count：
    * Instruction Count 表示一個程序執行時所包含的指令數量。這個值取決於程序本身、所使用的指令集架構（ISA）以及 compiler 的優化等因素。

## 
Multicore microprocessors