contributed by <HaoTse
>
$ sudo apt-get install mutrace
addr2line
使用 (注意,要確保編譯時加入 -g 參數,確保包含 debug info 的執行檔正確產生。)merge_sort()
在研究程式碼時發現 main.c
中的 cut_func()
呼叫 merge_sort()
的部份總是會直接 return list
,與同學討論過後覺得 max_cut
和 merge_sort()
是沒有作用的,因此先將它拿掉,另外也將沒有用到的 cut_count
拿掉。
拿掉後初步執行看看結果是否改變
可以發現 sort 後的結果在這裡看起來還是正確的。
對程式做任何改變後都要驗證其正確性,上述僅僅只是執行一次對8個 random 的數字做排序,並不可靠。
為了驗證正確性,我先增加了 random_gen.c
,並在 Makefile
中做改變。
原本我在 Makefile
中寫
後來參考 鳥哥的 Linux 私房菜 才發現 sort
需加上 -n
,作用為使用『純數字』進行排序(預設是以文字型態來排序的)。
檢查剛剛做的改變,首先 $make CHECK=1
,開啟 CHECK 的功能,接著 make check
,並且得到 OK 的結果。
main.c
內容原本 main.c
的行數不少,要追蹤程式碼有點累人,因此我將 merge sort 的部份拉出來到 mergesort.[ch]
。
另外也將 main.c
中比較容易混淆的部份做修改,例如將 merge()
改名為 merge_thread_list()
,原本的 merge()
容易讓人以為他是合併 sort 完的結果。
我一開始沒有注意就不小心把
merge()
移進mergesort.[ch]
。鄭皓澤
然後將 cut_func()
改名為 merge_sort()
,比較符合以前的習慣。
word.txt
typedef char val_t[16];
%ld
部份改為 %s
mergesort.c(merge_list)
中的比較部份使用 strncmp
list.c(node_new)
assign value 的部份改為使用 strcpy
Makefile
中新增驗證正確性的方法
這裡使用
wc
的指令計算word.txt
的行數 鄭皓澤
使用 gnuplot 畫出不同 thread 數量處理 phone book 的 word.txt 的執行時間
原本想說應該應thread愈多愈快,不過這個結果很明顯的跟我想的不一樣,還在研究當中。
$ (for i in {1..8}; do echo $RANDOM; done) | mutrace ./sort 4 8
得到輸出如下
這裡按照作業要求中所教的使用
addr2line
都顯示??:0
目前還在尋找原因鄭皓澤
HaoTse
sysprog21
mergesort_concurrent