走在平行道路上-前篇

contents

  1. 1. 前提摘要
  2. 2. 解題相關
  3. 3. 實驗生活
    1. 3.1. 燃燒經費
    2. 3.2. 巧遇英文
    3. 3.3. 路人搭訕
    4. 3.4. 算法數學分析
    5. 3.5. 奴工打雜
    6. 3.6. 超艱難修課挑戰
  4. 4. 平行助教
    1. 4.1. 提前研究
    2. 4.2. 優化挑戰
    3. 4.3. 製作批改系統

前提摘要

這學期修課過得相當恐懼,期初上課就受到多方刺激,因為許多課第一堂都問說以前有沒有學過什麼,易想而知地,對學店逃出的我而言,只能默默在心中說「有聽過這個詞嗎?難道就沒辦法修課,這樣子根本沒有課程可以修。」幸好地,雖然沒有受過台大大學部課程的指導,大部分的內容以前都自己研究和玩過。

回頭看看,那些英文授課以及期末實作論文之類的,內心恐懼越來越深,而在下學期要報英文論文,學長因為連發音不正確或者用詞錯誤受到老師的深入指導,每一次開會都久戰一個多小時。而連基礎英文都只能靠 google 翻譯,為了確信實驗結果,都必須親自實作一番才行。腦子不斷地去喘測未來,估量這學期不間斷地抗戰的生活,然後還要受到老師嚴厲地批判。

接下來,就以圖文的方式回顧這一學期吧!

解題相關

逐漸地放下在 UVa Online Judge 的刷題日子,更沒有參與各種線上例行賽,由於曾經寫非常多的題目,仍然有不少人經常來詢問題目,不管是學校課程或者是 UVa 上的舊題目都會被拿來問。然而,有一些特殊案例是拿著世界總決賽等級的題目來問,一看就知道要寫個天昏地暗,說不定還不會的題目呢。

「來,請吧」-《為美好的世界獻上祝福》

只是比別人稍微努力一點,對於高難度的題目反應是相當慢的。當然,我還是盡力回答,不過那陣子還要趕作業,閒暇時間一點也不想再開題目,一開下去不知道會不會一整天就過去,這樣可就沒辦法好好寫作業,滿腦子都是揮之不去的題目。所以有忽略一些人的提問,在此向大家說聲抱歉。

實驗生活

燃燒經費

從碩一剛進來時,碩班學長已經擔任採購財務管理已經兩年,為什麼是兩年呢?這些就要留給本人來說,事實上這裡很多人都充滿兩年以上的回憶,若要成為這裡的一分子,負擔是非常沉重的。每學期都要消耗實驗室經費,經過半年的我仍然幫不上學長,沒有研究目標就不知道要怎麼樣的實驗環境,能提出的採購項目原則上都不會通過。

「對不起,我太沒用了」-《蒼之彼方的四重奏》

那一陣子,由於要架設實驗室的群集計算,花了好個星期都沒辦法把網路架設好,一部分原因都是因為想要在虛擬機器如 Xen 上面維護,這時候網路設定和應用程式之間的權限開放變得困難,這些牽涉到軟體設計,參數總是不如預期地運作。

為了解決管理介面每天都睡不好,每到實驗室看著旁邊吵到不行的伺服器,不想接觸那無法運行的廢鐵們。這時候就提案買個 安眠藥 之類的,可想而知地被老師打槍,因不久之後因為課堂要使用,建造不起來的壓力非常大,再加上實驗室已經沒人有架設經驗,對系統比較熟的蕭大帥還要忙著畢業論文,只好用毅力嘗試架設。這故事的最後,採用原生的方式完成,暫時先別為了防止系統掛掉而採用虛擬化技術保護。

巧遇英文

蕭大帥學長看我破爛的英文,設想推薦我學習英文的方法,例如去學校語言中心聽力練習,或者到圖書館借閱英文文法書籍,又或者參與大一英文課程,然而都因為時間點不對,而且修課過重而沒有動力參加,英文帶來的恐懼對我來說不是一時造成的。但是看英文字幕的動畫不是問題,可惜地歐美翻譯速度慢,再加上翻譯味道對不上,一部分是文化上的不同,這導致要找到對應詞彙困難,有機會再來採用英文字幕看新番吧,擷圖一定非常有趣。

