# 2017q1 Homework1 (compute-pi) contributed by < `hunng` > ### Reviewed by divazone * 請盡快將修改提交至github上 * 為何OpenMP(2 threads)的突起較多?而4 threas卻沒這現象? ## 開發環境 * OS: Ubuntu 16.04.2 LTS * Architecture: x86_64 * CPU op-mode(s): 32-bit, 64-bit * CPU(s): 4 * CPU Model name: Intel(R) Core(TM) i5-4200U CPU @ 1.60 GHz * L1d cache: 32 K * L1i cache: 32 K * L2 cache: 256 K * L3 cache: 3072 K * MemTotal: 8056592 KB ## 原程式分析  圖中有過多的突起,並且因為這些突起導致其他數據的增益不明顯 ```c clock_gettime(CLOCK_ID, &start); for (i = 0; i < loop; i++) { compute_pi_baseline(N); } clock_gettime(CLOCK_ID, &end); ``` 可以利用信賴區間來捨棄部份不合理數據(參考自 [廖健富](https://hackpad.com/Hw1-Extcompute_pi-geXUeYjdv1I)) ## 信賴區間程式碼實作 因為設想未來可能可以在資料分析的狀況使用 設計一個 struct 去實現 ``` typedef struct __SIGMA_NODE { double stor; int confide; struct __SIGMA_NODE *NEXT; } numb; ``` 多設定一個 confide 是要在 confidenum() 後,認定此數據不具參考性,即忽略此數據 以下為對應的 function ``` numb *appendnum(numb *a, double addit); double sumnum(numb *a); double avernum(numb *a); double sigmanum(numb *a); void confidenum(numb *a); ``` 套用進 benchmark_clock_gettime.c ``` for (i = 0; i < loop; i++) { clock_gettime(CLOCK_ID, &start); compute_pi_baseline(N); clock_gettime(CLOCK_ID, &end); a = appendnum(a, (double) (end.tv_sec - start.tv_sec) + (end.tv_nsec - start.tv_nsec)/ONE_SEC); } confidenum(HEAD); printf("%lf ", avernum(HEAD)); ```
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up