owned this note
owned this note
Published
Linked with GitHub
## floating-point format
> 會考一題單精度轉換
> ex: (-3.625)10
> 變成二進制

> 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, 不能超過, 因為代表其他數字


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

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

> 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)

### detectiom the need to Forward

> #### 三排以上都是安全的
> 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
------
> 4. or $10 $1 $2 -> 安全的
> rd, rs = a, rt = b


> #### rd 不能為0, 防止變成0號暫存器
> #### EX/MEM.RegWrite 為了防止sw指令

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

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

> 透過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)