5

某些架构具有“预取写”指令,以在实际执行之前向 CPU 指示您将要写入内存位置。我知道在多核机器上,核心可以使用这作为提示,它现在应该尝试获取给定缓存行的所有权,以便以后可以更快地写入该位置。但是,AFAICT 仅在有两个内核可能竞争缓存线的情况下才有意义。对于仅由单个内核读取和写入的高速缓存行,预取写入是否有任何用处?

4

2 回答 2

3

在其他条件相同的情况下,对于仅由单个内核访问的行,Prefetch-Write 与 Prefetch-Read 相比没有任何优势。在任何类型的预取之后,核心将拥有处于独占状态的线路。在随后的写入中,该行更改为已修改状态。Exclusive-to-Modified 转换是免费的,因为根据定义,没有其他内核具有这条线。E->M 状态更改在本地完成,无需窥探。

请注意,内核有自己的硬件预取逻辑。对一条线的访问可能会导致核心自动抓取相邻的线。如果全局变量或其他数据驻留在附近,SMP 系统可能会遇到很多意外的交叉侦听。

于 2012-08-22T20:19:15.117 回答
1

我认为如果缓存线不在内存中并且写预取标志从现在开始需要一些周期,它可能会有所帮助。诸如为写入腾出一条线之类的家务活可能会更麻烦。当然,这应该允许 CPU 完成写入,而不是简单地将写入卸载到高速缓存的一圈?

还是我错过了一些基本的东西?

于 2012-09-09T21:46:14.257 回答