# 2017 年春季班第一次分組表 :::info 主講人: [jserv](http://wiki.csie.ncku.edu.tw/User/jserv) / 課程討論區: [2017 年系統軟體課程](https://www.facebook.com/groups/system.software2017/search/?query=week5) :mega: 返回「[作業系統設計與實作](http://wiki.csie.ncku.edu.tw/sysprog/schedule)」課程進度表 ::: ## Policy * 選修課程的學生 **2 人**[color=red] 一組 * 日後會依據作業和報告份量調整分組 * 旁聽的學生可自由選擇加入 **既有的** 組別 * 旁聽學生的標注方式為「括號後方緊接著`#`」,如 ==`lonely (梅仁耀)#`== * 每週更新共筆並準備進度報告影片 * 授課教師跟學生一同分組,也是每週做報告 * 示範: [春季班分組和工作清單](https://embedded2016.hackpad.com/2016-c9i9qW6eGpb) ## 分組名單 (GitHub 帳號 + 中文姓名; 中間用「空白」區隔) --- ### Team 1 - [ ]yangyang95 (翁瑞陽) - [ ]changyuanhua (張圜華) * Task: 比照 [B06: software-pipelining](https://hackmd.io/s/rks62p1sl) 要求,需要善用 perf stat 的 raw counter 命令。 * [開發紀錄(software-pipelining)](https://hackmd.io/s/S1fZ1m6pe) / [github](https://github.com/yangyang95/prefetcher) / [youtube](https://youtu.be/xTYonYcB4N0) (13min) :::info 參照到 Wikipedia 時,一律用英文版本; 缺乏足夠的效能分析; 錄影字體太小,應該先切換到瀏覽器的 fullscreen 模式; [May 2] 洽詢 champ 學長 ::: ### Team 2 - [ ]tina0405 (許雅雯) - [ ]heathcliffYang (楊惟晶) * Task: 比照 [B08: mergesort-concurrent](https://hackmd.io/s/B1xV_p_jl) 要求,引入 [concurrent-ll](https://github.com/jserv/concurrent-ll) (concurrent linked-list 實作) 製圖分析 scalability,探討原有的 linked list + thread pool 設計缺失和 lock-free 演算法設計。 * [開發紀錄(mergesort-concurrent)](https://hackmd.io/s/S1Zrwcopx) / [github](https://github.com/heathcliffYang/mergesort-concurrent) / [youtube](https://www.youtube.com/watch?v=f_BuLTfwJZQ&list=PLAp9YQsljMlHoYIhL51426GTsvHrR0iFg) :::info 注意螢幕字體,目前過小; 注意音量的一致性; 錄影分段過多,請用合併; Part 3 / 1:30: memory 的台灣慣用翻譯是「記憶體」,不是「內存」; Part 7 / 1:03: atomics 描述不精確; Part 8 / 1:12: full barrier 為何? Part 8 / 3:19: 如何解釋 add 的時間成本? ::: ### Team 3 - [ ]jack81306 (林宸慶) - [ ]peterting (丁榮主) * Task: 比照 [B09: microarch](https://hackmd.io/s/r1Olsp_og),不只解題更要闡述相關的背景知識,探討各項限制中,如何開發對應的程式碼。 * [開發紀錄(microarch)](https://hackmd.io/s/SJCDl8mAl) / [github]() / [youtube](https://www.youtube.com/watch?v=Y8j8cek9WEs) (20min) :::info 避免使用 bandicam,多用開放原始碼解決方案; data flow [May 2] 移轉到 Team 10 ::: ### Team 4 - [ ]ierosodin (許耕福) - [ ]stanleytazi (蔡玉倫)# - [ ]refleex (李孟儒) * Task: 比照 [B07: phonebook-concurrent](https://hackmd.io/s/rkOExTOoe) 要求,分析 SuperMalloc 對於多執行緒程式的效能影響,延續 [針對多執行緒環境設計的 Memory allocator](https://hackmd.io/s/HkICAjeJg)。 * [開發紀錄(SuperMalloc)](https://hackmd.io/s/S1X1it3Tl) / [github](https://github.com/ierosodin/phonebook-concurrent.git) / [youtube](https://www.youtube.com/watch?v=fqxJP83R_S8&list=PLYcd6-bJ96RtxT-JzfHssQiZwulF3DevM&index=1) ### Team 5 - [ ]zhanyangch (陳展揚) - [ ]hunng (郭泓梃) * Task: 比照 [B02: raytracing](https://hackmd.io/s/HyuBWDwYl) 要求,以 SIMD 改善 math-toolkit.h 定義的若干數學操作函式,進而推廣到整個光線追蹤的演算法 (可在不影響正確性的前提下,將原本的實作替換)。 * [開發紀錄(raytracing)](https://hackmd.io/s/HkifAKiae#) / [github](https://github.com/zhanyangch/raytracing-1) / [youtube](https://www.youtube.com/watch?v=WEK_3FlDB1U) (12min) :::info 顯示效果佳,程式碼請繼續 [May 2] ==new task==: 參考 Joshua Barczak 的 [SIMD Raytracing 實作](http://www.joshbarczak.com/blog/?p=787),改寫原有的程式碼,但是 model 應該和 [B02: raytracing](https://hackmd.io/s/HyuBWDwYl) 一致 ::: ### Team 6 - [ ] vtim9907 (徐偉庭) - [ ] henry0929016816(林彥亨) * Task: 比照 [B10: matrix](https://hackmd.io/s/rkrrpHm2e) 要求,需要一併考慮 data alignment 議題、留意記憶體存取機制 (避免 leak 和錯誤操作,善用 [AddressSanitizer](https://github.com/google/sanitizers))。 * [開發紀錄(matrix)](https://hackmd.io/s/r11wlGWRe) / [github]() / [youtube](https://www.youtube.com/watch?v=OqU6PJHtZ4c&t=9s) (21 min) / [youtube2](https://www.youtube.com/watch?v=wp7RvK_A7uI) (26 min) :::info 錄影字體太小,應該先切換到瀏覽器的 fullscreen 模式; 4:35: 延伸閱讀 [Data Alignment](http://www.gamasutra.com/view/feature/3942/data_alignment_part_1.php?print=1) 5:45: 執行 `gdb` 時,加上 `-q` 參數以抑制冗長的授權聲明輸出; 10:53: 如何解釋程式執行結果? 25:58: data alignment 的衝擊為何? [May 2] ==new task==: 擴充 [MathEX](https://github.com/jserv/MathEX),設計高效能的數學表示式運算器,參考 [muparserSSE - A Math Expression Compiler](http://beltoforion.de/article.php?a=muparsersse&p=implementation) ::: ### Team 7 - [ ] zmke (柯宗銘) - [ ] petermouse (林軒毅) - [ ] 0xff07 (林有容)# * Task: Task: 比照 [B08: mergesort-concurrent](https://hackmd.io/s/B1xV_p_jl) 要求,研究 thread pool 管理 worker thread 的實做,引入 lock-free 演算法。參考 [A Pragmatic Implementation of Non-Blocking Linked-Lists](https://www.cl.cam.ac.uk/research/srg/netos/papers/2001-caslists.pdf) * [開發紀錄(mergesort-concurrent)](https://hackmd.io/s/BkZnq2gAg#) / [github](https://github.com/zmke/mergesort-concurrent) / [youtube](https://youtu.be/_YgoaNHSzmU) (6 min)/ [youtube 2](https://youtu.be/9UMsqhpohQA) (10 min) :::info 2:47 補上 tqueue_{push,pop} 的實作示意圖; 4:47 描述整合時期所遇到的問題時,應一併探討如何修改 (patch); 缺乏效能分析 5:48: 是否考慮到 ABA problem? [May 2] 併入 Team 2 ::: ### Team 8 - [ ] Cayonliow (廖其忻) - [ ] king1224 (洪正皇) - [ ] csielee (李東霖)# * Task: 比照 [B07: phonebook-concurrent](https://hackmd.io/s/rkOExTOoe) 要求,實作出刪除 (remove) 特定資料的功能,並且分析 concurrent insert/delete 對效能的影響。留意 race condition 和正確性議題。 * [開發紀錄(phonebook-concurrent)](https://hackmd.io/s/BycMwEs6l) / [github](https://github.com/sysprog2017team8/phonebook-concurrent) / [youtube](https://www.youtube.com/watch?v=yPdjzWUlizk) (11 min) / [youtube 2](https://www.youtube.com/watch?v=F9hKspTdSQ0&feature=youtu.be) (5 min) :::info 改用 GraphViz 製圖; 08:51 刪除的時間計算不精準/不正確; 理工人不要隨便說「好像」; 0:5 是 "concurrent",不是 "concurrency"; 3:59: 時間刻度改為 ms,不要用 sec; 4:09: 用統計模型來表示 `append` 的時間成本; 4:39: 需要更好的正確性檢驗機制; [May 2] 移轉到 Team 4 ::: ### Team 9 - [ ] donbader(馮禹德) - [ ] yanang(陳彥安) * Task: 比照 [B03: compute-pi](https://hackmd.io/s/HkiJpDPtx) 要求,特別留意測量時間的機制 (Wall-clock time vs. CPU time) * [開發紀錄(compute-pi)](https://hackmd.io/s/r1aZMZa6e#) / [github](https://github.com/donbader/compute-pi) / [youtube](https://youtu.be/2o8dcBGWUQk) (18min) :::info 錄影字體太小,應該先切換到瀏覽器的 fullscreen 模式; 程式碼列表的字體也過小; ns 中文翻譯是「奈秒」; [May 2] 併入 Team 5 ::: ### Team 10 - [ ] laochanlam(劉俊林) - [ ] etc276(洪得揚) * Task: 延伸 [B04: clz](https://hackmd.io/s/ry1u0uDFg) 要求,探討 [carryless multiplication](https://bitmath.blogspot.tw/2013/05/carryless-multiplicative-inverse.html) 演算法和實作 (需要考慮到 Intel 延伸指令集),介紹密碼學的應用 * [開發紀錄(clz)](https://hackmd.io/s/HkQfalnpe) / [github](https://github.com/laochanlam/AES-GCM) / [youtube](https://www.youtube.com/watch?v=UWXQd6eD38E) (17min) :::info 錄影的字體太小, 注意 Galois 的發音; 需要考慮數值分佈 ::: ### Team 11 - [ ] illusion030(李泓哲) - [ ] ryanwang522(王韻華) * Task: 比照 [B07: phonebook-concurrent](https://hackmd.io/s/rkOExTOoe) 要求,嘗試重構 (refactor) 給定的程式碼,使得程式更容易閱讀和維護。不只是在共筆上用文字提出良性詳盡的批評,也該反映在程式碼的變革 * [開發紀錄(phonebook-concurrent)](https://hackmd.io/s/rk5dwXmAx) / [github](https://github.com/ryanwang522/phonebook-concurrent) / [youtube](https://youtu.be/gB8pyki8SnE) (15 min) [ youtube2](https://youtu.be/iznlSoQG4kE) (13min) :::info 避免用雙欄 (both) 模式,改用全螢幕瀏覽; 畫面偶有閃爍; 程式碼呈現用白底黑字; 重構前應該全面指出既有問題; 使用 Visual Studio Core 很潮! 2:01: 學習 Linux 核心 [list_for_each_entry](https://stackoverflow.com/questions/15754236/how-do-i-use-the-list-for-each-macro-in-list-h-from-the-linux-kernel-properly) 的技巧; 3:20: `localPtr` 的命名過於累贅; 3:41: 需要說明如何分離 interface 和 implementation,以及後續如何做 polymorphism; 4:47: `findLastName` 和 `removeByLastName` 命名不夠簡潔,只要能找到明確的人名,就可用 `remove` 移除,搜尋方法可能很多種 (如透過 regex [regular expression]); `checkAPI` 的存在是否必要? 5:29: `optProvider` 的命名不直覺; 5:39: 個別 phonebook 實作無可避免伴隨著各自的 structure,該如何用一致的 interface 去操作? 6:02: 與其用編譯時期挑選實作,不如在執行時期。還能因此設計更好的 benchmark suite; 6:39: `main` 函式應該簡化,將呼叫 interface 對應實作和效能比較的部分獨立出來; 6:57: 同前面討論,這部分的 abstraction 設計不佳; 8:53: 共用的程式碼如 _Generic 的處理,應該獨立出新的檔案; 9:52: 檔名和 build rules 應調整,將可共用的程式名稱放到 `SRCS_common`,個別的 phonebook 實作可用 `impl_naive.c`, `impl_hash.c`, `impl_mempool.c` 去區分; 10:49: 如何追蹤已配置的資源 (resources) 呢?該如何避免 leak 或者 shared memory 沒釋放的狀況? ::: ### Team 12 - [ ] baimao8437(石碩亨) - [ ] xdennisx(徐銘宏) * Task: 比照 [B08: mergesort-concurrent](https://hackmd.io/s/B1xV_p_jl) 要求,分析 mutex contention,引入更多工具 (如 ThreadSanitizer) 以理解原有程式的問題 * [開發紀錄(mergesort-concurrent)](https://hackmd.io/s/BkI3vnS0l) / [github](https://github.com/baimao8437/mergesort-concurrent) / [youtube](https://youtu.be/lmZVWZ-fQgA) (8 min) :::info 編譯時應加上 `-g` 選項; 減少使用 Sublime 這類私有軟體,多用開放原始碼解決方案; 缺乏更深入的效能分析 (lock contention) [May 2] ==new task==: 延續上學期 [MapReduce](https://hackmd.io/s/Hkb-lXkyg) 的成果,強化效能和應用案例 ::: ### Team 13 - [ ] twzjwang (王贊鈞) - [ ] rayleigh0407 (戴子祐) * Task: 比照 [B10: matrix](https://hackmd.io/s/rkrrpHm2e) 要求,完整實作多種加速矩陣乘法的演算法,伴隨相關的 SIMD 改善機制 * [開發紀錄(matrix)](https://hackmd.io/s/BkTL8nWRl) / [github](https://github.com/twzjwang/matrix_oo) / [youtube](https://www.youtube.com/watch?v=EmDuuLygwHY) (10 min) / [youtube2](https://www.youtube.com/watch?v=RRUW3Az_KIw) (6 min) :::info YouTube 網址用較短的版本,如 `youtube.com/watch?v=EmDuuLygwHY`; 螢幕字體太小,請調整; 用軟體去除背景噪音,如 [Audacity](http://www.audacityteam.org/); 5:17: 在工程中,如何控制 error rate 並取捨呢? [May 2] 移轉到 Team 6 ::: ### Team 14 - [ ] hugikun999 (何俊逸) - [ ] claaaaassic (黃經典) - [ ] Weinux (黃士瑋)# * Task: 比照 [B01: phonebook](https://hackmd.io/s/rJYD4UPKe),支援 fuzzy search,允許搜尋 lastName 時,不用精準打出正確的寫法。指出原有 dataset 的問題 (需要有工程分析,拿出統計學) 並改進。 * [開發紀錄(phonebook)](https://hackmd.io/IbAc4MwJgRgWlAdgMYDY4BYao3ARsDKHMHgMzJ4Cs1qiApgCZA==) / [github](https://github.com/claaaaassic/phonebook) / [youtube 1](https://www.youtube.com/watch?v=1gwdjOkMNdk) / [youtube 2](https://youtu.be/SLcDNShJijc) / [youtube 3](https://youtu.be/a7B4QSA41Hw) :::info 螢幕字體太小,請調整; 用軟體去除背景噪音,如 [Audacity](http://www.audacityteam.org/); 合併影片; Part 1 / 8:44: 如何避免 sequential access 呢?能否透過多執行緒加速?又,如果資料是會持續變動 (考慮到 enqueue 和 dequeue),該如何調整? 13:08: 在多執行緒環境中,如何透過 lock-free memory pool 來改善操作?參考: [How to write a thread-safe and efficient, lock-free memory allocator in C?](https://stackoverflow.com/questions/1995871/how-to-write-a-thread-safe-and-efficient-lock-free-memory-allocator-in-c) 和 [Allocating Memory in a Lock-Free Manne](http://www.cse.chalmers.se/~tsigas/papers/Allocating%20Memory%20in%20a%20Lock-Free%20Manner%20-%20ESA05.pdf) 13:30: fuzzy 音標拼音: [f'ʌzi]; 18:30: 預期達到怎樣的效果呢?如何整合呢? Part 2 / 3:40: 考慮到 first_name 和 last_name 的組合,該怎樣設計有效的資料結構呢? Part 3 / 2:14: 命名方式應調整; `djb2` Part 3 / 3:48: 為何不用 Part 2 的資料來測試; [May 2] 合併到 Team 11 ::: ### Team 15 - [ ] chenweiii (魏禛) - [ ] Sean1127 (鄭宇軒) - [ ] paul5566 (陳柏霖)# - [ ] Lukechin (呂科進)# * Task: 研讀 [Toward Concurrency](https://hackmd.io/s/Skh_AaVix),整理和修正內容描述 (伴隨更多程式範例) * [開發紀錄(Toward Concurrency 2.0)](https://hackmd.io/s/Sy1x0XiAe) :::info [May 2] 合併到 Team 12 :::