当具有L1高速缓存的CPU进行写操作时,通常会发生这种情况(假定正在写入的高速缓存行已在L1高速缓存中),高速缓存(除了更新数据外)会将高速缓存行标记为脏,并在稍后将行与更新的数据一起写出。
一种可能的优化方法是使缓存将写入内容与缓存的先前内容进行比较,如果它们相同,则不要将行标记为脏。因为这可以使高速缓存有时避免回写,所以我可以看到CPU制造商如何看待这种逻辑所需要的门。
我的问题:是否有执行此优化的CPU?
关于我为什么要问的背景:我正在编写一些需要经常访问内存的代码;也就是说,能够侦听缓存行为的人不应该推断出我在做什么。我的某些访问是写操作,并且以明显的方式来实现此代码,许多写操作将写入已经存在的相同数据。我需要进行写操作,因为根据数据,我正在写的数据可能相同也可能不同,并且无论如何都要执行相同的操作很重要。如果CPU通过不实际写“ no-change-write”来进行优化,则意味着高速缓存的行为将根据我在做什么而变化,这将颠覆我的目标。
那么,是否有CPU尝试以这种方式优化写入?