《计算机体系结构:量化研究方法》读书笔记
Lecture 1: Quantitative Approach
1.計算機體系結構與計算機組成原理有什么區別?
計算機的實現包括兩個方面:組成和硬件。組成一詞包含了計算機設計的高階內容,例如存儲器系統,存儲器互連,設計內部處理器 CPU (中央處理器——算術、邏輯、分支和數據傳送功能都在內部實現)。有時也用微體系結構一詞來代替“組成”。例如AMD Operon和Intel Core I7是兩個指令集體系結構相同但組成不同的處理器。這兩種處理器都實現X86指令集,但它們的流水線和緩存組成有很大的不同。硬件指的是一個計算機的具體實現,包括計算機的詳盡邏輯設計和封裝技術。
真正的體系結構涵蓋了計算機設計的所有三個方面:指令集體系結構、組成或微體系結構、硬件。計算機架構師設計的計算機必須滿足功能需求,并達到價格、功耗、性能和可用性指標。
2.現如今的芯片設計趨勢或者現狀是怎樣的?
功率是現如今使用晶體管的主要限制,通過降低電壓可以大幅度降低動態功率和能耗,二十年來,電壓已經從最初的5V降低到1V以下,然而如果不能降低電壓或提高每個芯片的功率,那可能就要減緩時鐘頻率的增長速度,這也是從2003年以來的主要趨勢。
3.怎樣設計出低成本的集成電路?
雖然集成電路的成本以指數形式下降,但基本的硅制造工藝沒有變化:仍需要對晶圓進行測試,切割成晶片進行封裝。對于計算機設計人員來講,由于制造工藝決定了晶圓的成本、晶圓成品率和單位面積上的缺陷數,設計人員唯一可控的就是晶片面積。
4.如何對計算機的性能進行評估?
使用量化的研究方法,從計算機的響應時間、執行時間、吞吐量來進行綜合評估。
主要通過基準測試來對計算機進行性能的測試與度量,包括:桌面基準測試、服務器基準測試。要注意SPEC基準測試集,是一個使用相當廣泛的測試集。
5.如何理解程序局部性?
局部性原理指的是程序常常重復使用它們最近使用過的數據和指令。有一條廣泛使用的經驗規律:一個程序90%的執行時間花費在僅10%的代碼中。充分利用時間局部性和空間局部性可以優化程序的執行時間。
處理器中指令的提取與譯碼器的使用可能比乘法器要繁瑣的多,所以應該優先對其進行優化。
6.設計多核芯片的意義何在?
2005年以來,之所以轉向一芯多核,并不是因為取得了什么重大突破,顯著簡化了并行編程方式。而是因為ILP(指令級并行)壁壘和功率壁壘的存在存在而別無選擇。在一個芯片中設計多個處理器并不能保證功率較低。而的確有可能設計一種消耗更高功率的多核芯片。其潛力僅僅在于能夠用幾個低時鐘頻率的高效核心代替高時鐘頻率的低效核心,從而有可能提高整體效率。因此多核處理器并不是萬能的。
First Microprocessor Intel 4004, 1971
7.Amdahl 定理有何作用?
利用Amdahl 定理可以計算出通過改進計算機某一部分而能獲得的性能增益。
Lecture 2: Instruction Set Principles
指令集架構(Instruction Set Architecture, ISA)-匯編語言程序員或編譯器編寫者可見
ISA包括:
- 1.編程寄存器
- 2.操作數訪問
- 2.操作數的類型和大小
- 4.指令集
- 5.尋址模式
- 6.指令編碼
ISA 是硬件與軟件之間的連接點。任何在內存里執行的程序都將通過 ISA 進行解耦從而能在底層架構上執行。
計算機體系結構和抽象層如下:
算術運算指令的執行主要分為以下幾種:
- Stack type:操作數隱含在棧頂指針
- R-R type:操作數都在寄存器中
- R-AC type:一個操作數隱含在 AC 計數器中
- R-M type:需要訪存操作去取操作數
Lecture 3: Memory Hierarchy Design
動機:
時間局部性(temporal locality)
被引用過一次的存儲器位置在未來會被多次引用(通常在循環中)。
空間局部性(spatial locality)
如果一個存儲器的位置被引用,那么將來他附近的位置也會被引用。
正是由于局部性原理的存在和“在給定實現技術和功率預算的情況下,硬件越小,速度可以越快”的準則,存儲器體系結構便運營而生。
有學生可能會問,為什么需要多層次的存儲結構,使用一個理論上無限大的存儲器去完成一些工作不就可以了么?這樣表面上是可以的,但是我們沒有辦法立刻馬上從這樣一個十分龐大的存儲器中得到我們想要的機器字。我們不得不去構建分層的結構存儲器,每一層的容量都要大于前一層,但訪問速度也要慢一些。
當前的一大趨勢:存儲器性能和處理器性能之間的差距越來越大。
優化緩存性能的高級方法:
1.使用小而簡單的第一級緩存,用來縮短命中時間、降低功率。
大容量L1緩存會給時鐘頻率帶來影響,所以近來L1緩存大小的漲幅很小。近些年來,L1緩存中使用了較高的相聯度,容易知道,直接映射的命中時間略快于兩路組相聯,而近些年來處理器在訪問緩存時至少需要兩個時鐘周期,因此命中時間較長不會帶來太大影響。
2.采用路預測以縮短命中時間。
路預測指的是在緩存中另外保存了一些位,用于預測下一次緩存訪問組中的路和塊。實驗表明,對I-緩存的準確度要優于對D-緩存的準確度(這也符合常理)。
3.實現緩存訪問的流水化、以提高緩存帶寬
這個方法沒有看懂
4.采用無阻塞緩存,以提高帶寬
允許“缺失時仍然命中”甚至“多次缺失仍然命中”。
5.采用多組緩存以提高緩存帶寬
6.關鍵字優先和提前重啟動以降低缺失代價
7.合并寫緩沖區以降低缺失代價
將缺失數據地址與寫緩沖區中的有效項目進行對比,如果匹配,則將新數據與這個項目合并在一起,稱為寫合并。
8.采用編譯器優化來降低缺失率
這種方法應用的較為廣泛,尤其是在循環優化之中。
著重講一下循環分塊:
分塊技術的目的是在緩存中載入的數據被替換之前,在最大限度上利用它。
for (int i = 0; i < N; ++i)for (int j = 0; j < N; ++j){r = 0;for (int k = 0; k < N; ++k)r = r + y[i][k] * z[k][j];x[i][j] = r;}循環分塊技術可以簡單的看作是將兩層循環變為四重循環,表面上增加了時間復雜度,實則是提高了緩存的命中率,分塊后的代碼如下:
for (int jj = 0; i < N; jj = jj + B)for (int kk = 0; j < N; kk = kk + B)for (int i = 0; i < N; i = i + 1)for (int j = 0; j < min(jj + B, N); j = j + 1){r = 0;for (int k = 0; k < min(kk + B, N); k = k + 1)r = r + y[i][k] * z[k][j];x[i][j] = x[i][j] + r;}B 被稱作分塊因子,這樣的循環優化技術在深度學習硬件加速器中的應用十分廣泛,很多新型的架構都是基于這樣的技術設計的。
如何最直觀的理解分塊原理?
可以從原始代碼中看出來,對數組 z 的訪問步長較大,對數組 x 的訪問并不那么頻繁且按列訪問,在內部的兩層循環中可以達到 NN 次,如果緩存大小較大,能夠裝下所有的x、y、z三個 NN 數組,那么并不存在什么問題,但是如果緩存較小,顯然缺失率會較大。
解決方法就是對數組的訪問步長進行限制,改為計算一個大小為 B*B 的子矩陣。
總結
以上是生活随笔為你收集整理的《计算机体系结构:量化研究方法》读书笔记的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: a modern epidemic
- 下一篇: 10.25-sio