什麼是快取的區域性性原理?

2021-09-28 18:46:29 字數 2128 閱讀 9949

了解計算機的儲存結構,對我們編寫優秀的程式很有幫助,雖然計算機的內部對我們來說是透明的,但是如果我們能多了解一些計算機的執行機制,對我們編寫高效的程式大有好處。

我們來看一下計算機的儲存結構

越接近cup的儲存器速度越快容量越小,越遠離cup的儲存器速度越慢容量越大。

最高層的l0暫存器,cpu可以在1個時鐘週期內訪問它們

訪問l1快取記憶體,cup大約需需要4個時鐘週期

訪問l2快取記憶體,cup大約需需要10個時鐘週期

訪問l3快取記憶體,cup大約需需要50個時鐘週期

訪問主存,cup大約需要200個時鐘週期

訪問硬碟,cup大約需要1千萬個時鐘週期

快取記憶體比主存大約快10倍,主存比硬碟大約快5萬倍,所以cup取資料盡量要在高一層的儲存裝置中取,盡量避免在低一層的儲存裝置中取,這是快取設計的基本思想。

快取是乙個更小更快的裝置,它作為更大更慢裝置的緩衝區。儲存層次結構中的高層儲存裝置都作為其低一層的儲存裝置的快取,比如l0是l1的快取,l1是l2的快取,l2是l3的快取,l3是主存的快取等等。

為方便操作,一組組連續的資料物件被分成乙個個資料塊,不同層次之間的資料塊大小是不一樣的。比如l0和l1之間傳送的是乙個位元組大小的塊,l2和l1之間(以及l3和l2,l4和l3)傳送的是幾十位元組大小的塊,而l5和l4(硬碟和主存)之間傳送的是幾百或幾千位元組的塊。

高一層的儲存裝置總是存著低一層儲存裝置的部分資料塊,由於高一層的儲存裝置容量比第一層的儲存裝置小,所以快取的資料只能是下一層裝置資料的一小部分。

如果cpu要讀取資料塊1,cpu先在快取記憶體中查詢資料塊1,如果找到就直接返回,這就叫「快取命中」,因為快取的速度比主存的速度要快很多,快取命中大大提高了效率。

如果cpu要讀取資料塊5,資料塊5不在快取中,那麼叫做「快取不命中」。那麼cpu就要去主存中取到資料塊5,然後把資料塊5放到快取記憶體中,如果快取中的資料存滿了,就要覆蓋現存的乙個資料塊。

這裡有個問題,如果快取的資料已經放滿了,那麼資料塊5應該替換哪乙個資料塊呢?這就涉及到放置策略了,最簡單的就是隨機放置策略,隨機找乙個資料庫替換掉,這個策略雖然簡單粗暴,但是代價較高,cpu想定位到某個資料塊比較麻煩。

還有一種限制性的放置策略,比如主存中第 i 塊資料,必須放到 i%4 位置的快取記憶體中,例如,主存中第0,4,8,12號資料庫會放到快取記憶體的第1個塊中,主存中的第1,5,9,13號資料塊會放到快取記憶體的第2個資料塊中。上圖就是用了這種放置策略。

乙個優秀的程式通常具有良好的區域性性,它們通常會重複使用已用過的資料,或者使用已用過資料的鄰近資料,也就是說,程式常常會使用集中在一起的區域性資料。

區域性性分為:時間區域性性和空間區域性性。如果乙個記憶體位置被重複的引用,那就是有了時間區域性性,如果乙個記憶體位置被引用了,很快這個位置的附近位置也被引用了,這就有了空間區域性性。

由於快取中的資料是乙個個資料塊,每個資料塊包含幾十到幾千位元組不等,如果某個程式要訪問陣列a,第一次快取沒命中,cpu會從主存中取出包含陣列a的乙個資料塊,複製到快取中來,下次訪問a[1],a[2],a[3]的資料時每次都快取命中,極大的提高了效率,實現了空間的區域性性。

寫個程式來驗證下:

迴圈累加int[10000][10000] 的二維陣列,按i,j 的順序訪問利用了快取的空間區域性性,效率提高了200倍。

在程式中注意利用快取的區域性性原理,能大大提高程式的執行效率哦。

區域性性原理

區域性性原理 cpu訪問 儲存器時,無論是訪問指令還是訪問資料,所訪問的 儲存單元 都趨於聚集在乙個較小的連續區域中。三種不同型別的區域性性 時間區域性性 temporal locality 如果乙個資訊項正在被訪問,那麼在近期它很可能還會被再次訪問。程式迴圈 堆疊等是產生時間區域性性的原因。順序區...

區域性性原理

區域性性通常有兩種不同的形式 時間區域性性和空間區域性性。時間區域性性 在乙個具有良好的時間區域性性的程式中,被訪問過一次的儲存器位置很可能在不遠的將來會被再次訪問。空間區域性性 在乙個具有良好空間區域性性的程式中,如果乙個儲存器位置被訪問了一次,那麼程式很可能在不遠的將來訪問附近的乙個儲存器位置。...

區域性性原理

平常在服務端軟體開發中,通常會把資料儲存在資料庫裡,服務端遇到的效能瓶頸往往發生在訪問資料庫的時候,在資料庫前通過redis加資料快取是常見的效能優化方式。如何判定新增快取的策略一定是有效的呢?不同的儲存器之間,訪問速度 和容量都有幾十乃至上千倍的差異。在效能和 的巨大差異,能不能既享受cpu ca...