乙個編寫良好的電腦程式常常具有良好的區域性性,它們傾向於引用鄰近於其他最近引用過的資料項的資料項,或者最近引用過的資料項本身。區域性性通常有兩種不同的形式:
下面來看個區域性性的**示例:
變數sum在每此迴圈中被引用一次,因此具有良好的時間區域性性。變數v的元素被順序讀取,具有良好的空間區域性性。
像這種順序訪問向量每乙個元素的函式,我們稱為步長為1的引用模式,也叫順序引用模式。乙個連續向量中,每隔k個元素進行訪問,就稱為步長為k的引用模式。隨著步長增長,空間區域性性下降。
那麼,為什麼區域性性會對效能產生影響呢,因為在儲存器的層次結構中使用了快取。
再次祭出這張圖:
儲存器層次結構的中心思想是,對於每個k,位於k層的更快更小的儲存裝置作為位於k+1層的更大更慢的儲存裝置的快取。換句話說,層次結構中的每一層都快取來自較低一層的資料物件。
快取管理
在每一層上,某種形式的邏輯必須管理快取。某個東西要將快取劃分成塊,在不同的層之間傳送塊,判定是命中還是不命中,並處理它們。管理快取的邏輯可以是硬體、軟體,或是兩者的結合。
接下來我們以快取記憶體為例來了解下快取的工作原理。
首先來看下通用的快取記憶體儲存器結構:
位址結構劃分:
以下是對各引數的說明:
行匹配:根據標記找到所在行。若標記不匹配或有效位未設定則快取不命中。
字抽取:根據塊偏移找到所需資料塊的位置。
若快取不命中,則從儲存器層次結構的下一層取出被請求的塊,然後將新的塊儲存在組索引指示的組中的乙個快取記憶體行。之後像快取命中一樣讀出資料。
寫資料寫不命中:要寫的字沒有快取。
在編寫程式時,建議在心裡採用乙個使用寫回和寫分配的快取記憶體的模型。
在平時編寫程式時,根據快取原理,意識到時間區域性性與空間區域性性,有助於我們編寫更高效的**。而根據這種思想,也可以構建更高效的處理結構。
儲存器層次結構
sram 靜態隨機訪問儲存器 sram儲存穩定,訪問速度快 具有雙穩定特性,一般作為1,2級快取記憶體。dram 動態隨機訪問儲存器 dram儲存不如sram訪問速度快,相比也沒有sram穩定,一般作為主存 記憶體 和圖形系統幀緩衝區。dram晶元中的乙個單元儲存乙個位,w個單元儲存乙個位元組,w個...
儲存器層次結構
電腦程式的乙個基本屬性 區域性性 儲存器層次結構分類 1 cpu暫存器 放在cpu裡面的記憶體,特點 速度快,高 2 快取記憶體儲存器 主儲存器 磁碟。特點 cpu之外,需要時訪問呼叫,相對較慢 兩類ram 1 sram 靜態 1 更快,更貴。2 作為快取記憶體儲存器,主要負責運算需要 3 雙穩態的...
儲存器層次結構
在簡單模型中,儲存器系統是乙個線性的位元組陣列,而cpu能夠在乙個常數時間內訪問每個儲存器的位置。雖然到現在為止沒有任何乙個有效的模型,可以模仿它的工作方式。實際上,儲存器系統是乙個具有不同容量,成本和訪問時間的儲存裝置的層次結構。cpu暫存器儲存最常用的資料。靠近cpu的小的,快速的告訴快取儲存器...