首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否有CPU执行这种可能的L1缓存写入优化?

是否有CPU执行这种可能的L1缓存写入优化?
EN

Software Engineering用户
提问于 2015-11-16 18:44:24
回答 3查看 1.3K关注 0票数 11

当具有L1缓存的CPU执行写操作时,通常发生的情况是(假设它正在写入的缓存行已经在L1缓存中)缓存(除了更新数据之外)将该缓存线标记为脏,并将在以后的某个时间用更新的数据将该行写入。

一种可能的优化方法是让缓存比较写和以前缓存的内容,如果它们是相同的,就不要将行标记为脏。因为这可能允许缓存在某些情况下避免回写,所以我可以看到CPU制造商可能会认为这值得执行这个逻辑所需的门。

我的问题是:是否有CPU执行这种优化?

背景:为什么我要问:我正在编写一些需要具有持续内存访问的代码;也就是说,能够侦听缓存行为的人不应该能够推断出我正在做的事情。我的一些访问是写的,以实现这段代码的明显方式,许多写操作都将编写与已经存在的数据相同的数据。我需要进行写操作,因为根据数据的不同,我正在编写的数据可能是相同的,也可能不是相同的,不管执行相同的操作都是很重要的。如果CPU通过不实际编写“不变写入”来优化,这将意味着缓存的行为将根据我正在做的事情而变化,这将破坏我的目标。

那么,是否有CPU试图以这种方式优化写操作?

EN

回答 3

Software Engineering用户

回答已采纳

发布于 2015-12-06 07:20:03

经过几个小时的搜索,我无法找到使用这种特定优化的CPU。提到的大多数优化通常与命中/误操作以及读写操作和数据访问有关:

(第7页及) https://cseweb.ucsd.edu/classes/fa14/cse240A-a/pdf/08/CSE240A-MBT-L15-Cache.ppt.pdf

但是,这并不意味着不能执行此优化。通常,可以以编程方式访问CPU缓存行的大小。访问缓存寄存器中的当前值也是可能的,但这样做有点危险。如果您在错误的时间访问错误的寄存器,您可能是在篡改与正在运行的程序相关的寄存器。或者,您可能会无意中修改正在试图读取的行的内容。

在寄存器缓存中获取当前值

此外,所有的理论解决方案都需要某种形式的软件实现(汇编程序)。我发现的最接近的是ARM架构,它似乎允许缓存操作。除此之外,您还需要知道所需CPU的缓存行的大小。您可以仔细地将缓存内容读入内存中的次要位置,以行大小递增,并将其与即将写入寄存器(在本例中为L1缓存行)的数据进行比较。

读取CPU缓存内容

从那里,您可以设计一个基于软件的系统,以防止相同的重写。虽然这有点简化,但这是因为该解决方案必须适用于任何存在的CPU。

我发现的另一个与缓存一致性有关的可能性是:

维基百科文章中关于acche一致性的相关文章

关于这一问题,引起我注意的主要一点是对这一问题的尖刻描述:

它是一种机制,其中缓存控制器监视地址和数据,试图在第二主机修改主存储器中的位置时更新其自己的内存位置副本。当观察到对缓存具有副本的位置的写操作时,缓存控制器使用新数据更新自己的被占用内存位置的副本。

换句话说,可能已经建立了一些机制。只是它们可能不适用于您所建议的优化。您必须实现执行读/写比较的软件。

票数 5
EN

Software Engineering用户

发布于 2015-12-06 15:27:35

写入L1缓存是一项非常、非常关键的操作。

将完全相同的数据写回去似乎是相当罕见的。在这一特殊情况下加快速度的优化不会在总体上得到很大的加速。

另一方面,这种优化需要对每次写入缓存内存的旧数据和新数据进行比较。更糟糕的是,它要求要写入的数据必须在编写时实际可用!

在现代CPU上,情况通常并非如此。例如,要写入的数据可能仍在计算中。即使在计算完成之前,缓存仍然可以继续进行,如果需要加载缓存行,将缓存线标记为修改后的缓存行等等。除了实际修改缓存行之外,所有的簿记保存都可以执行。如果您想比较新写入的结果和旧的缓存行数据,这是不可能的。

例如,如果C代码为我 =x/ y;在大多数CPU上执行x/y除法需要非常长的时间。但是,处理将结果存储到我所需的大部分工作早在分割结束之前就已经完成;唯一缺少的是将8个结果字节移到缓存行。刷新缓存行的操作将自动等待直到分割完成。读取我的操作可能会被重定向,以直接从除法器获得结果。

票数 4
EN

Software Engineering用户

发布于 2015-11-20 07:44:17

一种可能的优化方法是让缓存比较写内容和缓存之前的内容,如果它们是相同的,不要将行标记为脏

这样的优化不会是CPU写入缓存所需时间的两倍吗?因为每个缓存行写现在都伴随着一个比较操作,这是不免费的。

因此,实际上,优化现在将取决于一个非常模糊的因素:一个普通软件用相同的数据重写其可缓存内存的次数。

票数 1
EN
页面原文内容由Software Engineering提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://softwareengineering.stackexchange.com/questions/302705

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档