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

版本 93e3d35fad09ad51ece1e851e352cada9a157250

User/Veternal1226

Changes from 93e3d35fad09ad51ece1e851e352cada9a157250 to current

---
title: Veternal1226 (李維哲)
categories: User
...

Veternal1226 (李維哲)
------------------
**簡介:**

- 成功大學 電腦與通信工程研究所 系統與資訊組(2019~)
- 中正大學 資訊工程學系(2015~2019)

聯絡資訊
------------------
- email: ``q36084117@gs.ncku.edu.tw``
- github: ``Veternal1226``

進階電腦系統理論與實作 2020秋季班 個人評量
=======================

作業及筆記
------------------------
- lab0: [HackMD](https://hackmd.io/@Veternal1226/lab0)、[Github](https://github.com/Veternal1226/lab0-c)
- quiz1: [HackMD](https://hackmd.io/@Veternal1226/quiz1)、[Github](https://github.com/Veternal1226/sys2020_quiz1)
- quiz2: [HackMD](https://hackmd.io/@Veternal1226/quiz2)
- quiz3: [HackMD](https://hackmd.io/@Veternal1226/quiz3)
- quiz4: [HackMD](https://hackmd.io/@Veternal1226/quiz4)
- quiz5: [HackMD](https://hackmd.io/@Veternal1226/quiz5)
- quiz6: [HackMD](https://hackmd.io/@Veternal1226/quiz6)
- Project: quiz15: [HackMD](https://hackmd.io/@Veternal1226/quiz15)

- 課堂隨筆紀錄: [筆記](https://hackmd.io/d4HfV6k_SHiwEDEtSglE7Q)

所見所聞心得
------------------------
這堂課是我第一次上jserv的課,選這門課的原因是因為同實驗室的學長推薦,據他們的說法可以增加寫程式的能力,且能得到非常實用的程式相關技巧與觀念。在實際上了這門課之後,發現真的是獲益良多。老師非常認真地安排教材,解說的也非常清楚,有一堂的隨堂測驗我"不幸"猜到滿分,但其實有一題我完全不懂,在檢討時老師只提了這題幾個關鍵提示,我就能看懂這題的關鍵點了,不得不說在抓學生問題痛點這塊老師真的很擅長。不過這堂課能學到的東西真的是多到一學期學不完全部,也有非常大量的議題可以深入,這學期間沒讀仔細的部分目前正在慢慢補齊,下學期因為要專注在畢業論文的研究而可能無法選老師的課,但還是會以旁聽或線上課程的方式參與課程。

自我評量分數 (1 到 10 級分)
------------------------
8.5級分,在上半學期的部分,我都有把上課的講座錄影檔看完,但在11月初時,因為我們實驗室接了計算機中心的一個校慶計畫,課程錄影檔進度這邊有些缺漏,而在12月時我主要要忙科技部計畫的提出,所以也缺了不少部分。但實體課堂的部分我的參與度是全勤,因為在這段時間我可以只想課堂的內容不被干擾。不過我的基礎在一開始時就有感覺跟大家有點能力差距,所以還是有很多地方是一知半解的,因此我只能給自己8.5級分。

回顧題:

a) 知道 x - y < 0 敘述為何不能寫為 x < y 嗎? (CS:APP 第 2 章)

`x` 與 `y` 並不會發生 overflow,但 `x-y` 的結果有可能造成 overflow,若發生 overflow 的話 `x-y<0` 就不等價於 `x<y`。

k) 知道 C 語言編譯器如何做 Tail Call Optimization (TCO) 嗎?以 gcc 來說,什麼樣的遞迴程式可做 TCO,又有什麼樣的遞迴程式無法呢?

根據 [你所不知道的 C 語言:編譯器和最佳化原理篇](https://hackmd.io/@sysprog/c-compiler-optimization) 與 [你所不知道的C語言:遞迴呼叫篇](https://hackmd.io/@sysprog/c-recursion) C語言編譯器可透過 goto 替換來減少 stack frame,從而達到最佳化。能夠做 Tail Call Optimization (TCO) 的關鍵在於每層 stack 需不需要保留,也可從副程式是否只有在最後一個動作才呼叫自己且無額外運算,例如[quiz7](https://hackmd.io/@sysprog/2020-quiz7) 的測驗 1 ,funcA有額外運算所以不能 TCO,funcB則可以做 TCO。

m) 知道 fixed point 嗎?相較於 floating point,這樣的機制有何優缺點呢?知道真實世界如何運用嗎?

根據[浮點數運算和定點數操作](https://hackmd.io/@NwaynhhKTK6joWHmoUxc7Q/H1SVhbETQ),使用定點數的代價為犧牲表示極大/小數的能力,但可能使運算速度提升。在此篇文章的舉例中,`b=a*2` 的範例下浮點數與定點數的表現差不多,反而是定點數需要更多指令數與 cycle 數;但 `b=a*5` 的範例下雖然定點數的組合語言比較多,但是定點數所花的時間卻是浮點數的一半,大幅增加了運算速度。目前使用定點數取代浮點數的案例出現在需要大量運算的深度學習上,因為 FPU 需要大量額外硬體支援。

v) 本學期課程內容中,讓你印象最深刻、顛覆過往認知的部分是什麼?請舉例說明

我印象最深刻的部分是老師在舉許多範例時,是直接使用自己做過的程式作為舉例,教材與作業也幾乎是用實作的而不是拉現成的。最深刻的範例是 GBA 模擬器部分,一直以來我都是使用別人做好的模擬器而已,沒想到老師與修課的同學能夠直接實作出這個模擬器,甚至是改進它。
我印象最深刻的部分是老師在舉許多範例時,是直接使用自己做過的程式作為舉例,教材與作業也幾乎是用實作的而不是拉現成的。最深刻的範例是 GameBoy 模擬器部分,一直以來我都是使用別人做好的模擬器而已,沒想到老師與修課的同學能夠直接實作出這個模擬器,甚至是改進它。