2017-05-07 53 views
0

我试图在添加二级缓存时计算每条指令的内存停滞周期。在添加二级缓存时计算内存停顿

我有以下给出的值:

Direct Mapped cache with 128 blocks 
16 KB cache 
2ns Cache access time 
1Ghz Clock Rate 
1 CPI 
80 clock cycles Miss Penalty 
5% Miss rate 
1.8 Memory Accesses per instruction 
16 bit memory address 

L2 Cache 
4% Miss Rate 
6 clock cycles miss penalty 

据我所知,所述的方法来计算的存储器停顿周期是通过使用下面的公式:

Memory stall cycles = Memory accesses x Miss rate x Miss penalty 

哪些可以简化为:

Memory stall cycles = instructions per program x misses per instructions x miss penalty 

我所做的就是乘以1.8 x (.05 +.04) x (80 + 6) = 13.932

这是正确的还是我错过了什么?

回答

1

首先我不知道有关命中损失为L1和L2的给定参数(L1为80次和L2为6次)的。

反正使用的数据,因为它是:

  1. 发出每时钟周期1个指令
  2. 有在指令1.8内存的说明。
  3. 有5%的访问可能会错过L1,另有5%的可能会错过L2。如果您错过了L1和L2,则只能访问主内存。那将是.04 * .05 = 0.002 = 0.2%这意味着每个内存访问,你很可能访问主内存0.2%的时间。
  4. 既然你有每个指令1.8内存访问,你很可能会访问每个指令的主存储器0.002 * 1.8 = 0.0036 = 0.36%
  5. 当你遇到在L1和L2一个小姐,你会得到停滞80 + 6 = 86周期(忽略任何优化)
  6. 每指令时,你只会遇到.36%主存储器访问。因此,每条指令的内存停顿周期为.0036 * 86 = 0.3096
+0

在#3中,您将乘以L1和L2高速缓存的缺失率以获得主内存访问权限? – Rick

+0

是的。只有在L1和L2都未命中的情况下才能访问主内存。这是5%(L1)中的4%(L2)。所以主存访问的百分比是这两者的乘积。 –