「You were asleep for 15 years but still have a silver tongue」-《只有我不存在的街道》

路人搭訕

每天過著早上九點左右到實驗室,晚上十一點左右回住的地方,其一原因是要避免上班族群和補習班下課學生。每天過著像上班族往常的通勤生活。

在某次下雨的夜晚,看到窗外的雨停了,便拿著來滴著雨水的傘提早離開,快速地走在人行道上,突然一旁有聲細語傳來「你正要回家嗎?」轉過頭來看,原來是名剛打完工妹子,心想『還好不是什麼怪人,但主動跟我搭話也有一點怪人成份吧?』心中充滿地慌張回道「是的,剛從實驗室離開。」

「哦,你是研究生嗎?我剛從打工那裡下班。今天都沒有少收錢,超開心的,之前經常少收錢」帶著愉悅的語調回道
「辛苦你啦,你在活動中心打工嗎?」因為沒見過面的面孔,為了確定身分還是問些資訊來吧。
「嗯嗯,在麥當勞打工。」
『…』帶有疑惑地,可是我一點也沒印象,去過幾次麥當勞,但店員的年齡對不上的。
「不過我都在內場忙,所以可能沒有見過吧。」

聊著聊著都走到捷運站上,一路上只應答一些簡單的句子,突然來個人靠在身邊聊天,難免不受到驚嚇。到了捷運站,一般都直接走樓梯而沒有特地走到有電扶梯的入口,也許就因為要跟著我走

「可以借我攙著嗎?」她攙著我的胳膊走下去,這時候幼小的心靈受到沉重打擊。
「你有在練肌肉嗎?感覺是有肌肉的觸感 …」
「沒啦!」聽到內心不斷地尖叫、嘶吼,這一切都來得太突然。

「確實在啊,腦子不正常的孩子。」-《為美好的世界獻上祝福》

看來經常到實驗室打混的日子,導致逐漸地看到幻覺,總算可以達到擴充實境的地步,由衷地敬佩自己。

算法數學分析

經由學長的推薦,選修陳文進老師的「演算法數學分析」課程,這門課可說是各種演算法常見的數論技巧,在競賽中也非常容易見到,但從看過數學家是如何定義這些符號以及運算性質,這門課可說是增廣嚴謹數學定義與工具的好課。

然而,每週寫起作業來非常刺激,雖然水泥數學課本〈Concrete Mathematics〉大部分都有提供解答,但是解法就不太明確,有提供驗證答案正確性的參考,於是乎有各種神妙的解法,甚至不用套用課程所講的一些技法,老師也非常鼓勵同學用一些已知的知識來推論答案,有時還比教科書來得簡單扼要。

寫起作業每次大概花了一天到兩天,每週一個章節,老師沒講到的章節要自行閱讀,難度不會太高,花點時間坑一下基本上都能完成。作業推論則是經過一個星期的哀嚎,有時候六日推不出來,放著過好幾天才突然想到,數學的美妙近在眼前卻總是差一步就能推出。

「大家就愉快地化為塵土吧」-《為美好的世界獻上祝福》

由於這門課已經很久沒開,沒法找到合適的人選擔任助教,而常見的球員兼裁判的人選卻不選這門課,於是每週作業大家輪著改。有一次我改大家的作業,看到許多神奇的寫法,但也非常地痛苦,腦補了好幾十分鐘仍猜不出這傢伙在寫什麼,而我們寫程式的人,又經常失去一些數學常識,如 程式的等號和數學的等號是不相同的。若這門課程有助教,這助教一定會崩潰的!

奴工打雜

老闆又叫我把批改娘架設給 Data Structrue and Algorithm (簡稱 DSA) 課程使用,雖然跟他們實驗室要了一台 伺服器安裝,經過三番測試終於架設起來,只有稍微跟他們說明如何建置題目和加入使用者。畢竟是做免錢的,剩下就看他們造化。

