CPU内存访问时间

时间:2016-01-07 14:20:21

标签: cpu-usage cpu-architecture cpu-cache

CPU的平均数据和指令访问时间是否取决于指令的执行时间? 例如,如果未命中率为0.1,则50%指令需要存储器访问,L1访问时间需要3个时钟周期,误判为20,指令以1个周期执行,平均存储器访问时间是多少?

2 个答案:

答案 0 :(得分:0)

我假设您在谈论CISC架构,其中计算指令可以具有内存引用。如果您有一系列访问内存的ADD,那么内存请求将比相同数量的DIV序列更频繁,因为DIV需要更长时间。这不会影响内存访问的时间 - 只有引用的位置会影响平均内存访问时间。

如果您正在谈论RISC拱门,那么我们会有单独的内存访问指令。如果存储器指令的未命中率为10%,那么平均访问等待时间将是L1访问时间(命中或未命中3个周期)加上L1未命中罚分乘以未命中率(0.1 * 20),总计平均访问时间5个周期。

如果你的一半指令是存储器指令,则会影响每指令时钟(CPI),这取决于未命中率和依赖性停顿。 CPI也会受到内存访问时间与计算重叠程度的影响,而无序处理器就是这种情况。

我无法更好地回答你的问题,因为你并不是非常具体。要在计算机体系结构课程中取得好成绩,您必须学习如何计算平均访问时间和CPI。

答案 1 :(得分:0)

好吧,我会继续回答你的问题,但是,请阅读下面的评论,把事情放到现代的角度来看:

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

因此,为了获得您需要知道机器时钟速度的确切时间,目前,我的答案将是Cycles

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

请记住,这里我假设您的未命中率为0.1意味着10%的缓存访问错过了缓存。如果你意味着10%的指令,那么你需要将其减半(因为只有50%的instrs是内存操作)。

现在,如果你想要平均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乘以机器频率(时钟速度)的倒数。

评论: 比较。 Arch类基本上教你一种非常简化的硬件方式。当前的架构要复杂得多,这样的模型(即上面的等式)是非常不现实的。首先,对各种级别的缓存的访问时间可以是可变的(取决于多核或多核CPU上的响应缓存的物理位置);根据资源的争用(例如带宽)等,访问存储器的时间(通常为100个周期)也是可变的。最后,在现代CPU中,指令通常并行执行(ILP),具体取决于处理器流水线的宽度。这意味着累加instr执行延迟基本上是错误的(除非你的处理器是单一问题处理器,一次只执行一个instr并阻止其他指令关于未命中事件,如缓存未命中和错误预测......)。但是,出于教育目的和“平均”结果,方程式是可以的。

还有一件事,如果你有一个多级缓存层次结构,那么1级缓存的miss_penalty将如下所示:

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

如果您有L3缓存,则会对L2_miss_penalty执行类似操作,依此类推