# A01: phonebook
作業解說 video,請對照觀看
$ git clone https://github.com/sysprog21/phonebook/
$ cd phonebook
$ make
[sudo] password for
字樣時,輸入自己的 Linux 使用帳號密碼$ make run
Ctrl
-C
可以離開畫面)size of entry : 136 bytes
execution time of append() : 0.043859 sec
execution time of findName() : 0.004776 sec
$ make plot
runtime.png
,可用 eog runtime.png
命令來觀看$ gnuplot
> set title 'my plot' @設定圖片名稱
> set xlabel 'x axis' @設定XY軸座標名稱
> set ylabel 'y axis'
> set terminal png @設定輸出格式為 .png
> set output 'output_plot.png' @設定輸出檔名
> plot [1:10][0:1] sin(x) @畫出 sin(x) 函式
@x軸座標範圍 1-10
@y軸座標範圍 0-1
$ astyle --style=kr --indent=spaces=4 --indent-switches --suffix=none *.[ch]
git commit
時,檢查 C/C++ 原始程式碼的風格是否一致:$ ln -sf ../../scripts/pre-commit.hook .git/hooks/pre-commit
在 GitHub 上 fork phonebook,然後適度修改 phonebook_opt.c
和 phonebook_opt.h
兩個檔案,使得這兩者執行時期的 cache miss 降低。請用 perf 驗證,而且改進的過程中,不能有功能方面的減損。
phonebook_orig.[ch]
不需要修改,我們關注的是 phonebook_opt.[ch]
,當然要修改 main.c
也是允許的
findName()
的時間必須原本的時間更短
append()
的時間可以比原始版本稍久,但不應該增加太多
main.c
應該只有一份,不要建立新的 main()
,善用 Makefile 定義對應的 CFLAGS
在執行程式(phonebook_orig
和 phonebook_opt
) 前,先清空 cache:
$ echo 1 | sudo tee /proc/sys/vm/drop_caches
除了修改程式,也要編輯「作業區」,增添開發紀錄和 GitHub 連結
務必使用 astyle 來對程式碼進行排版,詳細使用方式見 README.md
本例選用的 dataset (也就是輸入電話簿的姓名) 是否存在問題?
可能的效能改進方向:
struct __PHONE_BOOK_ENTRY
的成員,搬動到新的結構中截止日期:
findName()
的 cache miss 與執行成本,append()
也該想辦法縮減時間
McDonald
,但若使用者輸入 MacDonald
或 McDonalds
,也一併檢索出來