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稱為...