# 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 :::
×
Sign in
Email
Password
Forgot password
or
Sign in via Google
Sign in via Facebook
Sign in via X(Twitter)
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
Continue with a different method
New to HackMD?
Sign up
By signing in, you agree to our
terms of service
.