contents
到頭來,最好的平行就是不交流,最好的進展就是不溝通。-Antisocial Parallelism
崩壞季節
在學期後半段,「四月是你的謊言,五月是否要換題目,六月是否要重新來過」聽到這些是否能明白我在說什麼呢?沒錯,就是傳奇的碩二崩壞日子,若是以畢業導向來讀研究所,花個一年或一年半修課,剩餘時間還要產出論文,想而知壓力是如此地大,有些領域甚至要實作一個系統,那麼忙碌程度就明顯不同,學長們崩壞的日子越來越近。
- [問卦] 實驗室學長為什麼都不會回家 ? https://www.ptt.cc/bbs/Gossiping/M.1460094845.A.753.html
- [問卦] 實驗室學長怎麼壞掉了 https://www.ptt.cc/bbs/Gossiping/M.1460445571.A.2AA.html
平行助教
追求優化極致
課堂作業的平行題目大多都是純數值計算,相當枯燥乏味,但優化技術屬於編譯器範疇,對於平行課程而言,只需要知道概念就能交差,對於這一點我也無可奈何,數次詢問老師是否要以速度作為評分標準,得到的回答都是「不」,心中帶點傷心,很想鼓勵那些寫得不錯又願意花時間鑽研的同學。看到沒有鑽研的同學嫌這門課簡單、好混,真的好想拉著他們一起來研究。
與同學互動
相較於往年的平行課程,今天很多題目都被設計可以 Online Judge,但有批改娘後,同學在半夜用不錯的想法寫出較快的程序,剛睡醒的我馬上發現自己寫的程序不斷地被幹掉,又花了一個下午加上現有知識再追回去。反反覆覆地過著這種日子,每天醒來都會畏懼最好的寫法會使用什麼樣的概念。心裡過得很痛苦,即使如此我也挺開心的,同學不嫌棄廢廢的我球員兼裁判,還願意在我出的題目下花時間,在下非常感動。
當我拚命優化 local memory 存取,卻在替同學 debug 時發現意外地加速,於是新境界到來,順便跟同學交流一下加速部份,甚至連開檔時間都要省!一起追尋神乎其技的感覺非常不賴。
效能進展 3571 ms (24-core CPU) -> 2567 ms (GPU, partial local memory) -> 2472 ms (GPU, full local memory) -> 1675 ms (GPU, full local memory + work group opt) -> 967 ms (GPU, global memory + I/O opt + embedded kernel code)
「看著秒速被拉近,從 profiler 中看出當前問題卡在 memory bandwidth & usage,要著手這一塊優化了對吧。」
「就算是 1 μs,也省給你看!」
「又有人刷新速度極限,睡覺時收到訊息很想裝死。要是再強一點就好了,又要等價交換什麼了嗎?只剩下生命了啊」
「相互學習競爭,別的實驗室好厲害啊,一不留意效能就輸了,得快點想辦法。」
「遇到第一次執行時慢 800 ms 左右,接下來都執行相同輸入又不見這消失的時間,難道是所謂的 library cache miss ? 可是執行檔不到 1 MB 耶。」
「照理來說,演算法迭代到後期的收斂是可預測的,所以硬體能猜測的效能會加快,從平行的結果卻是越跑越慢嗎?明明一開始贏了,後來卻輸了,咱不明白啊,一定是寫壞掉了」
「一早起床就發現相當疲勞,一打開批改娘就發現排名被刷掉。如果贏不了,起碼不能輸,不然這樣有辱實驗室之名!M 之神啊,請賜予我力量活著。不然沒有信心活下去 …」
事實上,這名跟我拚搏的學生只有一位 R04922075 古耕竹同學,就與 tmt514 談論的結果,一門課只需要有一位同學認真與助教一起學習就好,「一名足矣!」的精神已經深植我心。
後來才知道他之所以能在長時間拚搏都是因為住在實驗室裡,醒來就可以寫程式做實驗,累了就在實驗室睡,聽起來可是研究最高生活境界,當然聽起來是個廢人似的,但能省下龐大的住宿費相當吸引我,再加上在台北這種鬼地方,還得忍受每天一個多小時的通勤,先不談住宿有多昂貴,學校研究生宿舍不夠住真的不方便,不像以前中央大學,也許地理位置偏僻,研究生宿舍還一堆空位等著人去住呢!除非指導教授收不到學生,否則進住實驗室這件事情我還做不到啊。
出題考驗
老師每週只要求同學們撰寫幾支小程序,套用平行有快就好,但時候發生平行反而慢,或者不如預期效果時,通常是因為平行撰寫後,導致編譯器的優化等級起不來,可是老師又不想讓同學學習優化,在兩頭難的情況下,只好進行自主研究,包裝成線上評測只是單純方便實驗,為了減少 IO 導致實驗不準確,可是費了相當大的心力在思考如何出題。
在沒有任何經驗傳承下,大部分的程式碼都被學長摧毀,拼湊零碎的知識弄成一題,再寫各種版本進行測試,調校參數進行實驗,簡直是在做大規模的研究似的,每天都如此反覆地度過好幾個星期。
思考如何解題、設計題目時,總會瞬間 CPU 全滿,誰也無法搶資源!這樣的日子過久了,覺得身心相當疲勞。
到了學期後半,步入分散式計算的領域,但不知道能不能用單元測試的想法,建構出一套測試 Hadoop 題目的系統,雖然沒辦法完全模擬群集計算的環境,作為驗證程序正確性也有一定可靠性。採用 Hadoop Streaming 的方式進行 Judge。
曾經未完成的夢,是否在這裡能找到答案?
超艱難修課進行式
期中考
迎來在台大第二次期中考,遲遲無法適應這邊的考試方式,一部分原因也許是在以前學校大多都有考古題撐腰,而現在屬於無依無靠的情況下,又加上題目是一坨英文,看錯題目意思的機會太高,而在答題速度方面考試時間上會來不及,期中考變得一項大挑戰。其中一門課提供開書考,甚至允許同學上網搜尋答案,但是一打開試卷,突然冒出了一題「請看以下這一篇論文,然後回答下列問題」頓時的反射動作是直接跳過,經常看的英文論文通常是十幾頁在跳,考試時間兩個半小時,沒時間耗在這。
然而,在考試結束後,老師特別講到「作為一個研究生,看論文的能力很重要的」於是特地被老師點出來「你怎麼沒寫那一題呢?」只能苦笑地回應,在心中暗自地述說『因為我怕英文啊』那一題佔了 10% 成績,連看都沒看就放棄了,而那張試卷寫到最後一刻才把所有題目寫完,到底該不該慶幸沒去看那一題呢?
心靈打擊
這陣子受到強烈打擊,原因可以歸納出以下幾點:
- 大學長火速交了女朋友並且擺脫魯蛇行列
- 弄了半天的環境,被橫插一行突然 PASS
- 寫得程序在不知名的情況下被女同學說很醜
- 程序一直寫不好、不快
- 愚蠢至極
碩二學長則一直在暗示要抓交替,如報帳和財務管理、伺服器管理 … 等,準備進入三者皆無的狀態,徹底用到廢掉。
新生活挑戰
由於助教薪水大概一個月七千,但發送方式不是學校支付,拖了好幾個月才會到,當然一個月七千在台北吃飯,若要吃點好的,一個月七千一點也不夠,都到了這把歲數,還是要想辦法養活自己的一小部分吧。於是小夥伴表示「薪水到現在都還沒發出來,一個月六千哪能過生活。」最後在小夥伴的催促下,Morris 打開家教網找零工啦。但打電話是多麼令人害怕得一件事情 …
被學長推去面試家教,明明都已經鼓起勇氣出發,卻又過程中潑冷水。去也不是,不去也不是,這搞得我好混亂,到底還能相信這世界什麼地方?
白活系列
加速 NPC
當年在 NCPC 搞不出來的 Problem I Christmas Gifts (NP-hard),在賽後用 DLX 運行效果不錯,在啟發函數加上延遲標記更是屹立排名前數位已久。最近又因為平行把題目挖回來討論,在去年釣到大一學弟來解,便以飛快的速度擊破測資,最後達到加速 20x。再把當初需要跑 30 秒的測資來運行,現在只需要短短的 50ms。而都這麼快了 … 應該不用平行吧。
動態規劃
為了出題目,根據研究論文後的結果,出了一題常見的動態規劃題目,也就是 matrix chain multiplication,儘管算法最終可以加速到 $O(N^{\log_2 3})$,但在 30 年前就存在 matrix chain multiplication 的 $O(N \log N)$ 作法,那在 $O(N^3)$ 套了一堆剖分方便平行到底在窮忙什麼?
「當面對諸多選項時,我實在不曉得到底該選哪一個才不算錯。」當一個 Flag 打開之後,瞬間掉了不少 Performance …
近期活動
最近才把原本要出題目的測資補起來,論文誇張的加速似乎是跟非常非常蠢的版本比較,但快個兩三倍仍相當值得,編程複雜度也是增加兩三倍。各種層面的題目都已經全數實作好放上批改娘上提供線上評測。心想當研究一直發展下去,難道都不會窮盡?清單上的靶子長得越來越奇特,研究學者果真是一群變態啊。
學期最後一堂 Workshop 結束,心裡總算舒坦了些,不用每周在廢物的羞恥 play 下度過。感謝上課同學們賜教予我!