分享到plurk 分享到twitter 分享到facebook

版本 ea4a9cfd6978e81d499ad332f5659542f75758bc

User/TonyLinX

Changes from ea4a9cfd6978e81d499ad332f5659542f75758bc to fb783e2dc5797f02cba7d9cf7f54a9a28aa626bb

---
title: TonyLinX (林儀承)
categories: User
...

## 簡介

* 國立成功大學—資訊工程研究所

* [GitHub](https://github.com/TonyLinX)

* [HackMD](https://hackmd.io/@TonyLinX)

## 2025 Linux 核心設計 自我評量 

### 1.成果發表和貢獻:
我認為自己在本課程中最主要的成果與貢獻,來自於期末專題中對 lock-free thread pool 架構的實作與分析。並行程式設計涉及的知識面向極廣,從最初的 lock-based 設計出發,就需要理解 mutex、condition variable、atomic operation 以及 thread pool 的整體運作邏輯。在此基礎上,若要進一步實作 lock-free 的版本,必須對效能瓶頸進行具體分析與定位,特別是在任務分配與多個執行緒同時操作同一個共享佇列時,會因爭用 queue 的 head/tail 指標導致執行緒頻繁等待、atomic operation 失敗重試,進而造成整體效率下降。

在本專題中,我從分析 thread pool 的 work queue 設計著手,意識到 lock contention 與任務分配不均是造成效能瓶頸的主因之一。因此,我採用了以 ring buffer 為基礎的 lock-free work queue 設計,並結合 semaphore 與 spin-wait 的兩段式等待策略,以降低 busy-wait 帶來的資源浪費。然而,僅靠 ring buffer 雖可降低 contention,但無法完全解決任務分配不均的問題。為此,我進一步設計了 batch-based work stealing 機制,透過每個執行緒在任務不足時主動嘗試從其他佇列中偷取多筆任務,以改善負載平衡並提升 thread utilization。

本專題最終呈現出一個可實際執行、效能優於傳統 lock-based 設計的 lock-free thread pool 平行矩陣乘法系統,並針對其中的結構設計與效能數據進行紀錄與驗證。我相信這份開發紀錄與實作成果,可作為後續學習者的參考基礎,有助於他人更快速掌握並行系統中的關鍵設計挑戰與對應解法。

評分 : 2 分

### 2.作業/隨堂測驗:
[HW1](https://hackmd.io/@TonyLinX/linux2025-homework1)
[HW2](https://hackmd.io/@TonyLinX/HyFvWXH3yl)
[HW5](https://hackmd.io/@TonyLinX/linux2025-homework5)

* 透過第一個作業,我重新學習 C 語言,從完全忘記 linklist 怎麼寫,到實作出 linux 風格的 linklist。
* 透過第二個作業,我學習到,單向鏈結到 BST、Quicksort、bit 算法、hash table。

評分 : 1 分

### 3.期末專題
[Linux 核心專題: 並行程式設計相關測驗題](https://hackmd.io/@sysprog/r1DpeNNVex)

從這次的矩陣運算多執行緒實作過程中,我深刻體會到高效能運算背後的系統設計與調度技巧。在一開始,我只具備基本的 C 語言能力,對 thread pool、work stealing、thread affinity 等概念幾乎是陌生的,但透過實作這個專題,我不只是完成了平行化矩陣乘法,還一步步將系統從 naïve 的單執行緒版本,優化成具備 lock-free 結構與 batch stealing 策略的高效 thread pool。這中間我學會了如何使用 ring buffer 來實作每個 worker 的工作佇列;也學到如何在無鎖情況下透過原子操作(atomic operations)達成安全的工作共享與分配,進而提升整體執行效率。除此之外,我也親自體會到從 busy-wait 到 semaphore 的設計轉變,如何在 spin 與 sleep 之間取得效能與資源利用的平衡。整體而言,這次的專題不僅強化了我對平行程式設計的實作能力,也讓我在除錯、效能分析、系統資源分配上建立了更扎實的理解,讓我從一開始幾乎不了解 thread pool,到能夠自己設計一套具有 work stealing 的平行任務排程系統,是一次很具成長性的經驗。

評分 : 2 分

### 4.與授課老師的互動

一對一面談:
 
1. 2025 年 5 月 29 日

    這是本學期第一次面談,主要是討論自己的學習情況,老師也給了我一個測驗題,要 "如何在沒有FPU的情況下計算幾何平均" 。當時的我不知道什麼是定點數,也不知道如何求近似值。在後續,回家研讀先關的教材後,我學習到了定點數以及牛頓法。
    
2. 2025 年 6 月 9 日

    這是本學期第二次面談,我當時完成了老師提出的測驗題,但被說沒有討論 overflow 的問題,後續我改了設計方式,從先計算出最後的乘積 (product),再去做牛頓法開 n 次方根,改成分成 P \times 2^{E},這樣就可以控制使否落在範圍內,這樣的設計不僅克服了 overflow ,還可以使誤差率都可壓在1%以下。

3. 2025 年 6 月 18 日

    這是本學期第三次面談,這次主要是討論我的期末專題的主題,由於我對並行程式有興趣,所以老師派發給我關於並行程式的專題。

評分 : 2 分

### 5.所見所聞所感,務必提及閱讀〈因為自動飲料機而延畢的那一年〉和回顧自身在本課程的投入狀況
從這個故事中,我學到了一件非常重要的事——知識就是力量。光有熱情與努力,並不足以讓事情真正推動起來。這個故事也讓我回想起大學時,和朋友們一起進行的各種計畫。那時候,我們常因為不熟悉其他領域的知識,導致許多問題處理起來格外吃力。久而久之,這些困難逐漸消磨了大家的熱情,最終許多計畫都不了了之。
回顧這堂課的學習歷程,我投入最多心力的是期末專題。在設計整個 lock-free thread pool 架構時,我深刻體會到:若想真正解決一個系統層級的問題,僅有直覺遠遠不夠,必須建立在充分的知識理解與實驗驗證之上。一開始我對於多執行緒相關的概念如 mutex lock、semaphore、thread pool、甚至 work stealing 幾乎完全陌生,面對問題時無從下手。但透過仔細研讀老師提供的並行程式設計教材、逐步實作、搭配對執行結果的觀察與分析,我才逐漸建立起這些機制背後的邏輯與使用時機。設計過程中,我也不斷面對新的挑戰:例如資料競爭、負載不均等問題,這些都驅使我學會使用 atomic operation、設計 ring buffer 以實現 lock-free 結構,並嘗試引入 batch stealing 來減少高頻率的 steal cost。此外,我也學會如何進行效能分析,包含以 perf stat 測量 cache miss 與 context switch 數量,來佐證我所提出的設計是否真的達到效能提升。每次的修改與驗證都是一次新的學習,也讓我認知到在多執行緒環境下,正確性與效能之間的平衡極為關鍵。這堂課不只是讓我補足了過去對系統程式設計的理解盲點,更讓我第一次真正感受到「設計一個能動的系統」背後所需的細節與思維深度。

評分 : 2 分