owned this note changed 8 years ago
Linked with GitHub

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 這五個點)
gencsv: default ​ for i in `seq 100 5000 25000`; do \ ​ printf "%d " $$i;\ ​ ./benchmark_clock_gettime $$i; \ ​ done > result_clock_gettime.csv ​
  • 撰寫gnuplot的script 然後執行make plot
    首先於Makefile中加入
plot: result_clock_gettime.csv gunplot runtime.gp
  • 撰寫runtime .gp file
set title "compute-pi" set xlabel "N" set ylabel "Time(second)" set term png enhanced font 'Verdana,10' set datafile separator "," set output 'runtime.png' plot "result_clock_gettime.csv" using 1:2 title 'baseline' with lines lt rgb 'blue' , \ "result_clock_gettime.csv" using 1:4 title 'openmp_2' with lines lt rgb 'red' , \ "result_clock_gettime.csv" using 1:6 title 'openmp_4' with lines lt rgb 'orange' , \ "result_clock_gettime.csv" using 1:8 title 'avx' with lines lt rgb 'green' , \ "result_clock_gettime.csv" using 1:10 title 'avxunroll' with lines lt rgb 'purple'

如果此時出現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次運算時間之平均

clock_gettime(CLOCK_ID, &start); for(i = 0; i < loop; i++){ compute_pi_baseline(N); } clock_gettime(CLOCK_ID, &end); printf("%lf",(double)((end.tv_sec-start.tv_sec)+(end.tv_nsec-start.tv_nsec)/ONE_SEC))/loop);
  • 搭配95信心水準

統計學上,我們可以預測在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的部分我之後還要自己研究,還不太熟悉)

參考資料

王紹華的共筆
廖健富的共筆
信賴區間

Select a repo