天天看點

《計算機存儲與外設》----1.2 Cache存儲器的性能

在判斷加入cache是否劃算之前,需要知道增加cache對計算機性能會産生多大的影響。這裡首先介紹一個簡單的模型,忽略實際cache系統的細節:每個系統的cache都不完全一樣。特别是,該模型假定每個cache項都為一個字寬,而實際cache存放的是一個塊(包含若幹個字)。

cache系統的主要參數就是命中率(hit ratio)h,它定義為所有通路操作在cache中命中的機率,由系統操作統計結果決定。通路局部性的作用使得命中率通常較高,基本保持在98%左右。本章的後續部分将讨論影響命中率的因素以及使h保持較高值的方法。

在計算cache對處理器性能的影響之前,需要引入一些術語:

主存儲器通路時間     tm

cache通路時間          tc

命中率                        h

失效率                        m

加速比                        s

加速比(speedup ratio)是沒有cache時存儲系統的通路時間與具有cache時系統通路時間的比值。對于n次訪存,如果沒有cache,則總的通路時間為ntm。

對于n次訪存,如果有cache,總通路時間是n(htc+mtm)。失效率m,定義為m=1-h,因為通路要麼命中要麼不命中。是以,具有cache的系統的加速比為:

《計算機存儲與外設》----1.2 Cache存儲器的性能

該表達式假定所有操作均為訪存操作,這是不正确的,因為處理器也要完成内部操作。後面還會談到這一點。如果不關心主存儲器和cache的絕對速度的話,可以引入一個參數,k=tc/tm,它定義了cache相對主存儲器的速度比例。由h和k定義的加速比為:

《計算機存儲與外設》----1.2 Cache存儲器的性能
《計算機存儲與外設》----1.2 Cache存儲器的性能

圖1-6顯示了當k=0.2時加速比s與命中率h的關系曲線。正如大家了解的那樣,當h=0時的加速比為1,因為所有訪存操作都通路了主存儲器。當h=1時,所有訪存操作都在cache中進行,是以加速比為1/k。

從圖1-6中得出的一個最重要的結論是,加速比對命中率敏感。隻有當h接近90%,cache的性能影響才十分顯著。該結論與常識是一緻的。如果h低于90%,通路主存儲器的時間占較大比例,快速通路cache帶來的效果對系統性能的影響不大。

上述加速比s的公式适用于存儲器和cache可并行工作的系統,因為它假定每個存儲周期開始時,同時(并行)通路主存儲器和cache;也就是,訪存位址同時交給cache和主存儲器。如果命中,終止對主存儲器的通路。如果cache不響應,資料将從主存儲器中傳回。

《計算機存儲與外設》----1.2 Cache存儲器的性能

實際微處理器能夠獲得的加速比并不如上述公式得到的那樣樂觀。真實微處理器的操作速度由其時鐘周期、每個存儲器通路所需時鐘周期數以及由于通路存儲器而處于等待狀态的時間确定。加快cache的速度并不如減少等待時間重要。即使使用十分快速的cache,也不可能将訪存時間減少到比不包含等待狀态的一個總線周期還要短。

看看下面這個例子。

微處理器的時鐘周期時間              10ns

每個總線周期所需最小時鐘周期數  3

存儲器通路時間                             40ns

由于訪存帶來的等待時間         2個時鐘周期

cache通路時間                              10ns

由于通路cache帶來的等待狀态      0

這些資料表明,存儲器通路需要(3個時鐘周期+ 2個等待狀态)×10ns=50ns,通路cache需要3×10ns=30ns。該計算過程并不包含主存儲器和cache的實際通路時間。加速比為:

《計算機存儲與外設》----1.2 Cache存儲器的性能

假設平均命中率為95%,根據上式計算的加速比是1.61(即161%)。該結果比直接拿cache和主存儲器的訪存時間來計算得到的結果(即2.46)要小。

以上公式省略了不需通路存儲器的内部操作的影響。下面看看德克薩斯儀器公司操作說明書中給出的既考慮非存儲器通路操作又考慮通路cache和主存儲器中的資料時,微處理器的平均周期時間tact。

《計算機存儲與外設》----1.2 Cache存儲器的性能

式中:

fint為處理内部操作指令所占比例(以70%為例);

fmem為訪存操作指令所占比例(以30%為例);

tcyc為處理器的時鐘周期時間(以10ns為例);

twait為由于cache失效導緻的等待時間(以50ns為例);

tcache為cache通路時間(以5ns為例);

h為命中率(以0.9為例)。

把給出的實際參數的例子代入公式計算,可得:

《計算機存儲與外設》----1.2 Cache存儲器的性能

即使是這個結果也沒有給出全部事實,因為實際系統不會一次僅在cache和主存儲器間移動一個字的資料。cache基本存儲單元的容量不隻是一個字,而是一塊(line),它通常包括4~64個位元組。當發生失效時,從存儲器中會傳輸一塊資料到cache。是以,失效開銷不僅僅是調入一個資料,而是包括一塊資料。

此時,也許可以對前面提到的存儲牆進行讨論。假設某系統以周期為機關的指令平均執行時間timeavc為:

《計算機存儲與外設》----1.2 Cache存儲器的性能

式中,cpuuse表示非訪存指令所占比例(以80%為例);tcpu表示這類指令執行需要的時鐘周期數(假定為1);memoryuse表示訪存指令所占比例;tmemory表示這類指令執行需要的時鐘周期數(假定為10)。如果命中率h為0.95,則:

timeave = 0.80·1 + 0.20·0.95·1 + 0.20·(1-0.95)·10 = 0.80 + 0.19 + 0.10 = 1.09個周期

經過一段時間,處理器的速度提高10倍,cache的速度提高5倍,dram的速度提高2倍。cpu、cache與dram的通路時間之比不再是1∶1:10,而是1∶2∶50。此時,

timeave = 0.80·1 + 0.20·0.95·2 + 0.20·(1-0.95)·50 = 0.80 + 0.38 + 0.50 = 1.68個周期

假設第二種情況下,時鐘周期時間是第一種情況的1/10,加速比為10.9/1.68=6.488。這表明時鐘和cpu的速度快了10倍,而吞吐量隻增加了6倍。

如果考慮cache的寫失效,可以重新審視cache的性能。

《計算機存儲與外設》----1.2 Cache存儲器的性能
《計算機存儲與外設》----1.2 Cache存儲器的性能
《計算機存儲與外設》----1.2 Cache存儲器的性能