# 2016q3 Homework 1 (compute-pi) ElfayR ### 系統環境 * AMD Athlon(tm) 64 X2 Dual Core Processor 4400+ * Core: 2 * Memory: 3GB ram * L1d cache: 64K * L1i cache: 64K * L2 cache: 512K ## 作業要求 * 在 GitHub 上 fork [compute-pi](https://github.com/sysprog21/compute-pi),嘗試重現實驗,包含分析輸出 * 注意: 要增加圓周率計算過程中迭代的數量,否則時間太短就看不出差異 * 詳閱廖健富提供的[詳盡分析](https://hackpad.com/Hw1-Extcompute_pi-geXUeYjdv1I),研究 error rate 的計算,以及為何思考我們該留意後者 * 用 [phonebok](/s/S1RVdgza) 提到的 gnuplot 作為 `$ make gencsv` 以外的輸出機制,預期執行 `$ make plot` 後,可透過 gnuplot 產生前述多種實做的效能分析比較圖表 * 可善用 [rayatracing](/s/B1W5AWza) 提到的 OpenMP, software pipelining, 以及 loop unrolling 一類的技巧來加速程式運作 * 詳閱前方 "Wall-clock time vs. CPU time",思考如何精準計算時間 * 除了研究程式以外,請證明 [Leibniz formula for π](https://en.wikipedia.org/wiki/Leibniz_formula_for_%CF%80),並且找出其他計算圓周率的方法 * 請詳閱[許元杰的共筆](https://embedded2015.hackpad.com/-Ext1-Week-1-5rm31U3BOmh) * 將你的觀察、分析,以及各式效能改善過程,並善用 gnuplot 製圖,紀錄於「[作業區](https://hackmd.io/s/H1B7-hGp)」 ## 實作 * 一開始下`make check`就發生 coredump,用gdb dump出來發現死在奇怪的地方。死在第1行`double`的宣告沒啥道理。 ``` (gdb) r Starting program: /home/elfay/github/compute-pi/time_test_baseline [Thread debugging using libthread_db enabled] Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1". Program received signal SIGILL, Illegal instruction. main (argc=1, argv=0x7fffffffde28) at time_test.c:7 7 double pi = 0.0; (gdb) bt #0 main (argc=1, argv=0x7fffffffde28) at time_test.c:7 (gdb) Quit ``` 去linux program manual查了一下`signal SIGILL`,是當程式執行非法的指令的時候才會發生。  後來在參考大家的筆記中找到遇到一樣狀況 [hackMD筆記](https://hackmd.io/KYQwjARgZgTArAZgLQgJwAYpICyoMYAmSAHJiEggGzzqQEIDsqYQA===#) 因為電腦太舊所以不支援`AVX SIMD`... 只好到`makefile`裏面把`-mavx` 移除並將AVX 和AVXUNROLL的方法用`define`隔開。 * 先測試 N 從 1 ~ 500000,隔間 1000繪製的圖形如下(每個區間測試 25 次)。因我的電腦只有 2 Core 所以 OpenMP 2 thread & 4 thread 圖形是重疊的。  * 因資料離散值很大,嘗試加入信心區間的過濾 95% 兩個標準差。  * 看出來圖表離散程度有比較好 不過還是有一些時候的執行時間會比較離散。 #### 問題討論 * 看起來時間增加的趨勢很接近一個直線斜率,可以使用數學函式來表示`y=f(x)+b`。可以先做線性回歸再用信心區間來過濾。 ### 線性回歸 (linear regression) * [linear regression](http://www.codecogs.com/library/maths/approximation/regression/linear.php) ### 如何精準計算時間 ### 未來工作 ### 參考資料 * [signal linux manual page](http://man7.org/linux/man-pages/man7/signal.7.html) * [Gnuplot_1](http://ithelp.ithome.com.tw/articles/10158860) ###### tags: `ElfayR`
×
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