http://wiki.csie.ncku.edu.tw/embedded/2016q1h1
作業要求
- 在 GitHub 上 fork phonebook,然後適度修改
phonebook_opt.c
和phonebook_opt.h
兩個檔案,使得這兩者執行時期的 cache miss 降低。請用 perf 驗證,而且改進的過程中,不能有功能方面的減損。
先安裝開發工具
$ 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
將ubuntu update 到最新版再安裝perf,就沒有出現下面的error messagesudo apt-get install linux-tools-common
sudo apt-get install linux-cloud-tools-common
WARNING: perf not found for kernel 3.16.0-50
You may need to install the following packages for this specific kernel:
linux-tools-3.16.0-50-generic
linux-cloud-tools-3.16.0-50-generic
編寫程式,測試perf
#include
#include
double compute_pi_baseline(size_t N) {
double pi = 0.0;
double dt = 1.0 / N;
for (size_t i = 0; i < N; i++) {
double x = (double) i / N;
pi += dt / (1.0 + x * x);
}
return pi * 4.0;
}
int main() {
printf("pid: %d\n", getpid());
sleep(10);
compute_pi_baseline(50000000);
return 0;
}
gcc -g -Wall -std=c99 perftest.c -o perftest
「-g」是加入除錯資訊;「-Wall」是顯示所有的警告訊息 ;「-o」用來指定所生成的可執行程式的文件名。
要運行編譯後的perftest,會顯示pid number 例如16777
./perftest
打開另外一個terminal ,並輸入 perf top -p 16777
結果顯示函式 compute_pi_baseline() 佔了近 99.9%,跟預期一樣,此函式是程式中的「熱點」