# 2025q1 Homework5 (assessment) contributed by < horseface1110 > ## 紀錄閱讀[〈因為自動飲料機而延畢的那一年〉](https://www.opasschang.com/docs/the-story-of-auto-beverage-machine-1)的啟發 成大這兩年吹起了一股創業的風潮,不是指學生真的大量出去創業,而是各式創業課程、講座、競賽風起雲湧,報名人數也是蒸蒸日上,我身邊也不少人熱衷於創業的汪洋大海之中,有些人還在岸邊整裝待發,也有人已經縱身一躍,在未知的海洋之中與颶風搏命。 不免俗的,我也在不經意間接觸過一些相關課程,也曾經對於「利用創業解決問題」這個行為十分嚮往,因為我發現,現在有一種需求隨著時代演進,逐漸浮出水面,不過現有的產品或工具並無法有效舒緩這些需求,所以想創業。在創業講座或課程中,講者總是分享:「做就對了」、「不會就學」等觀念,雖然他們會提出在創業過程中遇到的困難和磨練,不過他們都一一克服了,畢竟學校不太會請創業失敗的人來演講,所以演講內容感覺都跟現實差了點意思。 在拜讀[〈因為自動飲料機而延畢的那一年〉](https://www.opasschang.com/docs/the-story-of-auto-beverage-machine-1)時,我有一種很親切的感覺,因為我也曾經揣懷著一個異想天開的點子,就一股腦的想要實作,但並未評估過市場需求、實際效益和成本。不過與他不同的是,我在跟老師討論過後,就將想法擱置了,不過作者卻勇往前行,嘗試將點子落地,看著他的文字,我想像那是平行時空的我,也不顧一切的去實踐那個夢想。 作者是一位將近10年前的交大資工系學生,我想,當年的學生資質肯定與現在不是一個量級的,更甚,我還只是成大的學生。在前半部分的紀錄中,可以感覺到,作者的程式能力是遠超當代的普遍成大學生的,但是連這樣的他,都說 > 「資工系的學生不會寫程式,機械系的學生不會做機械」 那更加沒有技術力的我,還在狂想些什麼呢? 本來就知道創業沒有那麼簡單,跟著作者的文字,更加意識到理想與現實的落差。我認為,程式開發的迭代速度相當快,且方便、低成本的情況使的我們更加忽略的一個很重要的關鍵:「細節」。我們在寫程式時,總是口嗨著一句「先求有,再求好」,等到真的有了,我們又不求好了。惰性使的我們放棄了精進程式的機會,老是抱著「能動就好」的觀念,會使我們將事情看得很簡單,思慮不周的下場,將影響我們往後的任何決策,像是筆者的「冰塊機」。我們以為冰塊就是一顆一顆的,哪會有掉不下來的問題,但事實比我們想的還要複雜,在溫度與壓力之下,有些冰塊會黏在一起,導致無法正確落冰。這是一個我們稍微再想一下就可以想到的細節,就像我們再稍微檢查一下程式,就可以發現的bug,但因為「能動就好」的理念,再加上深植我心的「試錯成本低廉」,使我們的思考停在很粗淺的表層。 我的kxo作業已經成功將RL演算法搬移到kernel了,但還是從沒有做過老師一直期待我們做的「效率檢測」、「數學證明」,因為我仍舊懷著能動就好的想法,認為我的RL已經能動了、達到作業要求了,那就好了,這就是老師常常掛在嘴邊的「成績是你學習的終點」的翻版,「作業要求是我學習的終點」,看完這篇文章,我深深認知了這要命的觀念只會一步步帶我走向平庸。 我不敢說從文章中獲得了很多啟發,更多的是帶入了作者的情緒,與他共情,和他一起面對失落與絕望。事件在作者去當兵之後迎來了尾聲,雖然整件事看似有勇無謀,但作者在執行期間,實作、找人脈、收集資料、分析,這些行動力讓整件荒謬的創業變得可圈可點,我想,這就是成功的人應該具備的特質吧。 ## 作業上遇到的問題 ### KXO 目前成功把RL演算法搬移到kernel執行,根據我的解讀,整個程式碼的運作是這樣子的: - train先呼叫RL裡面的函式,產出所有合理棋局的分數,製作q table - 玩的時候,查閱q table,看下一步的哪個棋局的分數最高,使用那一步 現在做法是:我將q table的值轉成定點數,並且在製作完q table後將其存儲在一個.h檔中,接著就永遠只使用該.h檔。在kernel中只查閱該.h檔。 我的問題:我是在ttt這個專案中產生q table,不過在ttt中與RL互動時,我發現他非常非常笨 ``` oloomb@oloomb:~/ttt$ ./rl 1 | 2 | 3 | 4 | ---+------------- A B C D X> A1 exploit 9 1 | × 2 | 3 | ○ 4 | ---+------------- A B C D X> A@ Invalid operation X> A2 exploit 7 1 | × 2 | × ○ 3 | ○ 4 | ---+------------- A B C D X> A3 1 | × 2 | × ○ 3 | × ○ 4 | ---+------------- A B C D X won! Moves: A1 -> B3 -> A2 -> D2 -> A3 ``` 很明顯應該防守的地方沒防守 在kxo專案中,我讀取q table並找出哪種下法最好,不過我發現,不知為何,只會出現兩種棋局 ``` Game #1 Moves: C1 ->B1 ->C2 ->C0 ->C3 Game #2 Moves: C3 ->C1 ->B1 ->B2 ->C0 ->A2 ->C2 ->A3 Game #3 Moves: A3 ->C1 ->B1 ->C2 ->C0 ->C3 Game #4 Moves: C3 ->C1 ->B1 ->B2 ->C0 ->A2 ->C2 ->A3 Game #5 Moves: A3 ->C1 ->B1 ->C2 ->C0 ->C3 Game #6 Moves: C3 ->C1 ->B1 ->B2 ->C0 ->A2 ->C2 ->A3 Game #7 Moves: A3 ->C1 ->B1 ->C2 ->C0 ->C3 Game #8 Moves: C3 ->C1 ->B1 ->B2 ->C0 ->A2 ->C2 ->A3 Game #9 Moves: A3 ->C1 ->B1 ->C2 ->C0 ->C3 Game #10 Moves: C3 ->C1 ->B1 ->B2 ->C0 ->A2 ->C2 ->A3 ``` 我認為這是我的問題,仍在排查中。落子的第一手不是隨機的嗎? ## <記憶體管理、對齊及硬體特性> 問題 - [標示不用的節點](https://hackmd.io/@sysprog/c-memory?type=view#%E6%A1%88%E4%BE%8B%E5%88%86%E6%9E%90-concurrent-ll) - 不會發生位址的最後一個 bit 被使用到的狀況(因為都是 4 的倍數 + 必須對齊)。所以就把最後一個 bit 設成 1 當作是刪掉這個節點的 mark. 而把最後一個 bit 設成 0, 就表示恢復原狀。 - 為什麼?一個地址指向一個byte,假設目前對齊後的struct,指標指向1000,現在把最低位改成1,以標示這邊要被刪掉,但1001不也是指向一個有資料的空間嗎? - 為什麼要設計 可以把結構的指標轉型成第一個物件 - [glibc 的 malloc/free 實作](https://hackmd.io/@sysprog/c-memory?type=view#glibc-%E7%9A%84-mallocfree-%E5%AF%A6%E4%BD%9C) - thread arena: 使用 mmap() 取得新記憶體,預設 map 1 MiB,分配給 heap 132 KiB,尚未分配給 heap 的空間設定為不可讀寫,1 MiB 使用完後會再 map 一個 1 MiB 的新 heap - 為什麼剩下那麼多不可讀寫的區域 - 超過時 threads 會開始共用 arena,此設計是為了減少多 threads 記憶體浪費,但也因此 glibc malloc 不是 lockless allocator - 為什麼這樣就不能是lockless allocator ## 想要投入的專案 ### 貢獻vwifi - [Linux 核心專題:模擬 rate 和 mcs](https://hackmd.io/@sysprog/rJD2joOSh?stext=51911%3A13%3A0%3A1747187820%3AcU2Qja) ### 高效能網頁伺服器 - 寫作業:ktcp ### 改良RL演算法及縮小Q table占用空間 - 作業:kxo中的將RL移動到kernel
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up