SLP(Chapter 10 part 1):性能評估 / 性能測試

1 基礎知識

性能優化對象:瓶頸 bottleneck / Hot spot(需要很長時間執行的代碼段)

優化過程
在這裏插入圖片描述

2 Performance Principles (法則)

2.1 80/20定律 (Pareto Principle)

80%的CPU時間花在20%的代碼上

Amdahl定律 -

  • 用於查找對系統整體性能提聲最大的部分優化。
    amdahl
  • 用於算並行計算的最大加速比

    部分優化E使一個運行時間爲P的部分加速S倍,其他部分速度不變
    整體加速比 = 優化前的時間 / 優化後的時間 = 1 / ((1-P)+ P/S)

3 Performance Measurement 性能評估 / 測試(對時間)

3.1 計時級制 Timing mechanism

(1)Time時間

時間用於:測量事件序列;量化事件的持續時間和間隔

Why 在計算機系統中需要時間?

  1. 硬件、操作系統都需要時間和計時器。
  2. 衡量程序性能,如執行時間

計算機系統裏的兩種時間

在這裏插入圖片描述

  1. Wall time:運行特定程序所需的總時間。(包含空閒等與用於進程無關的時間)
  2. CPU時間
    User CPU time + System CPU time = CPU time
    在這裏插入圖片描述

時間片 time slice

時鐘單元,在某狀態的最小停留時間

(2)Timer 計時器

硬件/軟件都有,用於測量時間

硬件中(如 Intel Architecture, 32/X86, 8253)

在這裏插入圖片描述

  • RTC(Real Time CMOS Clock,實時時鐘/外部晶振實時時鐘)
    1. CMOS RAM:存儲時間、配置
    2. 低功率電池
    3. 用於啓動過程
    4. 後臺一直刷新
    5. 物理原理:晶體震盪產生時鐘頻率
      == 主頻 main frequency / 時鐘頻率 Clock frequency:每秒週期數的倒數==
  • PIT (Programmable Interval Timer 可編程間隔定 時器)
    計數器生成輸出信號,可能會觸發中斷
  • PIC (Programmable Interrupt Controller,中斷控制器)
  • TSC (Time Stamp Counter 時間戳計數器)
    1. TSC從RTC收到CLK signal
    2. 是64位寄存器,計算週期數(使用longlong)
    3. 使用RDTSC訪問寄存器的值(納秒級訪問)
    4. Windows中的接口,QueryPerformanceFrequency / QueryPerformanceCounter訪問(微秒級訪問)參數是一個64位整型的地址
      在這裏插入圖片描述

OS中(如 Windows, GetTickCount() | Linux, jiffies )

在這裏插入圖片描述

  • DWORD GetTickCount(void); //自上次啓動系統以來經過的毫秒數,每 49.7 天循環一次
    從 RTC 讀取,然後轉換
  • 系統時間:參數是SYSTEMTIME類型的地址
    GetLocalTime() //當地時間
    GetSystemTime() //格林威治時間
  • 生存期:參數是LARGE_INTERGER(64bits)的地址,用成員QuadPart訪問值
    GetSystemTimeAsFileTime()
    Win - 1601.1.1 | Linux – 1970.1.1
    在這裏插入圖片描述
    在這裏插入圖片描述

C/C++(如C的<time.h>)

==Macro宏 CLOCKS_PER_SEC = 1000 ==
在這裏插入圖片描述

  1. clock()返回的單位是ms,需要除以CLOCK_PER_SECOND得到s
  2. localtime / gmtime: 參數是time_t,返回值是struct tm類型指針,轉換爲本地時間,或格林威治時間
    用asctime函數將其返回值轉換成字符串輸出
  3. time_t, clock_t都是long
  4. struct tmtm

Statistical sampling (抽樣統計) / Profiling (分析)

對採樣過程使用概率定律測量程序狀態。
在這裏插入圖片描述
計時器定期中斷程序,並且記錄程序計數器
- 估計程序在程序中花費的時間
- 檢查程序是否將大部分時間花費在幾個位置

優點:節約時間、成本很低
缺點:可能不能檢查到所有風險

4 Profiler (評測器)

軟件探查器 Software profiler
一種程序,用於對一個或多個過程代碼的執行進行基準測試,以幫助用戶瞭解在代碼執行方面花費的時間。

GNU Gprof – Linux
Vtune - Intel
Visual C++ profiler
Valgrind for different platforms

Profiler用於:
幫助程序員識別
• 計劃的哪些部分是瓶頸導致緩慢。• 代碼的哪些部分被調用的頻率高。

MFLOPS: million floating point operations巨型浮點操作
性能可能用:每秒的MFLOPS數衡量

在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章