contributed by <TempoJiJi
>
ierosodin
應該一併列出 processor model,這對解讀數據來說很重要 jserv
觀察程式的行爲後,在Makefile裏看見了這個編譯選項:
-DBASELINE
才學到原來能在編譯動態使用#define
在這裏就可以很清楚的看到每種不同的版本的執行時間(N=400000000),這裏有3種不同的時間:
CPU bound: 指的是程序需要大量的 CPU computation (對 CPU time 需求量大),相比之下僅需少量的 I/O operation,效能取決於 CPU 速度。
I/O bound: 需要大量 I/O operation (I/O request 的頻率很高或一次 I/O request 成本很高),但僅需少量的 CPU computation,效能取決於 I/O device 速度。
real < user
: 表示程式是CPU bound,所以使用平行處理對效能提升有幫助real ≒ user
: 表示程式是CPU bound,但即使使用平行處理,效能也不會有明顯的提升,有可能是計算兩沒有很大,又或是程式的相依性太高real > user
: 表示程式是I/O bound,成本大部分爲I/O操作,所以使用平行處理並不會帶來顯著的效能提昇 (或沒有提昇)參考資料:
接下來看看make gencsv:
這裏的for相等於:
大意就是將N初始化爲100進行測試,每次加5000直到25000。然後將結果輸出到result_clock_gettime.csv裏
執行make plot
輸出結果,在Makefile裏加入:
執行
baseline的計算結果誤差圖:
上面這種方法就是目前baseline使用的
N 爲積分區間[0,1]的分段大小,理論上N分的越細(N值很大)精準度就越高,相對的計算量也很大
參考資料:Wikipedia
Code:
leibniz_avx :
查看效能:
在這裏觀察openmp:
以下爲leibniz各個不同實做的效能對比圖:
leibniz的計算結果誤差圖:
clock()測試:
執行結果:
在這裏可以看到程式使用system("cd")這個system call,結果clock()所計算出來的時間跟real time卻差很多。
第一個參數clockid_t 確定要用哪個是種類型:
CLOCK_REALTIME
: 標準POSIX即時時鐘,利用變數xtime記錄RTC的時間。會隨着系統即時時間而改變,即從 1970/1/1 00:00:00
開始計時,中間如果系統時間被改變,則對應的時間也會被改變CLOCK_MONOTONIC
: 從系統啓動時開始計算,利用jiffies來記錄,不會受到系統時間被改變的影響,但會因爲NTP的改變而受到影響CLOCK_MONOTONIC_RAW
: 跟CLOCK_MONOTONIC一樣,但不會受到NTP的影響CLOCK_PROCESS_CPUTIME_ID
: 記錄一個process裏所話的總CPU時間(User mode & Kernel mode),不包含等I/O和其他資源的時間。CLOCK_THREAD_CPUTIME_ID
: 記錄一個thread所花的總CPU時間有個時間結構體 timespec
,其計時的單位是奈秒(nanosecond)
Description
time() returns the time as the number of seconds since the Epoch, 1970-01-01 00:00:00 +0000 (UTC).
跟time()一樣,但會回傳多一個timezone,看下面這個timeval的結構:
Notes:
The time returned by gettimeofday() is affected by discontinuous jumps in the system time (e.g., if the system administrator manually changes the system time). 如果系統時間被改變,那麼gettimeofday()所回傳的值,會被不連續的跳動時間所影響
為什麼 time() 和 gettimeofday() 不適合拿來作 benchmark ?
在上面可以看到 time() 跟 gettimeofday() 都是直接回傳系統時間,所以如果系統時間在程式執行期間被改變,那麼回傳出來的值就會不準確。而且爲了要跟NTP同步,在同步的期間可能會有幾秒的誤差。
爲什麼clock_gettime()結果飄忽不定?
clock_gettime() 會因爲不同的進程在CPU之間切換而受到影響。解決方法就是利用clock_gettime()找出95%信賴區間,這樣得到的數據就更加精準。
參考資料:
TempoJiJi
ComputePi
sysprog21