compute-pi
contributed by <snoopy831002
>
reviewed by <janetwei
>
- 可以試試運用其他方法算pi之後跟原本的程式比較,例如:Leibniz
- 可以更深入研究AVX256
流程
make check
開使編繹分別產生5個執行檔
make gencsv
將執行結果輸入至csv檔中
這邊參考 王紹華 的共筆 我們可以更改 Makefile中的gencsv標題來決定我們取樣的點個數(預設只取樣5個點也就是100 5100 10100 15100 20100 這五個點)
- 撰寫gnuplot的script 然後執行
make plot
首先於Makefile中加入
如果此時出現Skipping data file with no valid points
請在runtime .gp檔案中增加 set datafile separator","
(因為CSV檔案中
Image Not Showing
Possible Reasons
- The image file may be corrupted
- The server hosting the image is unavailable
- The image path is incorrect
- The image format is not supported
Learn More →
以","區隔資料)
分析
- 未修正輸出圖形(資料抖動很劇烈)
以下為50筆資料之結果:

以下為250筆資料之結果

以下為500筆資料之結果

在benchmark_clock_gettime.c中意外發現所測之clock其實是疊代25次之結果(原執行時間之25倍),所以應將程式改為取25次運算時間之平均
統計學上,我們可以預測在95%信心水準下,95%以上的正確資料會出現在此信賴區間內。
公式:
- 標準差:

- 信賴區間上下界
upperbound: μ+2*SD
lowerbound: μ-2*SD
以下為50筆資料之結果

以下為250筆資料之結果

以下為500筆資料之結果

由這幾張圖可以發現資料跳動已經不如未修正之前了
誤差
- 在這裡我使用math.h中內建的函式作為π的標準值,搭配實驗數據計算error rate
以下為50筆資料之結果

以下為250筆資料之結果

以下為500筆資料之結果

- 這邊我參考了王紹華的共筆發現avxunroll的誤差這麼明顯應該是因為avxunroll的 loop 執行一次等同於 baseline 版本執行16次。舉例來說baseline版本20次,avxunroll只有執行16次,足足少了4次而產生誤差。(avx的部分我之後還要自己研究,還不太熟悉)
參考資料
王紹華的共筆
廖健富的共筆
信賴區間