contributed by <janetwei
>
ierosodin
SeanCCC
$ lscpu
Architecture: x86_64
CPU op-mode(s): 32-bit, 64-bit
Byte Order: Little Endian
CPU(s): 4
On-line CPU(s) list: 0-3
Thread(s) per core: 2
Core(s) per socket: 2
Socket(s): 1
NUMA node(s): 1
Vendor ID: GenuineIntel
CPU family: 6
Model: 61
Model name: Intel® Core™ i5-5250U CPU @ 1.60GHz
Stepping: 4
CPU MHz: 1233.187
CPU max MHz: 2700.0000
CPU min MHz: 500.0000
BogoMIPS: 3200.16
Virtualization: VT-x
L1d cache: 32K
L1i cache: 32K
L2 cache: 256K
L3 cache: 3072K
NUMA node0 CPU(s): 0-3
請列出硬體相關資訊(cache, memory 等等)
課程助教好的魏孜昀
上星期寫作業到一定進度之後,由於之前的開發環境的設定,沒有安全安裝好 ubuntu ,因此在我誤打指令,重新設定開機選項後就找不到我原本使用的 ubuntu 硬碟 ,花了兩三天的時間修復,但是都徒勞無功,最後決定重灌,而且因為是使用 Macbook Air ,本身只有 128GB 的硬碟,因此想要重灌在外接硬碟
Installing Ubuntu onto a bootable USB stick or other device on a Mac
$ make run
size of entry : 136 bytes
execution time of append() : 0.048162 sec
execution time of findName() : 0.005631 sec
$ make plot
$ make cache-test
Performance counter stats for './phonebook_orig' (100 runs):
338,5886 cache-misses # 92.608 % of all cache refs ( +- 0.07% )
365,6162 cache-references ( +- 0.19% )
2,6155,9863 instructions # 1.46 insns per cycle ( +- 0.02% )
1,7905,6194 cycles ( +- 0.33% )
0.069157022 seconds time elapsed ( +- 0.49% )
1.縮小 struct 體積
將 first name、email、phone number、address、zip 等資訊另外建一個 struct ,因為題目只有要搜尋 last name
size of entry : 32 bytes
execution time of append() : 0.040283 sec
execution time of findName() : 0.002284 sec
Performance counter stats for './phonebook_opt' (100 runs):
118,9152 cache-misses # 73.496 % of all cache refs ( +- 0.09% )
161,7982 cache-references ( +- 0.11% )
2,4391,2558 instructions # 1.97 insns per cycle ( +- 0.02% )
1,2355,5490 cycles ( +- 0.12% )
0.047152542 seconds time elapsed ( +- 0.14% )
cache-misses 從 92.608% 降低到 73.496%
2.hash function
利用 lastName 的字串當做搜尋的 key ,在 append() 運用到 hash function,建立一個 hash table 提供更快速的搜尋
unsigned int BKDRhash(char lastName[])
{
unsigned int hash = 0;
int R=13;
for (int i = 0; i < strlen(lastName); i++)
hash = (R * hash + lastName[i])%SIZE;
return hash;
}
Performance counter stats for './phonebook_hash' (100 runs):
158,3284 cache-misses # 67.733 % of all cache refs ( +- 0.12% )
233,7545 cache-references ( +- 0.13% )
3,8000,5035 instructions # 1.48 insns per cycle ( +- 0.02% )
2,5714,5502 cycles ( +- 0.45% )
0.105263097 seconds time elapsed ( +- 1.80% )
原始和兩種優化的時間