x86-64:缓存加载和逐出指令

时间:2016-04-12 03:46:36

标签: assembly x86 x86-64

对于x86-64架构,是否有一条指令可以将给定内存地址的数据加载到缓存中?同样,是否有一条指令可以在给定与该缓存行对应的内存地址(或类似缓存行标识符)的情况下驱逐缓存行?

1 个答案:

答案 0 :(得分:6)

将数据预取到缓存中(不将其加载到寄存器中):

PREFETCHT0 [address]
PREFETCHT1 [address]
PREFETCHT2 [address]

内在:void _mm_prefetch (char const* p, int hint)

请参阅insn ref manual和其他指南,了解不同的近似提示的含义。 (标签wiki上的其他链接。

着名的What Every Programmer Should Know About Memory文章是在P4最新时写的。当前的CPU具有更智能的硬件预取程序,超线程不仅仅是运行预取线程。 AFAIK,预取线程大多是一个死的想法。除此之外,关于缓存的优秀文章。搜索其他SO帖子和内容以决定何时实际预取。

使用英特尔IvyBridge上的软件预取,过度使用它。特定的微体系结构存在性能缺陷,只能退出one prefetch per 43 clocks

刷新包含给定地址的缓存行:

clflush [address]
clflushopt [address]   ; Newer CPUs only.  Weakly ordered, with higher throughput.

内在:void _mm_clflushopt (void const * p)

recent question about its performance