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

2016q1 Homework #5

預期目標

  • 培養團隊合作默契
  • 強化表達能力
  • 準備日後可用於研究所推薦甄試和申請工程師職務用途的技術報告

注意須知

  • 自 Homework 5 之後,都是分組進行
  • 在每次 checkpoint 日的 11:59AM 前,上傳一份時間在 40 分鐘內的錄影,至少涵蓋以下:
    • 探討背景知識
    • 開發進度
    • 面臨的問題
    • 接下來預計導入的解決方案
  • 技術報告的影片經過剪接編輯後,上傳到 YouTube,設定存取權限為「公開」
    • 示範: GUTS channel
    • 在共筆中清楚標注技術報告的 YouTube 連結
  • 本次作業對應的 checkpoint 為 4 月 26 日
  • 開發過程請詳實更新於分組共筆
  • 不需要準備投影片,我們只要詳實清楚的文字 (更新於各組的共筆)、圖表,以及程式碼 (語文能力是本課程的要求項目之一)
  • 各組預期目標請見下方各節

server-framework

  • 彙整 2016q1 Homework #3 的開發成果,詳實分析 server-framework 的架構、系統設計,效能評估,以及效能改進方案
  • 說明 async, reactor, protocol-server 彼此之間的關聯
  • 探討 epoll, pipe, signals 等系統呼叫,以及 server-framework 如何使用
  • 多執行緒設計的議題
  • 分析 HTTP request 和 web server 的行為
  • 實做與分析 lock-less thread pool
  • 提出效能分析 (含 HTTP 1.1 Keep-Alive) 以及改善方案
  • 需要透過 gnuplot 建立圖表

epoll experiments

concurrent B+ tree

  • 在 GitHub 上,fork bplus-tree,研究 B+ tree 的實做並解釋其原理
  • 驗證 bplus-tree 在各式條件的效能,包含單一執行緒和多執行緒讀寫
    • 執行 ./test/bench-multithread-get
  • 移植 2016q1 Homework #1 的電話簿程式到 test/ 目錄
    • phonebook/dictionary 的字典檔案,事先用 sort -R 亂數排列
    • 設計能夠重複執行的效能分析工具,針對不同的字典排列作為輸入,分析 B+ tree 處理效能
  • 比照 2016q1 Homework #1 的要求,研究插入、查詢、刪除的效能表現 (含 cache miss),並提出解釋
  • 透過 gnuplot 視覺化相關的數據
  • 提出改善效能的方法並且著手實做

Enhance raytracing program

  • 彙整 2016q1 Homework #2(A) 的開發成果,分析各項效能改善實驗的具體成效 (個別 + 綜合)
  • 解釋多執行緒程式設計對光線追蹤的影響,需要比較不同的切割方式、執行緒數量的影響
  • 使用 OpenMP, SIMD 進一步改善程式效率
  • 解讀數據,以及思考如何進一步提昇效能

2016q1 Week #2 試題

  • 解答 2016 年春季班期初基本能力測驗試題 的以下題目:
    • 第 9 題 (implementing counting semaphore)
    • 第 11 題 (bit-wise operator)
    • 第 13 題 (cache)
    • 第 15 題 (ARM operation mode)
    • 第 18 題 (branch predictor)
  • 需要提供合乎 C99 規範的 C 程式,並且提出驗證正確性和對應效能的機制
  • 需要提出必要的解釋

web server with CGI

$ make
$ cd bin
$ ./cgi_server_test
* 然後用瀏覽器開啟 `http://localhost:8080/`,如果不能正常瀏覽網頁,則重複執行 `./cgi_server_test`
  • 找出 cgi_server_test 發生 Segmentation Fault 的原因並修正
  • 指出 web-server-cgi 實做上的缺陷、可改進之處

mini-arm-os

  • 需求如同 2015q3 Homework #8,彙整之前學生的成果,整理相關程式碼
  • mini-arm-os 的 07-Threads (不要增加新的目錄!) 基礎上,實做 shell, priority-scheduling, file system
    • 可參考 tony0620emma (莊彥宣) 的程式碼與共筆
  • 需要解釋為何程式碼得以運作,以及闡述整合過程中遇到的困難