計算機組織 === ### 問題們 Questions #### 1. register 有 32 個,但如果一個程式有 32 個以上的變數需處理,register 該怎麼辦? ``` 可以用 lw 和 sw 的功能來接續儲存與呼叫出變數當中的值 基本上 compiler 在編譯過程會把所要用到的 register 優化到 31 個以內。 (因為一個是 $zero,基本上不能動) 所以一個程式就算有 32 個以上的變數需要做運算,或者資料之間有 dependency ,還是會利用存入/取出 或 stall 方法來做處理。 如果沒辦法優化到 31 個 register 以內的話,基本上程式沒辦法跑。 (rs, rt, rd 也只有 5 bit 可辨別) ```  #### 2. (作業4) 要怎麼傳出 data 的地址? ``` 來認真寫完作業四吧~ ``` #### 3. PLA 的功用? ``` 算是一種解碼器,把 opcode 變成各個 MUX 的訊號,會因為設計者不同,電路不同,但最後結果基本 上都是一樣的。 ```  #### 4. 這些暫存器的 bit 都在儲存什麼? ``` 64 bit = instruction 32 bit + address 32 bit 133 bit = address 32 bit + register address 32*2(64 bit) + extend 32 bit + write register 5 bit 102 bit = address 32 bit + ((zero 1 bit)) + ALU result 32 bit + write destination 32 bit + write register 5 bit 69 bit = DM output 32 bit + ALU 32 bit + write register 5 bit ```  #### 5. Loop Unrolling 當中**如果沒有 data dependency** 的話,是不是就不需要用很多個暫存器在各個迴圈裡面? [ [ 參考網址 ] ](http://gitqwerty777.github.io/computer-architecture2/#loop) ``` 是的。換名字(換暫存器)的原因是因為怕資料之間的讀寫會有問題,所以需要別的暫存器來支援。 ```  #### 6. 如果 offset 算是一種偏移量的話,那每個 word 有 4 byte 空間,因此在 byte offset 部份是 2 bit ,而整體的 block offset 則是取決於一個 block 有幾個 word 的空間,因此基本上 block 的大小通常會是 4 byte 的倍數,但在 ==作業六當中的測資三指定 block 的大小為 1 byte== 算是有誤的? [[ 參考網址 ]](https://chi_gitbook.gitbooks.io/personal-note/content/memory_operands.html) - 然後考試當中 25% 的那大題,offset 的計算是因為數字們基本上不會為 4 的倍數,因此 offset 的 bit 長度即是以多少 word 數需要幾 bit 來區隔? ``` byte address: 直接有算進去 word 的空間大小,所以取決於每臺電腦的一個 word 有幾個 byte。 word address: 直接一個 word 為單位的狀況來看,所以會出現 1,2,3... 之類的。(考試常考) 至於作業當中的一個 block 只有 1 byte 的狀況,其實還是有可能發生的,因為每臺電腦會隨一個 word 的大小,影響到 block 的大小。 ```  <hr/> #### 7. **(cache size)** 只是好奇想問真正的 cache size 是要包含 valid 和 tag 的指引空間? (作業當中的計算過程基本上對 cache size 只有算到一個 block 可容納多少 word 空間的考量而已,好像並沒有要真的算到 valid 、 tag 的部份...) ``` 基本上考試 cache size 概念都是作業當中的幾個 block、一個 block 可容納幾個 word 的考量而已。 而這張投影片想表達的 cache size 則是在真正實作上需要考量到的,比如 valid, tag, dirty bit 等等都是一個 cache size 所需要計算的。(不過考試就不用想那麼多了) ```  #### 8. set associate [ [ 網址 ]](https://www.ptt.cc/bbs/Grad-ProbAsk/M.1314199978.A.22F.html) ``` 沒事沒事,記得 8K blcoks 的 8K 不是指大小的 8KB... ```  <hr/> ### 其它觀念 - **CISC** 和 **RISC** 差別 指令集有 ARM, MIPS, RISC-V 等等,而 ==CISC== 是指比較複雜的指令集,比如 X86(32 bit), X64(64 bit)這些,這些指令通常的長度不一,因此解碼比較複雜。而 ==RISC== 則是指比較簡單的指令集,比如作業寫過的 MIPS 和 RISC-V,它們指令的長度基本上都是 32 bit,而 MIPS 和 RISC-V 雖然長得很像(有重疊性),但解碼過後,它們是完全不一樣的指令集。 - 取資料一定會經過 cache CPU 如果要取資料,一定會先去 cache 找它要的資料是不是在裡面,如果沒有,才去 main memory 要資料,所以無論如何,取資料一定要計算到 cache 的時間。 因此資料 miss 的 penalty 還是要算 cache 取資料的時間。 - **TLB**, **PT**, **cache** 三者關係 (重要重要!!!) TLB 是 PT(Page Table) 的子集,所以如果不在 PT 就一定不在 TLB 當中。但是 cache 和 PT 沒有直接關係,雖然它們都是在 main memory 裡面,但 PT 不一定和 cache 有所關係──可能 PT hit 但是 cache miss。 (不過一定至少會在 disk 裡) 但如果 PT miss 的話,就代表它一定在 disk 裡面,所以不可能發生 cache hit 狀況。  ###### tags: `計算機組織` `問題`
×
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