日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

csapp-局部性

發布時間:2024/4/17 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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

總結

以上是生活随笔為你收集整理的csapp-局部性的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。