4 通過減少失效開銷來提高 cache 效能
5 通過降低命中時間來提公升 cache 效能
cache在儲存層次結構中處於cpu和主存之間,因此,cache的效能對會對cpu的效能造成很大的影響,它通過程式的區域性性原理,使得cpu更快地獲取原來儲存在主存中的資料,從而提公升效能。
cache一般的結構如下:
上圖展示的是乙個 2路組相聯cache的結構,cache中的資料是以塊為單位儲存的,塊的大小沒有明確的限制,可以是幾
十、上百個位元組等等。cache中除了資料字段,還包括了tag欄位和valid字段,它們的安逸分別是:
cache的基本工作過程是:
下介紹兩種評價cache效能的方法:
其定義如下:
平 均訪
存時間=
(1−失
效率)×
命中時間
+失效率
×(命中
時間+失
效開銷)
=命中時
間+失效
率×失效
開銷平均訪存時間=(1-失效率)\times 命中時間+失效率\times (命中時間+失效開銷)=命中時間+失效率\times 失效開銷
平均訪存時間
=(1−
失效率)
×命中時
間+失效
率×(命
中時間+
失效開銷
)=命中
時間+失
效率×失
效開銷
c pu
時間=i
c×(c
piex
ecut
ion+
失效率×
平均訪存
次數×失
效開銷)
×時鐘周
期cpu時間=ic\times (cpi_+失效率\times 平均訪存次數\times 失效開銷)\times 時鐘週期
cpu時間=
ic×(
cpie
xecu
tion
+失效
率×平均
訪存次數
×失效開
銷)×時
鐘週期平均訪
存次數=
訪存次數
指令數平均訪存次數=\frac
平均訪存次數
=指令數
訪存次數
通過以上的兩個式子,我們可以發現,影響cache效能的指標主要有這三項:命中時間、失效率、失效開銷,接下來,就針對這三項指標,提出一些cache的改進措施。
在增加塊大小時,一方面可以更好地利用程式的空間區域性性,減少失效率,然而,在cache容量一定的情況下,增加塊大小的同時,cache中存放的總的塊數將會減少,這會增加衝突失效的發生,導致失效率增大。因此,需要做出合理的折中,通過調整塊大小來降低失效率。
另一方面,塊大小的選取還與主存的頻寬、延遲有關係。例如,如果當前主存有高延遲、高頻寬的性質,此時,塊大小應該選取地大一些,因為在這種情況下,如果cache發生失效,那麼需要從主存讀取資料,因為當前主存是高頻寬和高延遲的,多讀取一些字無疑是更加划算的。
在另一篇部落格中有提到。
一些通過降低 cache 失效率來提高效能的方法.
當cache中有資料需要寫入主存時,一般的做法是暫停指令執行的流水線,進行寫主存的操作,而這個寫主存操作所消耗的時間對於cpu來說是巨大的開銷,一般是上百個時鐘週期。為了讓cpu盡可能減少等待的時間,可以設定乙個寫緩衝結構:
這時,當cache中有資料需要寫入主存時,cpu將要寫入的內容先寫到寫緩衝結構中,轉而去做其他工作,這時寫緩衝往主存寫資料和cpu執行其他指令就可以並行執行了,這樣便可以減少失效開銷。
寫緩衝的效能影響了失效開銷,可以通過寫合併技術來提高寫緩衝的效率和利用率。
寫合併的工作原理為,當寫緩衝已經包含了其他塊,這些塊對應的位址將會逐一被檢查,以確定即將寫入主存的塊的位址是否與寫緩衝的某個塊能匹配上,若匹配上,則將這兩個塊進行合併。事實上,一般而言,連續多字一起寫入主存往往比將各字逐一寫入主存要高效一些。
這是一種複雜度較高,但被廣泛採用的技術。基本思想就是在cache在處理資料失效時繼續服務其他訪問,這樣就可以重疊多個cache訪問,從而提高cpu的效能。
還有諸如請求字優先技術、多級cache技術都可以在一定條件下減少失效開銷。
這就是多級cache設立的第一級cache所遵循的基本原則。
trace cache的基本原理.
在另一篇部落格中有介紹。
如何提公升Eclipse效能
eclipse作為開發人員強力推崇的開發工具之一,其與jbuilder相比,很多同盟都認為使用eclipse比使用jbuilder省記憶體,而且eclipse屬於免費開源專案,而像jbuilder和idea等均屬於商業非免費工具,當然還有其他一些說法。個人選擇eclipse作為主要開發工具的原因主要...
如何提公升Eclipse效能
eclipse作為開發人員強力推崇的開發工具之一,其與jbuilder相比,很多同盟都認為使用eclipse比使用jbuilder省記憶體,而且eclipse屬於免費開源專案,而像jbuilder和idea等均屬於商業非免費工具,當然還有其他一些說法。個人選擇eclipse作為主要開發工具的原因主要...
如何提公升程式設計師的「效能」
程式設計師經常痴迷於優化程式的效能,我們始終會圍繞一些讓人絞盡腦汁的優化建議,比如 如何簡化 如何提公升軟體執行速度 如何提高軟體穩定性等等。本文來討論一下程式設計師優化自身 效能 的一些建議。1 提高文件編寫能力 缺乏文件,對軟體開發是致命的,一方面是軟體無追溯能力,無法找到軟體開發的起源,思想 ...