gpt4 book ai didi

x86 - 从内存读取/写入数据的 x86 指令如何与 L1 和 L2 缓存交互?

转载 作者:行者123 更新时间:2023-12-02 23:06:03 25 4
gpt4 key购买 nike

假设我在 x86 中有一条这样的指令,它想从内存中的地址读取数据

mov eax, word_123456

大概这将从内存中获取数据。现在假设我存储它

mov word_123456, eax

从CPU架构图中我知道随机存取存储器和CPU之间有缓存。如果我要求将寄存器的内容存储在内存中,它总是先进入L1缓存吗?谁决定它最终进入哪个缓存?另外,我很好奇您是否可以编写/提示 x86 命令来指定移动操作是否应存储在缓存中或将是罕见的读/写等。

最佳答案

默认情况下,所有内容都会进入 L1 和 L2 缓存。 (我稍微简化了 WRT 原子访问,但如果您只是执行 mov,那就是这样。)实际上,它并不是“首先”进入 L1 缓存,仅此而已一旦您将其读入寄存器,缓存行也会被缓存以供以后使用。

(我在这里还得到了一些特定于体系结构的信息。某些体系结构选择使两个缓存互斥,这样,从 L2 缓存中删除 L2 缓存行以将其放入 L1 缓存中。但这并不'它不会对代码性能产生巨大影响,只是因为 L2 缓存比 L1 缓存大得多。它更像是一个簿记的东西。)

L2 缓存的目的是比 L1 缓存更大,这样,如果 L1 缓存中存在某些内容但后来被逐出,则希望它仍然在 L2 缓存中,并且不需要一直到内存。

是的,您可以提示您的写入绕过缓存。例如,这就是 movnti 的目的。不过,不必费心手动使用 movnti 进行所有只写访问。实际的性能优势很小,即使您当前的函数没有从内存中读回,也很有可能其他一些即将执行的代码会读回。

关于x86 - 从内存读取/写入数据的 x86 指令如何与 L1 和 L2 缓存交互?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23998946/

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