是否可以检查缓存行是否无效和/或手动重新验证缓存行的方法?

时间:2011-02-16 19:39:17

标签: caching x86 multicore

(我主要对x86体系结构感兴趣,但是有兴趣听听是否有办法在其他体系结构中执行此操作)

有没有办法以编程方式检查包含某个内存地址的缓存行的状态?我不想读取该地址的内容,并且不希望从主存中读取因缓存未命中而导致的惩罚,我只想检查缓存行的状态。

有没有办法以编程方式重新验证无效的缓存行而无需写入内存? (好吧,我猜MESI,“revalidate”我的意思是将其状态改为“Modified”)

2 个答案:

答案 0 :(得分:0)

我唯一能想到的是使用PREFETCH优化提示。所以,而不是:

mov eax, (DWORD PTR [esi])

你会这样做:

prefetch [esi]
;
; give processor time to load cacheline...
;
mov eax, (DWORD PTR [esi])

从根本上说,我认为你要做的事情是有缺陷的。如果您在自定义单任务操作系统上运行它可能会起作用,但在当今的现代多任务系统中,根本不可能像这样控制处理器。

答案 1 :(得分:0)

程序员完全看不到缓存。程序员使用虚拟地址,而缓存使用物理地址。