caching - 使用写分配策略写回缓存公式

标签 caching x86 cpu cpu-architecture

如果我们考虑采用写分配策略分层单级写回缓存,则写操作期间的平均访问时间的公式为由以下给出:-

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

哪里,

H=缓存命中率。

Tc=缓存的访问时间。

Tm=内存的访问时间。

x= 脏缓存 block 的比例。

上面的公式在本站给出https://gateoverflow.in/14480/formula-write-back-write-through-access-time-parallel-serial?show=14502#a14502

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

那么公式不应该是

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

在这里,我在末尾添加了额外 Tc 时间,该时间是在从主内存中取出 block 后更新缓存中的字所需的。 第一个 Tc 是我们在未命中时添加的时间,因为它的分层缓存

最佳答案

建议您再次检查写入分配策略。有一个真不错paper诺曼·P·乔皮 (Norman P. Jouppi) 撰写的《写错过政策》。

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

x * Tm

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

Tc + (x * Tm) 

但是,只有当存在缓存未命中时,我们才会这样做。因此,整个事情需要乘以失误率。

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

上面的公式涵盖了未命中的情况。当它命中时,我们只需要访问缓存即可。这就是 Tc 乘以命中率

Tc * H

将它们全部相加得出平均访问时间:

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

关于caching - 使用写分配策略写回缓存公式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48277970/

相关文章:

操作数后应有逗号、冒号、修饰符或行尾

c# - 从其他异常的 StackTrace 获取 BadImageFormatException

linux - 一种在 Ubuntu Karmic 中发现 CPU 数量和每个 CPU/核心规范的编程方法?

performance - 分支指令如何被错误预测和停用?

javascript - 在 firefox 中绕过浏览器缓存?

html - 尽管 Chrome 正确缓存 Assets ,但应用缓存无法正常工作

php - apache2 继续提供旧版本的 php 文件

c# - 通过 .NET MemoryCache 中的 CacheItemPolicy 使缓存项过期

linux - __NR_socketcall 默认使用随机端口吗?

node.js - I/O 绑定(bind)和 CPU 绑定(bind)