contributed by <petermouse
>
jkrvivian
>測試時governor皆設定為performance
$ cpupower frequency-set -g performance
(需root權限)
Frequency: > 2.8 GHz
根據Linux 效能分析工具: Perf perf_top_example.c
做測試
「程式輸出的文字訊息」請勿使用圖片表示,請改由文字貼上課程助教
不好意思,已更正petermouse
大部分的執行時間都花在了compute_pi_baseline
上
ing…
不修改code,執行make cache-test
看cache miss rate
結果:
100次平均時間
在原始版本中,因為struct太大,導致cache中最多能夠存的資料量極少,cache miss機率高,影響到效能,因此最直接的作法是改良struct的大小。
將phonebook_opt.h
資料結構改變。
而phonebook_opt.c
與phonebook_orig.c
大致相等。
結果
100次平均時間
長條圖
Cache miss 大幅降低,但仍有45%
而append()與findName()時間都減少了
我並沒有分配空間給其他資料,所以還不能存取
因為資料多達35萬筆,且採用linked list結構,萬一資料在linked list尾端,每次重頭搜尋會花太多時間。
解決辦法:引入hash(使用djb2),pHead也改為陣列。
以下為幾個程式碼片段(main.c)
結果:
可以發現append會比較花時間,而findName幾乎瞬間完成,原因是append需要經過hash才能append,findName反而透過hash使得總體要找的linked list資料變少,幾乎瞬間完成。
因為測資只有一筆資料(zyxel),如果有多筆資料的查詢,findName會節省更多時間,將會比前兩組有更好的效能
待續