標注須知
下方只要是 $ 開頭,就表示在 GNU/Linux 的終端機裡面輸入的指令,比方說 $
sudo apt-get update
,就表示要輸入 sudo apt-get update。
預先準備動作
安裝 GNU/Linux,建議安裝 Lubuntu 15.10 (64-bit) 注意: 不要透過虛擬機器,而是用多重開機直接裝在實體機器的硬碟中,記得先切割好硬碟 安裝相關開發工具
$ sudo apt-get update
$ sudo apt-get install build-essential
$ sudo apt-get install linux-tools-common linux-tools-generic
$ sudo apt-get install astyle colordiff gnuplot
關於 GNU/Linux 指令,請參閱 鳥哥的 Linux 私房菜 本系列課程全程使用 GNU/Linux,全世界有十幾億臺裝置內建 Linux 系統,學習 Linux 是相當划算的投資!
##Linux 效能分析工具: Perf
Perf 全名是 Performance Event,是在 Linux 2.6.31 以後內建的系統效能分析工具,它隨著核心一併釋出。藉由 perf,應用程式可以利用 PMU (Performance Monitoring Unit), tracepoint 和核心內部的特殊計數器 (counter) 來進行統計,另外還能同時分析運行中的核心程式碼,從而更全面瞭解應用程式中的效能瓶頸 詳細閱讀 Linux 效能分析工具: Perf 並在自己的 Linux 開發環境實驗
$ git clone https://github.com/embedded2016/phonebook
$ cd phonebook
make
$ make run
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
gnuplot plot
即可畫出我們想要的圖表。$ astyle --style=kr --indent=spaces=4 --indent-switches --suffix=none *.[ch]
- 你可以想像 Apple 和 Google 的工程師隨便安置程式碼,然後不用管合作的議題嗎?
- 即便一個人寫作業,其實是三人的參與:過去的你、現在的你,以及未來的你
$ ln -sf ../../scripts/pre-commit.hook .git/hooks/pre-commit
- 我們介紹 Git hooks 是為了日後銜接 Continuous integration (CI),專業程式設計必備的準備工作
- 任何人都可以寫出機器看得懂的程式碼 (在檔案總管裡面對 EXE 檔複製貼上即可),但我們之所以到資訊工程系接受訓練,為了寫出人看得懂、可持續維護和改進的程式
##作業要求
在 GitHub 上 fork phonebook,然後適度修改 phonebook_opt.c 和 phonebook_opt.h 兩個檔案,使得這兩者執行時期的 cache miss 降低。請用 perf 驗證,而且改進的過程中,不能有功能方面的減損。
$ echo 1 | sudo tee /proc/sys/vm/drop_caches
除了修改程式,也要編輯 Hackpad 下方「作業區」,增添開發紀錄和 GitHub 連結
更新 Hackpad 後,還要寄信通知授課教師和助教
務必使用 astyle 來對程式碼進行排版,詳細使用方式見 README.md
可能的效能改進方向:
截止日期:
##挑戰題
##參考資料