# 2025q1 Homework5 (assessment) contributed by < `MikazukiHikari` > ## 因為自動飲料機而延畢的那一年 我在讀這篇文特別的有感觸,不只是因為它讓我想起了自己也參加過許多新創活動/競賽,更是它講的很多有關學生創業的慘痛現實都是真的,且我也是其中一個。 「學生的經驗不足,技術實力不夠堅強,對於市場的敏銳度也侷限在校園,大多數的點子在做的當下往往興奮,但回首後卻只能對自己的幼稚莞爾一笑。」「只不過發想了一些 idea ,參加了幾次創業競賽、參加過幾次黑客松,做了幾個專案之後就想靠著幾個不成熟的 idea 一炮而紅,連科幻小說作家都不敢採用如此誇張的設定。」這種事情我是十分的清楚,因此我在參加這種比賽從來都只是抱著試試看能不能得個獎的心態去參加,從沒有打算把它當作未來的本業,用這篇文來講就是愷宏,只是做興趣的。 只不過我會對這篇文這麼印象深刻的理由就是:我去年的團隊裡真的有一個和本篇主角一樣為了新創而打算投入自己好幾年的人生的人。沒錯!接下來我想講的故事,主角是一個和 [因為自動飲料機而延畢的那一年](https://www.opasschang.com/docs/the-story-of-auto-beverage-machine-1) 的主角類似,卻走錯路的負面教材。 我的友人 A 是一名想打破原科系的限制,想翻身的人,他找了我、微電所的友人 B 、和 A 同科系的 C 一起做一款結合遊戲、健康管理以及教練和營養師諮詢服務的 app ,而我在團隊中主要是提供資工技術的支持,過程就不詳述了,總之我們在圓夢計畫比賽中獲得了獎,以及一些啟動資金。然而在過程中我們不斷地被問到有關商業化以及獲利點的問題。於是 A 便打算尋找商業化的方法以及拉外面的贊助或合作;在過了一段時間我下次再見到他後,他變了一個人,他想了一連串的商業化的流程,包含如何和外面健身房合作、如何培養和我們合作的營養師以及健身教練。最後也是我最無法接受的獲利點,他認為我們可以透過賣健身產品賺錢、以商品為主、 app 為輔的方式,於是他加入了直銷,被他們的話術洗腦,並且開始向身邊的朋友推銷,還打算將我們的心血拿去全部用在他的直銷事業上,最終我無法接受,毅然的離開了團隊。 我看到本篇主角和友人 A 的共同點就是他們都願意花大量時間去完成他的目標,友人 A 也是願意為了這個事業而應徵了好幾年的研究助理,因為研究助理的空閒時間很多,能讓他有更多時間做直銷。然而,我認為「是否堅持初心」造就了結局走向的不同:一個人成為了努力的範本,且結識了許多能一起工作的朋友;另一個人卻背離了一開始想解決現代人亞健康的初心,於是被淪為笑柄,並逐漸失去了身邊的朋友。 除此之外,文中的主角那股不顧一切只為了完成某個自我實現的衝勁也不禁讓我代入到了我自己的經歷,我現在已經是碩二了,說實話我本來是沒打算修這堂課的,但我始終有一種自己的學經歷很水的感覺以及想挑戰自己、認清自己還有翻身,加上自己運氣好碩論的進度還行,因此才決定來修這堂課。修了這堂課後發現自己真的很爛,雖說老師曾說過和很多強者一起共事會讓自己變強,然而這份差距還是大到讓人絕望,總有一種自己無論做什麼都無法彌補跟課上真正的強者的差距,現在就是走一步算一步,能學多少就盡量學,總好過什麼都沒做! ## 期末專案討論 由於自己現在所處的實驗室是和 AI 相關,也會閱讀和 LLM 相關的論文,並且大型語言模型是未來產業的趨勢,因此和 llama 相關的實作我覺得可能會比較適合我。尤其是 llama 也使用了 transformer 的架構,並也使用了常見的 self-attention 機制,來捕捉輸入序列中各個詞之間的關係,其他像是 position embeddings, feedforward network 等等也都是自己平時會接觸到的,少數不同的是它未使用常見的 encoder & decoder ,而只有 decoder ,且自注意力機制和位置編碼等等的使用也有稍微不同,而且我並未做過這種的效能分析,感覺蠻具有挑戰性可以試試看。 :::danger 注意書寫規範,中英文間用一個半形空白字元區隔。唯有留意細節,方可征服數千萬行等級的 Linux 核心原始程式碼。 ::: > 好的!已修正 接著,我比較有興趣的應該是和 RISC-V 相關的實作,自己曾經修過敝系的超大型積體電路,其中需使用 verilog 實作一個簡易的圖片壓縮/解壓縮的小系統,因此自己對 verilog 還是有一些基礎的;此外,自己對嵌入式系統也是十分的有興趣,雖說只寫過 Arduino 和 BeagleBoard ,並未碰過太多的 RISC-V ,但我認為如果能選擇相對簡單、文獻較多的 RISC-V 來寫簡易作業系統,也許是對我而言相對能完成又有一定挑戰性的期末專案吧! 想投入的專案: * llama * RISC-V ## 問題與討論 ### Q: quiz2 第 2 題 * sqrti 的原理 * 原本的 sqrti 的行為是 floor(sqrt(x)),我們想改為 ceil(sqrt(x)),該如何修改 sqrti 的程式碼? * 改寫程式碼,不使用 clz / clz64,達成 ceil_sqrti,不能用乘法或除法 * 如何加速上述程式碼 * 如何檢驗「加速」版本的 sqrti? i.e., corner/edge cases? 請參考: [這裡](https://hackmd.io/@DboOgKS6RtOmMLCltFsBig/SkS4ZDUeeg) ### Q: 如何建構 merge sort 的 worst case? (資料分布) 一般來說,我們都會說:Merge Sort 的時間複雜度為 O(n log n),這是其最壞、平均與最好情況的時間複雜度。可以發現比起其他排序法,Merge Sort 在各種情況下的時間複雜度算是十分的穩定,由於分割的工作量不變 → log n 層且合併每層都要處理 n 個元素 → 每層是 O(n) ,總之,無論資料原本是否已排序、逆排序、亂序,merge 操作還是要掃過所有元素。 回到正題,其最壞的情況是當兩邊元素交錯分佈,每個 merge 步驟中都產生最多次比較(幾乎每次都要比兩次才能決定)。舉例: [1, 5, 3, 7, 2, 6, 4, 8] →[1], [5], [3], [7], [2], [6], [4], [8] → [1, 5], [3, 7], [2, 6], [4, 8] → [1, 3, 5, 7], [2, 4, 6, 8] → [1, 2, 3, 4, 5, 6, 7, 8] 這種結構會導致在每次 merge 時,左右兩邊的數據都交錯排序,所以在合併階段,幾乎每次比較都要從兩邊取值來比較,不能快速將一邊直接複製到結果中,導致比較次數最大化。