Caching 具有写分配策略的写回缓存公式 如果考虑分级单级回写Cache < /St> > 强>写分配策略>,则在强>写操作中给出平均访问时间公式:-< /P>

Caching 具有写分配策略的写回缓存公式 如果考虑分级单级回写Cache < /St> > 强>写分配策略>,则在强>写操作中给出平均访问时间公式:-< /P>,caching,x86,cpu,cpu-architecture,Caching,X86,Cpu,Cpu Architecture,Twrite=(H)(Tc)+(1-H)(Tc+Tm+(x*Tm)) 在哪里, H=缓存的命中率 Tc=缓存的访问时间 Tm=存储器的存取时间 x=脏缓存块的分数 上述公式在本网站中给出 然而,我认为这个公式并不完全正确。据我所知,在写入分配的情况下,写入未命中期间,我们首先在缓存中找到一个要替换的块,如果它是脏的, 我们更新主存储器。现在,我们将包含单词的所需缓存块放入缓存,然后更新缓存。这是我在哈马赫和帕特森的书中读到的 那么这个公式不应该是吗 Twrite=(H)(Tc)+(1-H)(Tc

Twrite=(H)(Tc)+(1-H)(Tc+Tm+(x*Tm))

在哪里,

H=缓存的命中率

Tc=缓存的访问时间

Tm=存储器的存取时间

x=脏缓存块的分数

上述公式在本网站中给出

然而,我认为这个公式并不完全正确。据我所知,在写入分配的情况下,写入未命中期间,我们首先在缓存中找到一个要替换的块,如果它是脏的, 我们更新主存储器。现在,我们将包含单词的所需缓存块放入缓存,然后更新缓存。这是我在哈马赫和帕特森的书中读到的

那么这个公式不应该是吗

Twrite=(H)(Tc)+(1-H)(Tc+Tm+(x*Tm)+Tc

在这里,我在末尾添加了额外的Tc时间,一旦从主存取出块,就需要更新缓存中的字。
第一个Tc是我们在未命中的情况下添加的时间,因为它的分层缓存我建议您再次检查写入分配策略。诺曼·P·茹皮写了一篇很好的《波罗西小姐》

顾名思义,write allocate在写未命中的情况下在缓存中分配一个条目。如果为写未命中分配的行是脏的,我们需要用脏缓存行的内容更新主内存。因此,为脏缓存线更新主内存所花费的时间将是

x * Tm
在使用脏缓存线的内容更新主内存后,可以使用它存储写未命中的数据。因此,我们需要访问缓存。所以我们的新时间是

Tc + (x * Tm) 
但是,我们只会在缓存未命中时执行此操作。因此,整个过程需要乘以未命中率

(1-H)(Tc + (x * Tm))
上述公式涵盖了未命中的情况。当它被命中时,我们只需要访问缓存。这将是Tc乘以命中率

Tc * H
将它们全部相加,我们可以得到平均访问时间:

(Tc * H) + (1-H)(Tc + (x * Tm))

因此,在未命中的情况下添加Tc时间的原因是,在将块从主存带到缓存后更新缓存中的字,对吗?你检查了我在问题中发布的链接了吗?我想你还需要添加Tm以防丢失,因为这将是将块从主内存带到缓存所需的时间。如果你检查我引用的论文,你会看到你在写未命中时做的选择。“写入时提取”或“写入时不提取”。如果使用前者,则需要将Tm添加到公式中乘以未命中率的部分。但是如果使用后者,给出的公式是正确的。你需要再加一次Tc,对吗?因为它是分级访问。因为我们已经花了Tc时间首先查看缓存中的命中率。对于写时获取,公式是(1-H)(Tc+x*Tm+Tm)。Tc是访问缓存并获取数据的时间。我们花了一点时间(比如说t1时间)才知道这是一次失误。然后我们获取数据(Tm)。然后我们返回数据(比如t2时间)。所以t1+t2是访问缓存并返回数据的时间,即Tc。如果它是单级缓存,它在什么意义上是分层的?@PeterCordes hierarchy在这个意义上,我们只有在按顺序检查它是否在缓存中后才能访问内存。在同时访问的情况下,我们可以同时在缓存和内存中搜索(而不是以从缓存到内存的顺序方式)。你查过我贴的链接了吗?公式正确吗?好的,这是有道理的。从这个意义上讲,“分层”几乎是CPU缓存的标准设计,这是出于电源和性能的考虑。构建一个能够在每个时钟启动(和放弃)操作的大型缓存是很困难的,即使它不必具有低延迟。使用多级缓存更合理,但在任何主流CPU中都看不到,AFAIK。我认为,即使构建硬件将请求并行发送到外部缓存,也可能会将快速路径的速度降低一个周期。不,我现在没有时间看缓存的基本知识。@PeterCordes好的。但是你能告诉我我对机理和公式的理解是否正确吗?您可以稍后查看该链接。