C07: simulator
預期目標
- 搭配 現代處理器設計,實際練習系統軟體開發
- 思考函式呼叫和掌握遞迴程式開發技巧
- 擴充給定的指令集 (ISA) 模擬器
預期得到以下輸出:
- 用給定的
tests/hello.s
檔案做示範
- 組譯和執行
- 組譯並輸出 ELF 格式目的檔
tests/hello.o
- 組譯並輸出 ELF 到給定的路徑
- 載入之前組譯得到的 ELF 檔案並執行
- 輸出的 ELF 檔案可用 objdump 工具分析和觀察:
作業要求
- 閱讀 現代處理器設計 教材和觀看裡頭所有錄影,記錄你的心得和疑惑
- 研究給定的 full-stack-hello,學習其中 ISA 和模擬器實作,並在 GitHub 上 fork full-stack-hello
- 閱讀 你所不知道的C語言:遞迴呼叫篇 和觀看對應講座錄影,用 full-stack-hello 的指令實作 Fibonacci 數列
- 需要包含 recursive 和 non-recursive 實作,分別置於檔案
tests/fib-recursive.s
和 tests/fib-iterative.s
- 修改
vm.c
(和對應的原始程式碼),允許執行時期由使用者 (和 Makefile
) 帶入參數,如 --input
,這數值應該透過暫存器作為上述 Fibonacci 數列程式的 Fib(N)
- 研究現有 full-stack-hello 的自動測試程式,整合上述兩種 Fibonacci 程式實作,並且比較效能 (需要包含 vm 內部的 cycle count)
- 除了 recursive 和 iterative 版本,應該一併考慮以下 Fibonacci 數列的實作方式,並善用 GNU plot 製圖和解讀
- Tail recursion
- Q-Matrix
- Fast doubling
- 過程中可修改 full-stack-hello 模擬器的程式碼,加入追蹤 / 除錯用途的指令 (instruction),也應該探討模擬器的運作機制並說明自己修改的方式
- 注意 Fib(46) 之後的數值會超過 232 可表達的範圍,需要設計有效的數值表示機制來處理 (如用兩個 32-bit 暫存器保存 264 數值)
- 觀察 Add label support 的實作方式,試著在full-stack-hello 給定的組譯器中新增 label 的支援
- 相關的背景知識錄影共有 18 小時 (當然不可能看了就懂,請預留思考和提問討論的時間),務必及早開始
- 將你的觀察、上述要求的解說,以及各式效能改善過程,善用 gnuplot 製圖,紀錄於「作業區」
截止日期
- Nov 9, 2017 (含) 之前
- 越早在 GitHub 上有動態、越早接受 code review,評分越高