yenWu (吳彥寬)
簡介
- 成功大學數學系104級倒數第四名畢業(2012 ~ 2015)
- 成功大學資訊工程所106級(2016 ~ 2017)
工作經歷
- VMFive 實習生 - APP Streaming Team/ 成果發表
開放原始碼專案參與
- apitrace
- seL4 microkernel [p1,p2]
- mini-arm-os
- threadpool
- phonebook-concurrency
競賽成果
貢獻研討會筆記
學術影片分享
- Taiwan Linux Kernel Hacker
- Paper Study
- 課堂分享
(2016_春季班)作業及筆記
那時是旁聽生,而且沒有做期末專題,專心準備 Nvidia比賽
- HW1 / 開發紀錄(phonebook) / 程式碼
- 改善phonebook查詢的效能,中間使用了
改變資料結構
Hash function
,並使用perf
做效能偵,gplot
建制清楚的圖片
- 改善phonebook查詢的效能,中間使用了
- HW2(a)/ 開發紀錄(A)(raytracing) / 程式碼(A)
- 改善raytracing程式的效能,使用
loop unrolling
inline function
SIMD
Mult-threads
,並使用gprof
檢查那一個function用最多時間,以及使用gdb
抓出breakpoint,並且打敗compiler將最佳效能-O3的效能
- 改善raytracing程式的效能,使用
- HW3_server-framework/ 開發紀錄(server-framework)/ 程式碼
- 改善server的效能,讓每秒可以 reply 的 request 增加,使用大量的function pointer,還學習到
signal
的用法,和pipe
的process之間的溝通,目前最卡關的地方是將blocking I/O
改寫成lock-free
- 改善server的效能,讓每秒可以 reply 的 request 增加,使用大量的function pointer,還學習到
(2016_秋季班)作業及筆記
- HW1(a)/ 開發紀錄(phonebook) / github / youtube link(update 2016/10/1)
- 這次我挑戰了如何降低 append() time,也就是建立時間,我這次使用到了
mmap
的技術來降低讀取大量資料的時間,很有趣的,做完後發現建立的時間居然可以快過查詢的時間XD,當然,之後又使用了muti-thread來減少搜尋時間,並且意外地開啟了新的課程作業,也就是 phonebook-concurrency。
- 這次我挑戰了如何降低 append() time,也就是建立時間,我這次使用到了
- HW1(d)/ 開發紀錄(clz) / github / [youtube link]
- 這次的作業是 Count Leading Zeros (clz),我實作了
recursive
,iterative
,binary-search
,byte-shift
andHarley's
version,而這個作業最有趣的就是Harley's algorithm
,他像是一個填空題,我的解題絲路很有趣XD,我先嘗試假設這個演算法是正確的,那就是我代入0x4
,0x5
,…,0x7
出現的答案都應該要是正確的,也就是說這個演算法有辦法,把他們都變成一模一樣,所以那之後再去算答案當然會一樣樓XD,而這個算法在我現在做的 RTOS schedule 設計上也有很大的起發,而 clz 也有使用到,在做之前根本想不到的。
- 這次的作業是 Count Leading Zeros (clz),我實作了
- HW2/ 開發紀錄(phonebook-concurrent) / github / [youtube link]
- 這作業的原始範本就是我的 phonebook,而這次作業的主題是
refactor
和threadpool
,而說到refactor
就真的非常對不起了…,因為我在寫phonebook
時很多變數、function 命名都很隨便,幾乎沒什麼註解,連我自己都改得很辛苦…,於是我趕緊在拍另一部影片我把的 flow都講出來youtube,而在threadpool
設計時,也順便貢獻了參考的mbrossard/threadpool
。
- 這作業的原始範本就是我的 phonebook,而這次作業的主題是
- HW3(b)/ 開發紀錄(software-pipelining) / github / youtube link
- 這個作業的主題是
software-pipeline
和SIMD
,讓我了解到了原來 software也會有 pipeline,而這個 pipeline的方法別無他法,就是你要非常熟悉硬體設計,而其中的論文選讀是我當時讀過最長的論文(27p,目前看到最長的是 formal verification的論文 83p),這篇論文從計算機結構來分析hardware prefetch
,software prefetch
的使用時機和效率,令人驚呀的是只要做足 pipeline,程式的效能居然還可以再上升 1倍,miracle,再來就是SIMD
由於他是一次要fetch大量的data,所以他在software-pipeline
有莫大的效果,另外這個作業最大的收穫就是得到很多大神的幫助,大家給我的方法我都有去 try try看,而讓我真的學到非常非常多,something thatraw counter
,different perf tools
… - 這個作業我也將我的很多問題帶去給,
Champ
學長(第一屆),並統整了一份資訊,並在課堂上以演講的方式分享給同學們,SIMD introduction
- 這個作業的主題是
- 分組
- HW3(a)/ 開發紀錄(mergesort-concurrent)/ github / youtube link
- 這個作業我們被指派要改變
data structure
,使得list
的element
能夠在insert
和delete
時能夠更 flexible,這其中我們嘗試建構出之前老師所謂的效能分析,所以從基礎建設跟自動化跑數據,再來是用doxygen
來分析 code的組成,最後我們有使用Atomic
來包裝變數,並達到小部分lock-free
的實作,來改善threadpool
,至於data structure
的部分,我們嘗試使用binary tree
的架構,但這樣連 mergesort都必須要重新實作,這是尚未完成的部分。
- 這個作業我們被指派要改變
- HW4(a) / 開發紀錄(jit-compiler) / github / youtube
- 這個作業是要改善
brainf**k
的效能,方法有interpreter
,compiler
,just-in-time compiler
,而這也是我第一次接觸這兩個 optimize的方式,從turing machine
的觀點切入brainf**k
,並在這途中思考brainf**k
的開發流程,最後藉由這個點切入優化code的部分。
- 這個作業是要改善
- Final Project / 開發紀錄(F9 microkernel & ARM hypervisor)
- 在這個 Project裡,我被分配從
codezero
->f9-kernel
->seL4 microkernel
->bitsec
->mini-arm-os
->pico
->SST_ARM
->rtenv-plus
一路研究過來,就為了能夠真正開發一個 OS,途中我已經被程式面對自己數次,破英文、闡述能力太爛、效率、學習不夠精實、…,我也體會到什麼叫看 document看到死,這是我覺得進步最多的時刻,也是我覺得最辛苦的時刻,同時也是我覺得我可以實現第一次跟老師相遇時的目標,開發一個 OS。 - 我也對 sel4 的 capability model 做了一個解說,seL4 introduction: Capability–based Access Model/ 筆記
- 在這個 Project裡,我被分配從
- HW3(a)/ 開發紀錄(mergesort-concurrent)/ github / youtube link
- W1-QA/筆記
- 體會到
recursive
的魅力和xor
的妙用,真的很好用,recursive
就用在我實作merge-sort
上,xor
就帶領我遇見xor linked list
,還有在特別情況下 stack會爆掉的問題。
- 體會到
- W2-QA/github
- 由於我實在想不到要怎麼將 bubble-sort 轉成 merge-sort,注意這邊使用的是 linklist 而且在交換時要將整個 node做交換,而這會用在 concurrency merge-sort上有非常好的效果,由於我真的不知道該怎麼把改過去,所以我直接重新刻一個,並且用到 W1-QA裡老師說的技巧,讓整段程式碼非常的精簡、優雅,recursive 實在太神啦!
(秋季班)自我評量分數 (1 到 10 級分)
- 我給自己 10 級分。評分標準不是做得看作業,而是看收穫,分別是目標、分享、GUTS。
- 成長這些話就不說了,因為只要撐過去就是你的,我認為讓我深刻改變的不是這個。
- 在這半年時間,我看到了自己的目標,和真正有興趣的 Robotic,很高興老師給我的訓練,讓我這個爛泥牆不上牆的小廢廢,面對自己所欠缺的,找到實現夢想的路徑。
- 我知道分享是必要的,因為我知道我們要面對的挑戰是非常艱難的,我需要更多能夠討論能夠互相幫助的夥伴,希望大家能夠多分享,因為我們真正要挑戰的是一群很堅強又很團結的對手。
- 說到 GUTS 這件事,就要說到這學期期末,我本來有修這堂課,計算機網路與架構,期末作業是架設 DNS Server,而這也是第一次有勇氣跟老師說我想要自幹一個,我想我有勇氣面對挑戰。
聯絡資訊
e-mail: c14006078@gmail.com
Github: yenWu
Linkin: Yen-Kuan Wu