沒想到最後還是採用老方法,繼承他們 DSA 去年的腳本改作業,畢竟要設置批改系統非常不容易。而上次交給電機系使用,他們成功地運作這到讓我感到意外,資工系反而沒有花時間架起來玩。

過了不久收到 DSA 課程來信要徵助教,想到已經擔任一門課助教,再一門會往生,有人還認為我會想去當 DSA 的助教呢?若是當了,早就來一場助教與學生之間的效能拚搏,想到若要協助架設批改系統,多麼令人感到戰慄。

《無彩限的幻影世界》

超艱難修課挑戰

清明連假都在寫作業,每天都看似好像有點進展,程序仍然沒辦法跑。覺得程式越寫越退化,退化到與組語奮戰。覺得各課程作業非常噁心,一年抵四年所學,都覺得快被後輩看起來認定是個廢物。如果寫不出來,是不是都是我的錯呢?

「不全都是你的錯嗎?」《好想大聲說出心底的話》

看著作業需要的 LLVM API,看不懂文件只好猜呀猜,針對文件窮舉各種英文姿勢,歷經崩潰的驗證思路後,才察覺流程果然有點詭異,確定描述上的瑕疵後,換個思路打掉重來吧!也許還需要寫點測試,才能知道到底有沒有寫對。於是作業又再次進入輪迴,進度從零開始!

平行助教

提前研究

在學期開始前,預想而知地會受到老闆指派當平行程式助教,從上學期 C 語言程式助教那時開始,平行設計的課堂題目就開始實驗,把平行題目放上批改娘系統上,沒想到大一新生也有嘗試去解決那些題目,台大新生的學習能力遠遠超出我的想像。

研究如何平行程式不算難,但是寫得好與壞差別很多,大部分的情況都會快上一些,慘的時候甚至會慢上數倍,經過一層層地解析,研究為什麼會變慢,慢是因為什麼因素所導致?是架構嗎?還是運行流程?又或者是算法重複計算?當遇到瓶頸的時候,只能埋頭苦幹地研究,深刻地體會到研究並不會提升智力,只是增加知識層面而已,像我這種笨蛋卻過著研究生活,怎麼想都奇怪呢!

「也不會提升智力了」-《為美好的世界獻上祝福》

優化挑戰

平行不只有平行,牽涉到硬體架構,隨著平行的需求所進行的算法設計,若整個算法對硬體友不友善,將會影響程式的快慢。最常見的就是快取問題,第一個遇到的是 Structure Of Array / Array Of Structure 的不同,針對使用層面,沒想到他們居然會差異到 10 ~ 20% 效能差異,也就是遠本跑 50 秒的程式,居然可以提升到 40 秒內跑完,若要發這種論文,想必需要知道很多硬體設計。

「Study Hard」-《無彩限的幻影世界》

製作批改系統

如果沒有正常執行完畢,莫名其妙伺服器的內存量增加,也找不到地方砍,重啟顯卡也沒辦法解決,眼睜睜地看著內存爆炸。OpenCL 要製作成 Judge 題目還有一段路要走,每次 Judge 就重新啟動 Server 是最慘的抉擇。

「這跟說好的不一樣啊?」-《Re: 從零開始的異世界生活》

大致上知道 Memory Leak 的出現點,不管是程序有錯或被強制中斷都來不及執行釋放,少釋放一個物件造成內存少 100MB,經過兩三百個案例就得重開機。暫時解決方案是寫腳本偵測記憶體用量,指定超過用量自動重開,一旦沒寫好將變成不斷地重開。

好不容易架設好批改系統,但是測速度有嚴重的啟動損耗,有時候在沙盒裡面運行還特別慢,當只裝 nVidia driver,啟動 OpenCL 基本消耗一秒多。為了使用 Profiler,意外地安裝 CUDA 相關插件,頓時啟動消耗變成毫秒等級。為了解決這奇怪的現象,還一度把伺服器搞壞,整台重灌才順利解決。

《為美好的世界獻上祝福》