gpt4 book ai didi

c# - 写入后 CPU 缓存行何时刷新到内存?

转载 作者:太空狗 更新时间:2023-10-29 21:50:51 26 4
gpt4 key购买 nike

我在 C# 中工作,希望尽可能避免使用不安全代码。如果我有一个大小适合填充高速缓存行的对象或数组,并且我想写入对象的每个字段或数组的索引,CPU 是否会在刷新写入行之前等待所有写入发生,或者当只有一个或几个写入发生时,它会提前刷新吗?

如果我只想在对行的所有写入都发生后才进行刷新,我是否应该在例程结束时快速连续地执行所有写入?我知道 CPU 和缓存一致性协议(protocol)在这方面可能有所不同,我正在寻找一个普遍正确的经验法则答案。

最佳答案

will the CPU wait for all the writes to occur before flushing the written-to line or will it flush early when only one or a few of the writes have occurred?

CPU 可能会提早刷新该行,但前提是该组承受来自属于缓存中的其他访问的高压。那不太可能。缓存的结构有助于避免过早刷新最近访问的数据。

should I do all the writes at the end of a routine in quick succession?

一般来说是的。 时间局部性 很重要,这意味着当访问在时间上紧密分组时缓存性能最佳。其他技巧也可能适用。例如,您可以尝试通过在所需写入之前对您的结构进行虚拟写入来“预热”缓存行。这允许一些内存级别的并行性,其中内核在执行中间代码时加载缓存行。当您执行真正的写入时,缓存行在 L1 中准备就绪的可能性更大。

一般来说,要对代码中的不自然行为保持谨慎以提高缓存性能。缓存可以很好地完成自己的工作。您应该始终在任何更改前后衡量性能。您认为可能有所改善的事情实际上可能会造成伤害。如果您的程序是多线程的,则另一大蠕虫病毒会在内核之间争用缓存时发挥作用。

关于c# - 写入后 CPU 缓存行何时刷新到内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15028547/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com