通过使用标记为 WB(回写)和 WC(写组合)的内存的指令之间的主要区别是什么:MOVDQA
and MOVNTDQA
,以及之间有什么不同VMOVDQA
and VMOVNTDQ
?
是不是,内存已标记为 WC - 指令[NT]
与平常没有什么不同(没有[NT]
),并且该内存被标记为 WB - 指令[NT]
就像使用内存厕所一样使用它?
注意:这个答案主要讨论 NT 商店。彼得的回答更全面。
您通常会使用NT
写入内存映射 IO(即 GPU 等)时的(非临时)指令,其中内存严格不可缓存并且始终直接访问。
通过定期读取和写入,CPU 将尝试缓存并在需要时将较大的块写入主内存。对于不可缓存的区域(例如 MMIO),写入必须直接写入内存,CPU 不会尝试缓存它们。使用NT
指令向 CPU 提示您可能正在传输大量数据(即:到帧缓冲区等),并且当它可以填充整个缓存行时,它将尝试合并这些写入。
“非临时”部分意味着您告诉 CPU 您不打算立即进行写入,但可以在合理范围内延迟写入,直到有足够的时间为止。NT
已发出指令来填充高速缓存行。
据我了解,您还可以使用NT
具有常规回写内存的指令,它不会尝试缓存这些写入,但也会在可以填满一行时尝试流式传输。在写入 WB 内存的情况下,我想说应用程序将非常专业,您需要知道在管理其缓存方面您可以比 CPU 做得更好。此外,写入不会立即发生,因此之后读回的任何内容都会读取过时的数据,直到执行组合写入为止。你需要用以下方法来管理这个SFENCE
如果您需要刷新任何未完成的组合写入,请参阅说明。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)