对于WB/WC标记的区域,MOVDQA和MOVNTDQA以及VMOVDQA和VMOVNTDQ有什么区别?

Ale*_*lex 6 x86 assembly sse simd avx

通过使用内存标记为WB指令之间的主要区别是什么(回写)和WC(写入合并):什么是之间的不同MOVDQAMOVNTDQA,什么是之间的不同VMOVDQAVMOVNTDQ

是不是对于内存标记为WC - 指令与[NT]通常没有区别(没有[NT]),并且内存标记为WB - 指令[NT]与它一起工作就好像它是一个内存WC?

J..*_*... 6

NT在写入内存映射IO(即:GPU等)时,通常会使用(非时间)指令,其中内存严格不可缓存,并且始终直接访问.

通过定期读取和写入,CPU将在需要时尝试缓存并将更大的块写入主存储器.对于不可缓存的区域(例如MMIO),写入必须直接进入内存,CPU不会尝试缓存它们.使用NT指令提示CPU可能会传输大量数据(例如:到帧缓冲区等),当它可以填充整个缓存行时,它会尝试组合这些写入.

"非暂时"部分意味着您告诉CPU您不打算立即发生写入,但可以在合理范围内延迟写入,直到NT发出足够的指令来填充缓存行.

据我所知,您也可以使用NT带有常规回写内存的指令,它不会尝试缓存这些写入,但也会尝试在填充行时进行流式处理.在写入WB内存的情况下,我会说应用程序非常专业,你需要知道在管理缓存时你可以比CPU做得更好.此外,写入不会立即发生,因此之后回读的任何内容都会读取过时的数据,直到执行组合写入为止.SFENCE如果需要刷新任何未完成的组合写入,则需要使用说明对此进行管理.

最好直接从英特尔阅读 - 他们有很多关于这个主题的信息:

使用英特尔®SIMD流指令扩展4(英特尔®SSE4)流加载,提高内存吞吐量