程序问答   发布时间:2022-06-01  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了弱 ISA 如何使用存储缓冲区解决 WAW 内存危害? 我的猜测;我不熟悉任何实际设计的细节大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决弱 ISA 如何使用存储缓冲区解决 WAW 内存危害? 我的猜测;我不熟悉任何实际设计的细节?

开发过程中遇到弱 ISA 如何使用存储缓冲区解决 WAW 内存危害? 我的猜测;我不熟悉任何实际设计的细节的问题如何解决?下面主要结合日常开发的经验,给出你关于弱 ISA 如何使用存储缓冲区解决 WAW 内存危害? 我的猜测;我不熟悉任何实际设计的细节的解决方法建议,希望对你解决弱 ISA 如何使用存储缓冲区解决 WAW 内存危害? 我的猜测;我不熟悉任何实际设计的细节有所启发或帮助;

现代 cpu 使用存储缓冲区来延迟提交到缓存直到退役,同时避免 WAR 和 WAW 内存@H_262_4@ 危害。我想知道弱 ISA 如何使用存储缓冲区解决 WAW 危险,否则它不是 FIFO,允许 StoreStore 重新排序?他们是否插入了隐式障碍?

更具体地说,如果同一内存地址的两个存储在弱 ISA 上按顺序退出,例如ARM/POWER,他们理论上可以承诺缓存乱序@H_262_4@,因为存储缓冲区不是 FIFO,从而打破了 WAW 依赖。

根据Wikipedia:

...存储指令,包括内存地址和存储数据,被缓存在存储队列中,直到它们到达退休点。当一个 store 退休时,它会将它的值写入内存系统。这样就避免了 WAR 和 WAW 依赖问题...

解决方法

我的猜测;我不熟悉任何实际设计的细节

即使存储缓冲区是一个完整的调度程序,可以“抓取”任何分级存储以提交到 L1d,我认为它会使用最旧的第一个订单。(就像一条指令/ uop 调度程序又名 RS 预订站。)

“就绪”意味着缓存行是独占的(修改或独占状态)。每个分级存储本身都隐式地准备好提交,因为根据定义,关联的存储指令已停用。

按顺序停用意味着存储有资格按程序顺序提交,因此您不能拥有临时隐藏在最旧就绪优先调度之外的旧存储。 一起,这些事情将确保对于任何给定的字节,重叠的存储按程序顺序,从而保持全局可见性顺序和缓存行中任何给定字节组的最终值的一致性。

内存屏障可以通过像杂货店结账传送带上的分隔器一样将商店缓冲区围起来,防止抢夺经过它的商店,同时将商店提交到同一行中的同一位置。

我们确实知道现实世界中的弱排序存储缓冲区,例如 PowerPC RS64-III (in-order exeC) and Alpha 21264 (OoO exeC) 会合并以帮助它们创建整个 4 字节或 8 字节对齐的 L1d 提交,例如出多个字节存储。这也很好,假设您的合并算法尊重任何给定字节的顺序,例如通过将来自较新存储的数据放入较旧的 SB 条目(反之亦然)并将另一个条目标记为“已提交”。显然,这必须尊重商店壁垒。

我认为即使使用未对齐的存储也没什么问题,尽管保留未对齐存储的原子性保证在合并时可能会很棘手。 (英特尔 P6 系列及更高版本确实为不跨越缓存线边界的未对齐缓存存储提供原子性保证,但我们认为英特尔不会正确合并存储缓冲区;也许只是一些带有 LFB 的东西用于缓存-错过了同一行的背靠背商店。)

很可能真正的硬件可能不是可以合并任何 2 个 SB 条目的完整调度程序,例如可能只在有限的范围内减少不同地址(和大小)的数量来一次比较。此外,您可能仍然只按程序顺序释放 SB 条目,因此它基本上可以是一个循环缓冲区(与 RS 不同)。按程序顺序分配,并通过 SB 本身的布局跟踪顺序,使得内存屏障的工作成本更低,并且可以跟踪最年轻的“毕业”存储在哪里。

免责声明:IDK,如果这正是真实硬件的工作原理


可能的极端情况:未对齐的 4 字节存储到 [cache_line+63](跨 CL 边界拆分)然后到 [cache_line+60](完全包含在较低的缓存行中)。如果旧的存储缓冲区条目无法立即提交,因为我们还没有拥有 next@H_262_4@ 缓存行,但我们确实拥有 cache_line,我们仍然不能让年轻的存储到 cache_line+60 首先提交,如果我们依靠这不会发生来避免 WAW 危害。

因此,您可能希望行拆分的 SB 条目能够将数据提交到一行而不是另一行,从而允许对每个位置分别进行最旧的准备,而不是将 2 个缓存中的顺序捆绑在一起线。


相关:我写了 my own answer 解释了什么是存储缓冲区。我试图避免像维基百科那样的错误(“当@H_262_4@一家商店退休时,它会将它的价值写入记忆系统”:实际上退休只是使它有资格提交;这样的商店被称为“毕业”商店.)

大佬总结

以上是大佬教程为你收集整理的弱 ISA 如何使用存储缓冲区解决 WAW 内存危害? 我的猜测;我不熟悉任何实际设计的细节全部内容,希望文章能够帮你解决弱 ISA 如何使用存储缓冲区解决 WAW 内存危害? 我的猜测;我不熟悉任何实际设计的细节所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: