Caching 是否可以检查缓存线是否无效和/或手动重新验证缓存线?

Caching 是否可以检查缓存线是否无效和/或手动重新验证缓存线?,caching,x86,multicore,Caching,X86,Multicore,我主要对x86体系结构感兴趣,但我也很想知道在其他体系结构中是否有这样做的方法 有没有办法以编程方式检查包含特定内存地址的缓存线的状态?我不想读取该地址的内容,也不想因为缓存未命中而导致从主内存读取的惩罚,我只想检查缓存线的状态 是否有任何方法可以通过编程重新验证无效缓存线,而无需写入内存?嗯,我想对于MESI,我所说的重新验证是指将其状态更改为修改状态,我唯一能想到的就是使用预取优化提示。因此,不是: mov eax, (DWORD PTR [esi]) 你会做: prefetch [esi

我主要对x86体系结构感兴趣,但我也很想知道在其他体系结构中是否有这样做的方法

有没有办法以编程方式检查包含特定内存地址的缓存线的状态?我不想读取该地址的内容,也不想因为缓存未命中而导致从主内存读取的惩罚,我只想检查缓存线的状态


是否有任何方法可以通过编程重新验证无效缓存线,而无需写入内存?嗯,我想对于MESI,我所说的重新验证是指将其状态更改为修改状态,我唯一能想到的就是使用预取优化提示。因此,不是:

mov eax, (DWORD PTR [esi])
你会做:

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

从根本上说,我认为你试图做的是有缺陷的。如果在自定义单任务操作系统上运行,它可能会工作,但在今天的现代多任务系统上,根本不可能像那样控制处理器。

我唯一能想到的就是使用预取优化提示。因此,不是:

mov eax, (DWORD PTR [esi])
你会做:

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

从根本上说,我认为你试图做的是有缺陷的。如果您在自定义单任务操作系统上运行,它可能会工作,但在今天的现代多任务系统上,根本不可能像那样控制处理器。

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

缓存对程序员来说是完全不可见的。程序员使用虚拟地址,而缓存使用物理地址

这样做的动机是什么?通常,这类事情对用户程序来说是完全透明的。我正在试验速度关键情况下的锁定算法。一些嵌入式PowerPC CPU可以让您控制缓存的各个方面,但我不知道在通用CPU(如x86)上有这样的事。这是出于什么动机?通常,这类事情对用户程序是完全透明的。我正在试验速度关键情况下的锁定算法。一些嵌入式PowerPC CPU可以让您控制缓存的各个方面,但我不知道在通用CPU(如x86)上有类似的情况。