owned this note changed a year ago
Published Linked with GitHub

floating-point format

會考一題單精度轉換
ex: (-3.625)10
變成二進制
image

  1. 浮點數沒有使用二補數的概念 前面的S代表正負數
  2. Bios -> 主要是將Exponent中的負數變成正數
  3. flaot 最小值為2的-126次方(因為指數偏移量是127, 如果是-127+127 = 0, 這是不可以的)
  4. 0 是用來表示0或者非標準數
  5. 為什麼非標準數會逐漸underfloat 位元組的關係,所以正常都使用標準數,非標準數雖然可以更多位元,但這就是精密度喪失的原因
  6. 非標準數最小可以到多少? 1x2的-149次方(因為加上中間23位元)
  7. 標準數最小可以到多少? 1x2的-126次方
  8. 最大數值為什麼是127次方, 因為如果加上128就會到255, 不能超過, 因為代表其他數字
    image

image
1.比較兩個數字的指數;將較小的數向右移動,直到
指數將匹配較大的指數
2.加有效數
3.標準化總和,要么右移並增加指數,要么左移
並遞減指數
4.判斷overflow or underflow
5.是的話例外處理
6.不是的話將有效值四捨五入到適當的值位數
7.判斷是否標準化(浮點數形式)
8.是就結束
9.不是就重複第三步驟

image

  1. small alu 主要確認指數
  2. exponent diffentence 主要指數項相減給後續移位用
  3. 這是一個多工選擇器, 以左邊fracrtion 如果是0就往下移動 右邊的fracrtion則是1就往下
    範圍:第一部分:一直到shift right, 第二部分:big ALU

image

  1. 為什麼需要在第一步的時候先-127,
    例如:[1.23*10^(-3)] * [3.543 * 10^(-12)], 兩個數值都有透過編碼+127, 所以需要減掉一次。
  2. 第五步可以透過XOR邏輯閘展示出來
  1. 將兩個數字的有偏指數相加,從總和中減去偏差
    得到新的有偏指數
  2. 有效數字相乘
  3. 進行標準化,轉移
    正確並增加指數
  4. 判斷Overflow or
    underflow?
  5. 有的話例外
  6. 沒有的話將有效值四捨五入到適當的值
    位數
  7. 判斷是否標準化
  8. 不是就動第三步驟
  9. 是就判斷正負數後結束

pipline

第一週期單純讀取 - IF
第二週期可以指令解碼 - ID
第三週期ALU計算 - EX
第四週期記憶體讀取 - MEM
第五週期寫回register - WB

危障

  1. 結構危障(structure hazards):因為只有一個記憶體, 他不能同時處理第一週期跟第四週期, 解決辦法:記憶體要買兩條
  2. 資料危障(data hazards): 通常出現在ALU, 計算錯誤, 取決於相依性, 解決方式:forwards and 泡泡, 兩個連續add, sub指令有相依性:兩個泡泡(stall) + 二級forwards , 如果相依性lw指令 + R指令, 要放一個泡泡(stall) + 一級forwards,
  3. 控制危障(control hazards):到某個位置, beq相同往右, 不同就往左(pc+4), 因為前一個branch 進來, 後面的指令就已經進入pipline, 如果決定要branch到別的地方就會出錯, 所以控制危障事先預測, 像是隔離14天, 只要有出國就先回來隔離, 通常沒確診猜錯就會形成控制危障, 通常猜錯在第三週期, 猜錯的話就用IF.Flush 讓他們無效化變成stall包起來

資料危障

硬體解決可以使用 forwards

Wb for load 會發生問題

比如帳單問題, IF = 櫃檯, ID = 飯, EX = 主菜, MEM = 副菜, WB, 帳單要跟著走 不然會出錯, 上一個還沒結束, 下一個就開始寫入, 帳單會出錯
ex. lw $s1 $s2(100)
image

detectiom the need to Forward

image

三排以上都是安全的

sw 不用forwards, 因為不用wb

  1. add $s1 $s2 $s3 1 -> 2 = #1 = 1a
  2. sub $s4 $s1 $s5
  3. and $s7 $s8 $s1 1 -> 3 = #2 = 2b
  1. add $s2 $s1 $s3
  2. sub $s1 $s5 $s4
  3. and $s8 $s1 $s7

  1. or $10 $1 $2 -> 安全的

rd, rs = a, rt = b

image

image

rd 不能為0, 防止變成0號暫存器

EX/MEM.RegWrite 為了防止sw指令

image

1,3 -> 2a 2,3 -> 1a
2a 不能forward , 因為第二行也有一個WB, 如果2a forward 值會是錯的 (2a and 1a 不能同時發生)

image

一定要放一個stall, 慢一拍後再來fordward

image

透過nop 指令讓他們無害通過(包在泡泡裡), 把所有訊號變成0, 不戰、不和、不守、不死、不降、不走, PC不能+4, IM的地方要讓指令停止以及Reg要維持一樣的位置


記憶體(Memory)

Locality

  • Temporal locality(時間的區域性):
    -> It’s likely to need this word again in the near future

Example: int a = 0;(and then many programs in here); a = a + 1;

  • Spatial locality(空間的區域性):
    -> There is high probability that the other data in the block will be needed soon

Cache Memory

Block placement

看block應該放在哪裡

  • Direct mapped (對號座) : 取餘數作為index
  • Fully associative (自由座) : 任意位置都可以放置
  • Set associative (只可選車廂) : 取Set數量的餘數

Block identification

  • Block address
  • Block offset

Source: Lecture 7: Caches
https://people.engr.tamu.edu/djimenez/taco/utsa-www/cs5513-fall07/lecture7.html

Block replacement

衝突發生時,Block的取代方式

  • Random
  • LRU(Least Recently Used Cache)
  • FIFO(First in First out)

Write strategy

假設執行一個儲存指令時,我們只將資料寫到資料快取中(而沒有寫到主記憶體)時,會使快取和記憶體是不一貫(inconsistent)的 => 同步的概念

1. 針對資料命中而言(Write hit)

  • Write through(較常使用,並搭配寫緩衝器Write buffer):
    優點: 資料一致性
    缺點: 操作量大,等待時間較長,也因為操作量大,故需要write buffer減少硬體衝突

-> 當cache裡沒有需要的資料時,修改cache裡面的值(如果沒有空格子,則覆蓋在cache內最舊的資料),並修改MEM裡面對應的Block內的值

  • Write back(適合嵌入式系統):
    優點: 節省了大量的寫入操作,速度快
    缺點: 因為只在快取作更改,資料會有不一致的問題,並且在快取丟失資料時,通常也來不及做存取至記憶體

-> 將要修改的值標記為Dirty Block,在下次Block要被取代時才寫回MEM

2. 若沒命中(Write miss):

  • Write allocate policy

-> 將所需資料讀入快取,然後再將資料寫到被讀入的單元
-> 把要寫的地址所在塊先從main memory調入cache中,然後再寫入cache

  • No write allocate policy

-> 總是直接將資料寫回記憶體

Source:
什麼是write-allocate policy? https://blog.csdn.net/dahailantian1/article/details/78584856

磁碟陣列(RAID)

Select a repo