CSAPP 儲存體系實驗

2021-08-04 07:08:40 字數 3047 閱讀 5090

1. 觀察cache對程式資料訪問的加速作用;

2. 掌握程式設計中利用cache的基本方法;

觀察**訪存模式對效能的影響、編寫**測試cache層次結構和容量等
1. 硬體:pc或任何一款具有cache的功能的計算機

2. 軟體:windows/linux作業系統、c語言編譯器

設計如圖1、2所示的**,對二維陣列按行訪問和列訪問分別進行訪問,並計算各自所用時間。

圖 1 **部分1

圖 2 **部分2

如圖3所示,進行多組實驗,分別按規模為10000、15000、20000、25000、30000、350000,得到執行結果。

圖 3 實驗執行結果

將結果轉化成圖表,如圖4所示,可以明顯看出列訪問比行訪問要耗時得多,因此可以證實陣列的儲存是按行儲存,當按行訪問時空間區域性性高,因此訪問時間少。

圖 4 結果轉化成的圖表

1. 用c語言實現矩陣(方陣)乘積一般演算法(程式a),填寫下表:

矩陣大小

100500

1000

1500

2000

2500

3000

一般演算法執行時間

0.010374

0.73934

7.55010

28.111937

53.701337

143.709244

257.994514

分析:為了減少實驗誤差,我做了兩次實驗,實驗結果如圖5、6所示,並將結果取平均值,可以明顯看出隨著輸入規模的增大,程式執行時間的增長非常快。

圖5 程式a實驗結果1

圖6 程式a實驗結果2

程式的執行時間在time1和time2之間,由圖7可以看出,在內層迴圈中陣列a的訪問順序是按照儲存順序的,空間區域性性很高;而陣列b的訪問順序則是跳轉的,每執行一次迴圈的跳躍補償為size*4個位元組,當規模比較大時空間區域性性很低。因此隨著規模的增大,程式的cache命中率會降低許多。

圖 7 程式a的關鍵部分**

2. 程式b是基於cache的矩陣(方陣)乘積優化演算法,填寫下表:

矩陣大小

100500

1000

1500

2000

2500

3000

優化演算法執行時間

0.0084575

0.6019215

4.788213

16.4042305

38.291184

75.3040035

129.439939

分析:對於程式b我也做了兩次實驗,實驗結果如圖8、9所示,並將結果取平均值,可以明顯看出隨著輸入規模的增大,程式執行時間的增長也非常看,但執行時間明顯比程式a要少。

圖8 程式b執行結果

圖 9 程式b執行結果2

為了更好地體現兩個程式執行時間的差距,我做了如圖10所示的圖表,圖中可以明顯的看出當規模比較大時,兩個程式執行時間的差距是比較大的。當規模很小時,兩者的差距並不明顯,而且還有可能誤差的影響。

圖 10 執行時間的比較

為了解釋兩者執行時間的不同,就對程式b的**進行分析,如圖11所示。從圖中可以看出,程式a跟b的不同之處在於,程式b是先將陣列存在a和c中,然後通過拷貝的方式將c的轉置存到b中,這樣就使得在下面的運算中陣列a和b的訪問順序都是與其儲存順序是一致的,因此空間區域性性得到提高。

圖 11 程式b的關鍵部分**

3. 優化後的加速比(speedup)

矩陣大小

100500

1000

1500

2000

2500

3000

加速比1.226603

1.228299

1.576809

1.7137

1.402446

1.908387

1.99316

加速比定義:加速比=優化前系統耗時/優化後系統耗時;

所謂加速比,就是優化前的耗時與優化後耗時的比值。加速比越高,表明優化效果越明顯。

分析:

我將加速比也做了圖表,如圖12所示,從圖中可以看出,除了規模為2000的這個點之外(可能是實驗次數不足導致),總體上隨著規模的增大,加速比也在增大。而當規模小於500時兩者的加速比接近1,也即兩者執行時間相差無幾,優化效果不明顯。這點可以由上面的解釋中推出:當規模很小時,跳躍的步長不大,因此cache的命中率比較高,優化效果不明顯;而且程式b多了個陣列拷貝的過程,這也可以解釋在某次實驗中,程式a的執行時間反而比b的執行時間還要小。

圖 12 加速比的比較

CSAPP實驗環境搭建

配置ubuntu 選擇ubuntu作為實驗的執行環境,下面是一些配置命令。docker pull ubuntu 18.04 apt get updateapt get install sudosudo apt get install build essentialsudo apt get insta...

csapp實驗記錄 Datalab

data lab實驗是關於計算機資訊的表示,主要涉及到整數,浮點數,以及相關操作的位級表示和操作 題目列表 題解bitxor x,y 計算 x y,只使用與和取反操縱實現異或操作 int bitxor int x,int y 通過與和非操作講二進位制位中相同的部分變為不同的部分,然後取反與,不同的部...

csapp實驗一總結

實驗一主要是關於位運算跟補碼和浮點數的表示的。整數部分 浮點數部分 在說題目之前我想先來寫一些浮點數表示的方法,以及一些注意事項。現在計算機基本上都採用了ieee754標準來表示浮點數,改標準把浮點數的表示為v 1 s m 2 ev 1 s m 2 e v 1 s m 2e這種形式,其中s ss稱為...