csapp-局部性
局部性分為兩中:時間局部性和空間局部性。
在時間局部性中,如果一個內存的位置被引用了一次,那么在將來有可能會被多次引用。
在空間局部性中,如果一個內存位置被引用了一次,那么在將來有可能這個內存附近的內存位置會被引用。
局部性的意義:局部性允許引入一個成為高速緩存存儲器的存儲器來保存最近被引用的指令和數據項,提高主存的訪問速度。
接下來看個例子;
int sumvec(int v[N]){int i=0,sum=0; for(i=0;i<N;i++)sum+=v[i]; return sum;}在這段代碼中,我們可以看到,sum每一次循環都會被引用,因此sum具有良好的時間局部性。sum是一個標量,沒有空間局部性,因為sum永遠只占一個空間。
數組V在內存中的分布為
很明顯,v是一個矢量,在內存中連續分布,因此它具有良好的空間局部性,所以我們可以肯定sumvec具有良好的局部性
sumvec這樣順序訪問一個向量每個元素的函數,具有步長為1的引用模式,我們稱步長為1的引用模式為順序引用模式。
一個連續向量中,·每隔k個元素進行訪問,成為步長為k的引用模式,很明顯,步長越長,空間局部性就越差。
接下來看一個空間局部性不連續的例子
int sumarraycols(int a[M][N]){int i,j,sum=0; for(int i=0;i<N;i++) for(int j=0;j<M;j++){sum+=a[j][i];} return sum;}a為一個二維矩陣,上面這個函數是按照列的順序來訪問二維數組的。由二維數組的內存結構可以看出,步長M,所以這個函數的空間局部性并不好。
看到一篇博客,寫得挺好的,https://www.cnblogs.com/glczero/p/4478274.html。這里把二維數組的行掃描,列掃描的時間做了比較。
習題6.7 將 sum+=a[k][i][j]變成 sum+=a[i][j][k]即可 習題6.9 clear1函數就是一個一個掃描,步長為1 clear2函數會在vel和acc數組中不斷地跳躍 clear3很明顯最差。?
轉載于:https://www.cnblogs.com/illfuckingkyzb/p/10201854.html
總結
- 上一篇: 安卓基础之读取联系人的姓名和电话
- 下一篇: ywy_c_asm题