sarah
,compute-pi
contributed by <SarahCheng
>
github:
https://github.com/SarahYuHanCheng/hw1.git
make check
實驗結果
STEP:
make gencsv
要plot "*csv" 必須加上第8行,不然會有一些莫名其妙的錯誤訊息
-DBASELINE待解:
make plot
,結果如下圖未增加圓周率計算過程中迭代的數量,時間太短就看不出差異?
於Makefile中修改:
for i in
seq 1000 1000 250000;
1. Wall-clock time 由 kernel 裡的 xtime 來記錄,系統每次啟動時會先從設備上的 RTC 上讀入 xtime。值是自 1970-01-01 起經歷的秒數,Linux 核心也會決定每秒要發生幾次中斷 (透過常數 HZ) ,每次 timer interrupt,就會去更新 xtime
。可能會和 NTP 伺服器、時區、日光節約時間同步或使用者自己調整。所以「通常」不建議拿來量測程式時間,因為它不是一個穩定的時間,Wall-clock time 不一定是單調遞增 (monotonic)。
2. CPU time CPU time 算的是「每條 thread 的使用時間加總」
很多時候可以用此判斷程式是 CPU bound 還是 I/O bound。
real < user
: 表示程式是 CPU bound,使用平行處理有得到好處,效能有提昇。real ≒ user
: 表示程式是 CPU bound,即使使用平行處理,效能也沒有明顯提昇,常見的原因有可能是其實計算量沒有很大,生成、處理、結束多執行緒的 overhead 吃掉所有平行處理的好處,或是程式相依性太高,不適合拿來作平行處理。real > user
: 表示程式是 I/O bound,成本大部分為 I/O操作,使得平行處理無法帶來顯著的效能提昇 ( 或沒有提昇)。方法有四:
1. 離散積分 = 4 *( dt )
AVX (Advanced Vector Extensions) 是 Intel 一套用來作 Single Instruction Multiple Data 的指令集 source
128 位 SIMD 暫存器 xmm0 - xmm15 擴展為 256 位的 ymm0 - ymm15 暫存器
支持 256 位的向量運算,由原來 128 位擴展為 256 位
指令可支持最多 4 個 operand,實現目標操作數無需損毀原來的內容
引進新的 AVX 指令,非 Legacy SSE 指令移植
新增 FMA 指令子集 (fused multiply-add/subtract 類運算)
可用$ cat /proc/cpuinfo | grep flags
尋找是否存在 fma
關鍵字
* ctrl+D =Exit root
* 像是`Intel(R) Core(TM) i5-3317U CPU` 等級的電腦就沒支援,這樣的話可用
* 引進新的指令編碼模式,使用 VEX prefix 來設計指令編碼`__m256d` 並不是一種暫存器,是指可以用來載入到 AVX 暫存器的 "Data type"後面程式中用到了`__attribute__ `機制,可以用來設置函數屬性(Function Attribute)、變數屬性(Variable Attribute)和類型屬性(Type Attribute)。`aligned` 則規定變數或結構的最小對齊格式,以 Byte 為單位。
2. Leibniz 級數
Step:
computepi.c
time_test.c
benchmark_clock_gettime.c
Makefile
Make plot
出現錯誤訊息
compute_pi_Leibniz
—L改為小寫即可(要和computepi.c裡的函式名稱一致)
- 圖是空的…
Warning: empty x range [1000:1000], adjusting to [990:1010]
1.查看
result_clock_gettime.csv
發現1,2欄為—nan(有可能是出現分母是0)
2.runtime.gp plot的順序和benchmark_clock_gettime.c不一致
結果和openmp2很接近
3. Euler
1.git reset --hard HEAD^
回到上一次commit的版本(還沒加其他方法)
2.computepi.c add function
#include <math.h>
, Makefile有加 -lm,卻還是出現:可以嘗試在編譯時加入參數
-lm
ierosodin
好喔!謝謝你!
上面三張 runtime.gp欄位打錯,出現奇怪現象
下面這張才是正常的:
4. MonteCarlo蒙地卡羅法:
* 邊長為2的正方形,正方形內有一個內切圓,面積為 $1 \cdot 1 \cdotπ = π$
* 圓面積和正方形面積之比為π:4 = 正方形內均勻隨機丟石頭,落在圓形內的機率
! [rejected] master -> master (non-fast-forward)
Automatic merge failed; fix conflicts and then commit the result.
Updates were rejected because the tip of your current branch is behind its remote counterpart.
執行git pull origin master
後,多了不對的程式碼,想要還原git revert HEAD
但是出現錯誤訊息:
但是我不想merge他…
git push -f
強制push