contributed by <snoopy831002
>
軟體:unbuntu 16
硬體:Macbook pro 2013(late)
*本專案搭配astyle+Git使"過去的我"、"現在的我"以及"未來的我"延續一致的coding style
#include IMPL
在main.c裡面會使用到 gcc -DIMPL="" 的 macro。
這個marco可以使編譯時加入參數進去,以本案例來說gcc -DIMPL="phonebook_hash" 就是在編譯期間在main.c檔內加入一個IMPL的marco,其值為phonebook_hash
這個可以讓我們輕易的在同一個main.c執行多個版本的phonebook
從shell傳入marco時必須以字串傳入,雙引號還必須要跳脫。
例如:
gcc -DIMPL"\"phonebook_orig.h\""
或是寫成下面這個版本(不用跳脫):
gcc -DIMPL'\"phonebook_orig.h\"'
./phonebook_orig
執行時間:
cache-miss 高達89%:
利用perf找熱點:
./phonebook_orig & sudo perf top -p $!
在phonebook_opt.h中我縮小了struct的大小,因為在搜尋時只用lastname做搜尋,故保留之
typedef struct __LAST_NAME_ENTRY {
char lastName[MAX_LAST_NAME_SIZE];
struct entry_detail *detail
struct __PHONE_BOOK_ENTRY *pNext;
} entry;
./phonebook_orig
執行時間:
執行時間比之前縮短約2秒
cache-miss 降為31%:
利用perf找熱點:
經由perf發現findName已經大幅減少佔據系統效能了
gnuplot:
./phonebook_hash
我們可以發現花在append()的時間比之前還要多 但是findName()所花的時間接進0秒!
cache-miss
cache-miss 比之前更少
perf找熱點
我們可以發現系統把大多數的時間拿去進行hash了,所以append()[下圖]才會比之前再多花一點時間
or
or
By clicking below, you agree to our terms of service.
New to HackMD? Sign up
Syntax | Example | Reference | |
---|---|---|---|
# Header | Header | 基本排版 | |
- Unordered List |
|
||
1. Ordered List |
|
||
- [ ] Todo List |
|
||
> Blockquote | Blockquote |
||
**Bold font** | Bold font | ||
*Italics font* | Italics font | ||
~~Strikethrough~~ | |||
19^th^ | 19th | ||
H~2~O | H2O | ||
++Inserted text++ | Inserted text | ||
==Marked text== | Marked text | ||
[link text](https:// "title") | Link | ||
![image alt](https:// "title") | Image | ||
`Code` | Code |
在筆記中貼入程式碼 | |
```javascript var i = 0; ``` |
|
||
:smile: | Emoji list | ||
{%youtube youtube_id %} | Externals | ||
$L^aT_eX$ | LaTeX | ||
:::info This is a alert area. ::: |
This is a alert area. |
On a scale of 0-10, how likely is it that you would recommend HackMD to your friends, family or business associates?
Please give us some advice and help us improve HackMD.
Syncing