Computer Architecture A Quantitative Approach 讀書筆記chapter1-1

KIRITO1111發表於2017-07-12

第一章,Fundamentals of Quantitative Design and Analysis

並行的各種分類

並行的種類分為兩種。

其一。Data-Level Parallelism (DLP) 資料層次並行。

there are many data items that can be operated on at the same time.

其二.Task-Level Parallelism (TLP) 任務層次並行。

tasks of work are created that can operate independently and largely in parallel。

這兩種並行又可以分為以下4種主要實現方式。

1.Instruction-Level Parallelism指令級並行,屬於DLP資料並行。利用編譯器來充分利用指令流水線pipeline,以及像指令預測這樣的並行方式。

2.Vector Architectures 向量架構和GPU(圖形處理單元)。這同樣屬於DLP的實現,這樣的做法是將同樣的指令應用到多個資料中實現並行。

3.Thread-Level Parallelism 執行緒並行機制。既有DLP的屬性也有TLP的屬性。這樣的機制緊密結合硬體以允許不同執行緒間的交流。

4.Request-Level Parallelism請求級並行特點由使用者或者作業系統所制定的,促使不同任務間並行實現。

最後有有Michael Flynn 為我們分了4種平行計算機。

1.SISD ,主要是單核單執行緒cpu,並且只能使用DLP技術而不能使用TLP,如流水線,但同時刻執行兩個任務是不可能的。

2.SIMD  ,這樣的計算機有多個處理單元,但是隻能執行同一條指令,每一個處理單元都有單獨的記憶體。典型的不論是intelcpu中的AVX-512 指令集達到512的寬度。但卻使用同一條指令,處理大量資料。這在現代處理器中被廣泛採用。同樣的現代顯示卡中gpu也是採用這樣的方法,並且發生在一個運算器的內部。並且可以只有一個控制器。

這裡我要提個問題。simd到底是發生在一個計算單元中,還是多個計算單元中。如果是多個的話,現代處理器中一個核內是否只有一個計算單元?

3.(MISD ,現代沒人使用了。

4.MIMD 這意味著每個計算單元可以單獨執行指令,並且每一個計算單元都有一個控制單元。

那麼平時老掛在嘴邊的計算機架構到底是什麼呢?
書中的回答包含了數個方面的統稱。
從指令集設計,邏輯電路設計,功能組織等方面。甚至於電源管理和散熱也包含在計算機架構之中。
當然這也只是作者的看法罷了。不過作者所說指令集設計是最有挑戰的方面。
下面就開始講述instruction set architecture(ISA) 了
ISA(指令集架構)被認為是軟體和硬體的邊界。(想來也很合理,指令集的實現是通過硬體的方式實現,而軟體是使用指令集作為介面來使用硬體)
ISA包含下面幾個方面。
1.ISA種類,現代計算機都市通用型計算機。也就是說指令操作物件既可以是記憶體也可以是暫存器。X86中有16個通用暫存器,和16個浮點暫存器。MIPS有32個同樣 暫存器和32個浮點暫存器,是X86的一倍。典型的ISA包含兩類,X86這樣的register-memory ISA,可以直接對記憶體資料在一條指令中操作。還有就是load-storeISAs ,比如ARM和MIPS。這樣的指令集只能通過load和store操作訪問記憶體。
2.I記憶體地址址安排方式。現代的主要區別就是指令記憶體地址是否採用對齊方式,這在ARM和MIPS中是確實使用的,這會加快譯碼階段的執行。
3.I地址模型。也就是記憶體定址方式。
4.I指令操作物件的型別和大小。
5.I操作種類。這點上分為RISC和CISC。
6.I控制流指令。跳轉,條件跳轉指令
7.I指令編碼。包括固定長度和可變長度指令。

即使具有相同指令集的cpu也會有不同的微架構microarchitecture 。如intel的i7系列晶片。
它們都具有相同的X86指令集但在cache的組織形式和流水線是不相同的。

關於TDP,表示的是計算機持續的功率,這並不代表最大功率。最大功率往往是TDP的1.5倍左右。
如果電源供給不足,會導致cpu降壓,從而使cpu停止工作。
其次,散熱不足可能導致cpu停止工作,甚至永久性傷害,(這看起來就像個DIY裝機部落格)
現代cpu在cpu過熱的時候採用自動降頻的辦法降低功耗。
關於CMOS管制作的晶片。電消耗主要花在電晶體的開啟和關閉上,這些電消耗稱為dynamic energy。
每個電晶體的能量消耗 正比於 電晶體電容*電壓^2
這裡的能量消耗只是電晶體從0->1->0或者從1->0->1的能量消耗。
實際應用中每秒鐘的能量電晶體能量消耗為
動態能量消耗 正比於 1/2 * 電晶體電容 * 電壓^2 * 電晶體0-1切換的頻率。
這樣就能夠獲得一個資訊,就是一個任務在不同頻率cpu下執行時,需要的總能量不變。但是功率減小。但是在不同電壓下工作時會減少總能量消耗,同時減小電壓消耗。

接下來一個公式令人感興趣,是關於晶圓產出的dies的良品率或者產出量的一個經驗公式:
dies的產出量 = 晶圓數量 /(1 + 每個die面積*單位面積下的差品率)^N
其中N是處理複雜度因子process-complexity factor 用來衡量生產難度。

1.7可靠性分析。
Module reliability 模組的可靠性對於提供服務的裝置的水平而已是一個重要的衡量標準。
而平均故障metric
時間(MTTF)是一種可靠性測量方法,表示沒百萬小時的系統故障時間
平均修復時間(MTTR) 是中斷服務的處理時間。
所以故障平均間隔時間(MTBF) = MTTF + MTTR 。

1.8 Measuring, Reporting, and Summarizing Performance
CPUtime ,elapsed time 
cpu時間 , 執行時間
現代使用者衡量方式大多通過benchmark跑分來實現。