版本 14ec18bf64e3a8fb3f42bd505df59486e0a47590
Changes from 14ec18bf64e3a8fb3f42bd505df59486e0a47590 to f2819476a3a63855e11c11bf03758e4359633b86
---
title: yenWu (吳彥寬)
categories: User
...
簡介
====
- 成功大學數學系104級**倒數第四名**畢業(2012 ~ 2015)
- 成功大學資訊工程所106級(2016 ~ 2017)
工作經歷
========
- VMFive 實習生 - APP Streaming Team/ [成果發表](https://docs.google.com/presentation/d/1a_esASu_JIJclUUtgc-xYWOVn4UzZIskn5vpBHua1WU/edit?usp=sharing)
開放原始碼專案參與
=================
- [apitrace](https://github.com/apitrace/apitrace)
- seL4 microkernel [[p1](https://github.com/SEL4PROJ/sel4-tutorials),[p2](https://github.com/seL4/sel4test-manifest)]
- [mini-arm-os](https://github.com/jserv/mini-arm-os)
- [threadpool](https://github.com/mbrossard/threadpool)
- [phonebook-concurrency](https://github.com/sysprog21/phonebook-concurrent)
競賽成果
========
- [2016 NVIDIA Taiwan Embedded Vision Smart Robot Challenge](https://www.nvidia.com.tw/content/apac/event/tw/embedded-robotic-challenge/info.html)
* 決賽/ [作品ART(Awesome Robot Team)](https://github.com/AwesomeRobotTeam/ART)/ [開發筆記](https://awesomerobotteam.hackpad.com/Awesome-Robot-Team--O8LqPFZxHhe)
貢獻研討會筆記
==============
- 新竹碼農聚會
- 自幹IoT 專屬OS-HyperC/ [筆記](https://embedded2016.hackpad.com/-IoT-OS-HyperC-j1Y2KKWoTAh)
- Meet-cute between eBPF and Kernel Tracing/ [筆記](https://my_projects.hackpad.com/eBPS-and-kernel-tracing-8NGHiyzaXfF)
- 2016台灣資料科學愛好者年會
- 視覺訊息處理和深度學習應用/ [筆記](https://my_projects.hackpad.com/5QoHdrP2MJK)
- Mediatek 資深工程師演講
- SIMD Programing Introduction/ [筆記](https://hackmd.io/KwEwhiIKbFC0AGAbARgBxwCzgOxzMJsHAMYrIIBGaChJJQA=)
學術影片分享
============
- Taiwan Linux Kernel Hacker
- "Introduction of the BSD Packet Filter"/ [影片](https://youtu.be/hDayCHHA3cc?t=3720)/ [ppt](https://hackmd.io/CYIw7AzArAxiCMBaADAJgqxAWAnGAbIgBwCGJUi+URIy8e88+AZkA===)
- Paper Study
- “L4 microkernels: The lessons from 20 years of research and deployment”/ [影片](https://www.youtube.com/watch?v=oPjwyykO1bI)/ [ppt](https://docs.google.com/presentation/d/1UKXffKIGocUuEPWnqNRGuKZPgmIZXga0m9vL_u_p6iU/edit?usp=sharing)
- 課堂分享
- SIMD introduction/ [ppt](https://hackmd.io/BwFgnATArARgbFAtBOAGAjIkB2AhpsVAZiMXQBMJsJzUIAzIuAYyA===)
- seL4 introduction: Capability--based Access Model/ [影片](https://www.youtube.com/watch?v=x3P6Y6VO0UI&t=246s)/ [筆記](https://hackmd.io/OwUwLADAJgnMwFoQGYBmBDBYwA4BGCOAjAEwwIl46qq5Qh4BsOQA#sel4-microkernel)
(2016_春季班)作業及筆記
=======================
那時是旁聽生,而且沒有做期末專題,專心準備 Nvidia比賽
* [HW1](http://wiki.csie.ncku.edu.tw/embedded/2016q1h1) / [開發紀錄(phonebook)](https://embedded2016.hackpad.com/2016q1-Homework-1--qWv3pIKGt12) / [程式碼](https://github.com/c14006078/phonebook)
* 改善phonebook查詢的效能,中間使用了`改變資料結構` `Hash function`,並使用`perf`做效能偵,`gplot`建制清楚的圖片
* [HW2(a)](http://wiki.csie.ncku.edu.tw/embedded/2016q1h2)/ [開發紀錄(A)(raytracing)](https://embedded2016.hackpad.com/2016q1-Homework-2A-wOu40KzMaIP) / [程式碼(A)](https://embedded2016.hackpad.com/2016q1-Homework-2A-wOu40KzMaIP)
* 改善raytracing程式的效能,使用 `loop unrolling` `inline function` `SIMD` `Mult-threads`,並使用`gprof` 檢查那一個function用最多時間,以及使用`gdb` 抓出breakpoint,並且打敗compiler將最佳效能-O3的效能
* [HW3_server-framework](http://wiki.csie.ncku.edu.tw/embedded/2016q1h3)/ [開發紀錄(server-framework)](https://embedded2016.hackpad.com/2016q1-Homework-3-hI6do22ag3w)/ [程式碼](https://github.com/c14006078/server-framework/commits/master)
* 改善server的效能,讓每秒可以 reply 的 request 增加,使用大量的function pointer,還學習到 `signal`的用法,和`pipe`的process之間的溝通,目前最卡關的地方是將 `blocking I/O`改寫成`lock-free`
(2016_秋季班)作業及筆記
======================
* [HW1(a)](https://hackmd.io/s/S1RVdgza)/ [開發紀錄(phonebook)](https://hackmd.io/MYNgnCDsCsYEwFoAmInQQFngMwQQwCM5dI88BmAU3LnIEYlsAGIA) / [github](https://github.com/yenWu/phonebook-1) / [youtube link(update 2016/10/1)](https://www.youtube.com/watch?v=sWtWslsr4Ac&feature=youtu.be)
* 這次我挑戰了如何降低 append() time,也就是建立時間,我這次使用到了`mmap`的技術來降低讀取大量資料的時間,很有趣的,做完後發現建立的時間居然可以快過查詢的時間XD,當然,之後又使用了muti-thread來減少搜尋時間,並且意外地開啟了新的課程作業,也就是 phonebook-concurrency。
* [HW1(d)](https://hackmd.io/s/B1LHefQ6)/ [開發紀錄(clz)](https://hackmd.io/CwMwxgTA7AplIFoCsAOGATBoBGUEE5UwEYBDABnIDYBmGqkKbJIA) / [github](https://github.com/yenWu/clz-tests) / [youtube link]
* 這次的作業是 Count Leading Zeros (clz),我實作了`recursive`, `iterative`, `binary-search`, `byte-shift` and `Harley's` version,而這個作業最有趣的就是 `Harley's algorithm`,他像是一個填空題,我的解題絲路很有趣XD,我先嘗試假設這個演算法是正確的,那就是我代入`0x4`,`0x5`,...,`0x7`出現的答案都應該要是正確的,也就是說這個演算法有辦法,把他們都變成一模一樣,所以那之後再去算答案當然會一樣樓XD,而這個算法在我現在做的 RTOS schedule 設計上也有很大的起發,而 clz 也有使用到,在做之前根本想不到的。
* [HW2](https://hackmd.io/s/rJsgh0na)/ [開發紀錄(phonebook-concurrent)](https://hackmd.io/GYYwhg7AzAnADAJgLRQEYIBxICwYwUyRgBMRikRsIBGEOfMYDAVmKA==) / [github](https://github.com/yenWu/phonebook-concurrent) / [youtube link]
* 這作業的原始範本就是我的 phonebook,而這次作業的主題是`refactor`和`threadpool`,而說到`refactor`就真的非常對不起了...,因為我在寫`phonebook`時很多變數、function 命名都很隨便,幾乎沒什麼註解,連我自己都改得很辛苦...,於是我趕緊在拍另一部影片我把的 flow都講出來[youtube](https://www.youtube.com/watch?v=sWtWslsr4Ac&feature=youtu.be),而在`threadpool`設計時,也順便貢獻了參考的`mbrossard/threadpool`。
* [HW3(b)](https://hackmd.io/s/ry7eqDEC)/ [開發紀錄(software-pipelining)](https://hackmd.io/EYMwbAhgDArAnAFgLQmGATEhB2AppiCAZhCQBMBGXGBGXCkCMEIA) / [github](https://github.com/yenWu/prefetcher) / [youtube link](https://www.youtube.com/watch?v=Qp6b2BMVLN4)
* 這個作業的主題是`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 that `raw counter`, `different perf tools` ...
* 這個作業我也將我的很多問題帶去給,`Champ`學長(第一屆),並統整了一份資訊,並在課堂上以演講的方式分享給同學們,[SIMD introduction](https://hackmd.io/BwFgnATArARgbFAtBOAGAjIkB2AhpsVAZiMXQBMJsJzUIAzIuAYyA===)
* 分組
* [HW3(a)](https://hackmd.io/s/rJ-GWtJ0)/ [開發紀錄(mergesort-concurrent)](https://hackmd.io/IwIwHAJgpgTGwFoCGBWAxmBAWGwYIE480EBmMANjSgDM1SB2ABiKA===)/ [github](https://github.com/c14006078/mergesort-concurrent) / [youtube link](https://www.youtube.com/watch?v=zRKgubJHwqM&feature=youtu.be)
* 這個作業我們被指派要改變`data structure`,使得 `list`的 `element`能夠在 `insert`和 `delete`時能夠更 flexible,這其中我們嘗試建構出之前老師所謂的效能分析,所以從基礎建設跟自動化跑數據,再來是用 `doxygen`來分析 code的組成,最後我們有使用`Atomic`來包裝變數,並達到小部分`lock-free`的實作,來改善 `threadpool`,至於 `data structure`的部分,我們嘗試使用 `binary tree`的架構,但這樣連 mergesort都必須要重新實作,這是尚未完成的部分。
* [HW4(a)](https://hackmd.io/s/SJ7AZJv1e) / [開發紀錄(jit-compiler)](https://hackmd.io/CwDg7AxghgbDUFoCcBWYSHAhYCoiQEYEBTYAJhHIAZtySoog) / [github](https://github.com/HahaSula/jit-construct/tree/master) / youtube
* 這個作業是要改善`brainf**k`的效能,方法有`interpreter`,`compiler`,`just-in-time compiler`,而這也是我第一次接觸這兩個 optimize的方式,從 `turing machine`的觀點切入 `brainf**k`,並在這途中思考`brainf**k`的開發流程,最後藉由這個點切入優化code的部分。
* Final Project / [開發紀錄(F9 microkernel & ARM hypervisor)](https://hackmd.io/OwUwLADAJgnMwFoQGYBmBDBYwA4BGCOAjAEwwIl46qq5Qh4BsOQA)
* 在這個 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](https://www.youtube.com/watch?v=x3P6Y6VO0UI&t=246s)/ [筆記](https://hackmd.io/OwUwLADAJgnMwFoQGYBmBDBYwA4BGCOAjAEwwIl46qq5Qh4BsOQA#sel4-microkernel)
* [W1-QA](https://hackmd.io/s/Hka2UE8a)/[筆記](https://hackmd.io/BwZgrCAMkIYwtANgMa3gFgEwBNj1MHpgOyYQwCmImAjMcEA=)
* 體會到 `recursive`的魅力和 `xor`的妙用,真的很好用,`recursive`就用在我實作`merge-sort`上,`xor`就帶領我遇見`xor linked list`,還有在特別情況下 stack會爆掉的問題。
* [W2-QA](https://hackmd.io/s/Sk29RMbC)/[github](https://github.com/yenWu/sysprog2016q3/tree/master/W2)
* 由於我實在想不到要怎麼將 bubble-sort 轉成 merge-sort,注意這邊使用的是 linklist 而且在交換時要將整個 node做交換,而這會用在 concurrency merge-sort上有非常好的效果,由於我真的不知道該怎麼把改過去,所以我直接重新刻一個,並且用到 W1-QA裡老師說的技巧,讓整段程式碼非常的精簡、優雅,recursive 實在太神啦!
(秋季班)自我評量分數 (1 到 10 級分)
=================================
* 我給自己 10 級分。評分標準不是做得看作業,而是看收穫,分別為目標、分享、GUTS,而且我對得起大家。
* 我給自己 10 級分。評分標準不是做得看作業,而是看收穫,分別是目標、分享、GUTS。
* 成長這些話就不說了,因為只要撐過去就是你的,我認為讓我深刻改變的不是這個。
* 在這半年時間,我看到了自己的目標,和真正有興趣的 Robotic,很高興老師給我的訓練,讓我這個爛泥牆不上牆的小廢廢,面對自己所欠缺的,找到實現夢想的路徑。
* 我知道分享是必要的,因為我知道我們要面對的挑戰是非常艱難的,我需要更多能夠討論能夠互相幫助的夥伴,希望大家能夠多分享,因為我們真正要挑戰的是一群很堅強又很團結的一群對手。
* 我知道分享是必要的,因為我知道我們要面對的挑戰是非常艱難的,我需要更多能夠討論能夠互相幫助的夥伴,希望大家能夠多分享,因為我們真正要挑戰的是一群很堅強又很團結的對手。
* 說到 GUTS 這件事,就要說到這學期期末,我本來有修這堂課,計算機網路與架構,期末作業是架設 DNS Server,而這也是第一次有勇氣跟老師說我想要自幹一個,我想我有勇氣面對挑戰。
聯絡資訊
========
e-mail: `c14006078@gmail.com`
Github: [yenWu](https://github.com/yenWu)
Linkin: [Yen-Kuan Wu](https://www.linkedin.com/in/yen-kuan-wu-207245111?trk=hp-identity-name)