如何刷新回写cpu缓存?

时间:2013-11-03 23:25:26

标签: caching x86 x86-64 intel

我可能应该阅读英特尔手册,但它真的很长,我有点迷失它

http://www.intel.com/content/dam/www/public/us/en/documents/manuals/64-ia-32-architectures-software-developer-manual-325462.pdf

我想知道如何确保我的写作在主ram中。

或者是否有一些写入指令完全绕过缓存?

1 个答案:

答案 0 :(得分:1)

您可以使用流媒体(非临时)商店。它们意味着避免污染缓存(以获得更好的性能),但这也意味着它只会直接将数据写入内存,因此可以用于可靠性。

在汇编中使用MOVNT *指令,或检查编译器是否为其提供内在函数。

MS编译器应该支持_mm_stream_ps / si / ..:
http://msdn.microsoft.com/en-us/library/bb531466%28v=vs.90%29.aspx

GCC可能会以不同方式调用它(至少是新的SSE风格),请尝试__builtin_ia32_movntq / ps / ..
http://gcc.gnu.org/onlinedocs/gcc/X86-Built_002din-Functions.html

请注意,数据持久性是一个很大的主题,如果这是您的目标可能还不够,您还应该确保您拥有防护同步点,以确保这些存储已完成,然后才能保证数据是安全的。