-1

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

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

我想知道如何确保我的写入在主内存中。

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

4

1 回答 1

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

请注意,数据持久性是一个很大的话题,如果这是您的目标,那么它可能还不够,您还应该确保在保证数据安全之前,您有确保这些存储已完成的隔离同步点。

于 2013-11-04T07:57:20.547 回答