Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/visual-studio-code/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Memory 计算实现高速缓存的系统中的平均内存访问时间_Memory_Computer Architecture_Memory Access - Fatal编程技术网

Memory 计算实现高速缓存的系统中的平均内存访问时间

Memory 计算实现高速缓存的系统中的平均内存访问时间,memory,computer-architecture,memory-access,Memory,Computer Architecture,Memory Access,最近,我在这个概念上解决了不少问题。有时我发现存在这种令人不安的不一致性: In order to find avg memory access time we have the formula : Tavg = h*Tc +(1-h)*M where h = hit rate (1-h) = miss rate Tc = time to access information from cache M = miss penal

最近,我在这个概念上解决了不少问题。有时我发现存在这种令人不安的不一致性:

In order to find avg memory access time we have the formula :

Tavg = h*Tc +(1-h)*M

where  h     = hit rate
       (1-h) = miss rate
       Tc    = time to access information from cache
       M     = miss penalty  (time to access main memory)
也就是说,解决方案表明,对于某些问题X,计算“M”的值,如上文“情况1”所示,而对于某些其他问题Y,计算“M”的值,如上文“情况2”所示。我尽最大努力分析这些问题,以找出使计算不同的因素是什么。没有帮助。我遇到过X和Y完全相同的情况,只是值不同,但计算是针对X的,如案例1所示,针对Y的,如案例2所示


我不知道是什么原因导致计算结果不同?提前谢谢。

差异来自未命中延迟的计算时间。如果问题表明该时间是未命中惩罚,则应表示该时间是缓存命中时间之外的时间;因此,总未命中延迟是缓存命中的延迟加上惩罚。(很明显,您的公式和变量没有采用这种方法,将M(实际上是未命中的总访问时间)标记为未命中惩罚。)

不幸的是,如果一个问题是“内存访问延迟”或“二级访问延迟”,那么就更不清楚总访问延迟是指(即,包括一级命中的时间)还是指一级未命中所需的额外时间。前者在概念上有一些优势(例如,它可以隐藏一些细节,例如在命中数据返回之前开始的二级访问——比如使用早期未命中检测或未命中预测,甚至对一级和二级进行并行标记查找)。后者可能使解释L2大小或关联性的延迟效应变得更简单(例如,如果加倍大小会将仅L2访问延迟增加50%,那么通过加倍大小将仅L2访问延迟从8个周期增加到12个周期,通过四倍大小将仅L2访问延迟增加到18个周期,可能比总延迟从10个周期增加(Tc=2)更容易理解至14个循环和20个循环。)

(另外,使用未命中惩罚数可以稍微简化访问时间公式——Tavg=Tc+(1-h)Tm——因为Tc总是被消耗掉的。)


执行延迟也会出现类似的问题。对于标量管道,执行一个周期的指令通常被称为零延迟,因为执行后续依赖指令时没有延迟。但是,在考虑超标量实现时,这种延迟的使用可能会令人困惑。

平均内存访问时间=%instruction*(命中时间+指令未命中率*未命中惩罚)+%data*(命中时间+数据未命中率*未命中惩罚)

评论中提出了相关问题:


注释:为什么公式中没有命中率enitihas 5月13日18:09

公式中没有命中率的原因是每次访问(无论是否命中一级缓存)都必须访问一级缓存,因此具有命中时间,即一级缓存的访问延迟


因此,无论访问是否命中,命中时间(一级缓存的访问延迟)都需要包含在公式中,以计算平均访问时间。

我假设这是针对一级缓存的。如果有两级缓存,L1和L2,这种情况会发生怎样的变化?为什么公式中没有命中率?真正的原因是未命中惩罚相对于L1命中,这就是为什么它被称为“惩罚”,而不是L1未命中/L2命中的总时间。您是对的,大多数一级缓存设计与标记并行获取数据,因此在确定命中/未命中后,没有额外的时间让数据准备就绪。但这并不是公式发挥作用的必要条件。这个公式甚至在一个疯狂的系统中仍然有效,在这个系统中,请求与检查L1并行发送到L2(因此L1命中根本不会减少命中层次结构其余部分的请求的数量/带宽)。hrm,在仔细阅读了这个问题后,问题的主要主题似乎是未命中惩罚是否有效“未命中请求的总时间”、“超出一级命中所需的时间”或“从缓存其余部分开始检查的时间”(正如Paul Clayton的优秀回答所指出的,这与一级命中时间不同,因为未命中检测可能比从命中中检索数据要快一些)。
Case 1: M = Tm + Tc
Case 2: M = Tm