现在nox86(或任何其他 ISA,据我所知)的实现支持优化静默存储。
对此已有学术研究,甚至有一项关于“消除共享内存缓存一致性协议中静默存储失效传播”的专利。 (谷歌搜索'“静默存储”缓存' https://www.google.com/search?q=%22silent+store%22+cache如果您有兴趣了解更多。)
对于 x86,这会干扰 MONITOR/MWAIT;一些用户可能希望监视线程在静默存储上唤醒(可以避免失效并添加“触及”一致性消息)。 (目前 MONITOR/MWAIT 具有特权,但将来可能会改变。)
同样,这可能会干扰事务内存的一些巧妙使用。如果内存位置用作保护以避免显式加载其他内存位置,或者在支持此类的体系结构中(例如在 AMD 的高级同步工具中),则从读取集中删除受保护的内存位置。
(硬件锁消除是静默 ABA 存储消除的一种非常受限的实现。它的实现优点是显式请求检查值一致性。)
在性能影响/设计复杂性方面还存在实施问题。这将禁止避免读取所有权(除非静默存储消除仅在缓存行已经存在于共享状态时才处于活动状态),尽管目前还没有实现读取所有权避免。
对静默存储的特殊处理也会使内存一致性模型(可能尤其是 x86 相对强大的模型)的实现变得复杂。这也可能会增加因推测一致性失败而进行回滚的频率。如果静默存储仅支持 L1-present 线路,则时间窗口将非常小并且回滚极其稀有的;存储到 L3 或内存中的缓存行可能会将频率增加到非常罕见,这可能会使其成为一个值得注意的问题。
高速缓存行粒度上的静默也比访问级别上的静默少见,因此避免的失效数量会更少。
额外的缓存带宽也是一个问题。目前,英特尔仅在 L1 缓存上使用奇偶校验,以避免小量写入时需要读取-修改-写入。要求every写入以进行读取以检测静默存储将具有明显的性能和功耗影响。 (这样读
可以仅限于共享缓存行并机会主义地执行,利用没有完全缓存访问利用率的周期,但这仍然会产生功耗。)这也意味着如果已经存在读-修改-写支持,则此成本将会下降。 L1 ECC 支持(该功能会让某些用户满意)。
我对静默存储消除了解不多,因此可能还有其他问题(和解决方法)。
随着性能改进的许多唾手可得的成果被采取,更困难、更少益处和更不通用的优化变得更有吸引力。由于静默存储优化随着核心间通信的增加而变得更加重要,并且随着更多核心被用来处理单个任务,核心间通信也会增加,因此这种价值似乎可能会增加。