2016-01-07 62 views
0

CPU的平均數據和指令訪問時間是否取決於指令的執行時間? 例如,如果缺失率爲0.1,50%的指令需要內存訪問,L1訪問時間爲3個時鐘週期,錯誤懲罰爲20,指令在1個週期內執行,平均內存訪問時間是多少?CPU內存訪問時間

+0

是這功課嗎? –

+0

Nop試圖弄清楚演講的內容。 – chamathabeysinghe

回答

0

我假設你正在談論一個計算指令可以有內存引用的CISC體系結構。如果你有一系列訪問內存的ADD,那麼內存請求將會比一系列相同數量的DIV更頻繁,因爲DIV需要更長的時間。這不會影響內存訪問的時間 - 只有引用的局部性會影響平均內存訪問時間。

如果你在談論RISC架構,那麼我們有單獨的內存訪問指令。如果內存指令的缺失率爲10%,那麼平均訪問延遲將是L1訪問時間(對於命中或未命中爲3個循環)加上L1未命中代碼錯過率(0.1 * 20),總計平均訪問時間5個週期。

如果你的一半指令是內存指令,那麼每個指令的時鐘數(CPI)將取決於未命中率和依賴關係。 CPI也會受到存儲器訪問時間可能與計算重疊的程度的影響,這在無序處理器中就是這種情況。

我無法更好地回答你的問題,因爲你不是非常具體。要在計算機體系結構課程中取得好成績,你必須學會​​如何計算平均訪問時間和CPI。

0

嗯,我會繼續前進,回答你的問題,但後來,請在下面看我的意見,把東西放到現代的眼光看:

Time = Cycles * (1/Clock_Speed) [ unit check: seconds = clocks * seconds/clocks ] 

因此,要獲得準確的時間,你需要要知道你的機器的時鐘速度,現在,我的回答將是週期

Avg_mem_access_time_in_cycles = cache_hit_time + miss_rate*miss_penalty 
           = 3 + 0.1*20 
           = 5 cycles 

請記住,在這裏我假設的0.1的命中率是指高速緩存的10%訪問命中緩存的條款。如果你的含義是指令的10%,那麼你需要減半(因爲只有50%的內存是內存操作)。現在

,如果你想的平均CPI(每INSTR週期)

CPI = instr% * Avg_mem_access_time + instr% * Avg_instr_access_time 
    = 0.5*5 + 0.5*1 = 3 cycles per instruction 

最後,如果你想要的平均INSTR執行時間,你需要的頻率(時鐘速度)的倒數乘以3的機器。

評論: Comp。 Arch類基本上教會你一個非常簡單的硬件工作方式。當前的架構要複雜得多,這樣的模型(即上面的等式)是非常不現實的。首先,訪問不同級別的緩存的時間可以是可變的(取決於響應緩存在多核或多核CPU上的物理位置);對存儲器的訪問時間(通常爲100個週期)也取決於資源爭用(例如帶寬)等等。最後,在現代CPU中,指令通常並行執行(ILP),具體取決於處理器流水線的寬度。這意味着添加instr執行延遲基本上是錯誤的(除非您的處理器是一次只執行一次instr的單處理器處理器,並且在未命中事件上阻塞其他指令,如緩存未命中和錯誤預測...)。然而,爲了教育目的和「平均」結果,方程是可以的。

還有一件事,如果你有一個多級高速緩存層次結構,然後將一級緩存中的miss_penalty將作如下安排:

L1$ miss penalty = L2 access time + L1_miss_rate*L2_miss_penalty 

如果你有L3緩存,你做了類似的事情L2_miss_penalty等