(我主要对x86体系结构感兴趣,但是有兴趣听听是否有办法在其他体系结构中执行此操作)
有没有办法以编程方式检查包含某个内存地址的缓存行的状态?我不想读取该地址的内容,并且不希望从主存中读取因缓存未命中而导致的惩罚,我只想检查缓存行的状态。
有没有办法以编程方式重新验证无效的缓存行而无需写入内存? (好吧,我猜MESI,“revalidate”我的意思是将其状态改为“Modified”)
答案 0 :(得分:0)
我唯一能想到的是使用PREFETCH优化提示。所以,而不是:
mov eax, (DWORD PTR [esi])
你会这样做:
prefetch [esi]
;
; give processor time to load cacheline...
;
mov eax, (DWORD PTR [esi])
从根本上说,我认为你要做的事情是有缺陷的。如果您在自定义单任务操作系统上运行它可能会起作用,但在当今的现代多任务系统中,根本不可能像这样控制处理器。
答案 1 :(得分:0)
程序员完全看不到缓存。程序员使用虚拟地址,而缓存使用物理地址。