chap4.處理器體繫結構指令執行階段
- 取指(fetch):從儲存空間中讀取指令位元組,地址為PC的值。從指令中抽取出指令指示符位元組的兩個四位部分,稱為icode(指令代碼)和ifun(指令功能)。它可能取出一個寄存器指示符位元組,指明一個或兩個寄存器運算元指示符rA和rB。它還可能取出一個四位元組常數字valC。它按順序方式計算下一條指令的地址valP,valP等於PC的值加上已取指令的長度。
- 解碼(decode):從寄存器檔案中讀入最多兩個運算元,得到值valA和值valB。
- 執行(execute):ALU要麼執行指令指明的操作,計算儲存空間引用的有效地址,要麼改變棧指標。
- 訪存(memory):可以將資料寫入儲存空間,或者從儲存空間中讀出資料。
- 更新PC(PC update):將PC設定成下一條指令的地址。
chap5.最佳化程式效能妨礙編譯器最佳化的因素(memory blocker):
1.儲存空間別名使用(memory aliasing):兩個指標可能指向同一個儲存空間位置的情況。
2.函數調用:當函數調用會修改全域變數時,就有可能妨礙編譯器最佳化。
代碼最佳化:
1.消除迴圈的低效率:代碼移動;
2.減少程序呼叫;
3.消除不必要的儲存空間引用:採用局部變數(存放在寄存器中的)儲存中間結果。
超標量(superscalar):在每個刻度可以執行多個操作,而且是亂序的,意思就是指令執行的順序可以與它們在機器級程式中的順序不一致。
4.迴圈展開:減少了不直接有助於程式結果的操作的數量;提高局部的並行性,從而減少了整個計算中關鍵路徑的長度。
5.書寫適合用條件傳送實現的代碼。
Amdahl定律:S=1/((1-a)+a/k)。S:加速比;a:占系統時間的百分比;k:提高倍速。因此要想大幅度提高整個系統的速度,必須提高整個系統很大一部分的速度。
chap6.儲存空間階層儲存空間層次
- 寄存器:緩衝4位元組或8位元組,訪問時間為0個刻度,由編譯器管理;
- TLB(翻譯後備緩衝器):緩衝地址翻譯的頁表,訪問時間為0個刻度,由MMU(儲存空間嵌入式管理單元)管理;
- L1快取:緩衝64位元組塊,訪問時間為1個刻度,由硬體管理;
- L2快取:緩衝64位元組塊,訪問時間為10個刻度,由硬體管理;
- L3快取:緩衝64位元組塊,訪問時間為30個刻度,由硬體管理;
- 虛擬儲存空間:緩衝4-kb的記憶體頁,訪問時間為100個刻度,由硬體+OS管理;
- 緩衝區快取:緩衝部分檔案,訪問時間為100個刻度,由OS管理;
- 磁碟緩衝:緩衝磁碟檔案,訪問時間為100000個刻度,由控制器韌體管理;
- 網路緩衝:緩衝網路檔案,訪問時間為10000000個刻度,由AFS/NFS用戶端程式管理。
可以看出,上層儲存空間緩衝了下層儲存空間的一部分內容,層次越高,訪問速度越快,單位成本也越高,相應的容量越小。儲存空間緩衝的核心思想:局部性空間局部性:被引用過一次的儲存空間位置,很有可能在不久的將來會引用它附近位置的儲存空間;時間局部性:被引用過一次的儲存空間位置,很有可能在不久的將來會被再次引用到。快取:(S,E,B,m)S:快取組數E:組內的快取行數。行數越多,關聯度越高,時間局部性越好。能提高命中率,降低由於衝突不命中出現抖動的可能性,但是會增加命中時間,相應的會增加不命中處罰。B:塊大小(位元組)。塊越大,空間局部性越好,能提高命中率,也會提高不命中處罰(替換成本提高了)m:物理地址位元
- 直接映射快取:E=1
- 組相聯快取:E>1
- 全相聯快取:S=1
儲存空間地址:t+s+b=mt:被用作行標記,因為儲存空間中多個塊會被映射到同一個組。t = m-s-bs:組索引號。2^s = Sb:塊索引號。2^b = B選用中間位作為組索引的原因:它可以使得儲存空間中相鄰的塊被映射到不同的組中,從而使得空間局部性良好的程式運行時能充分利用快取。