某些架构具有“预取写入”指令,用于在实际执行操作之前向 CPU 指示您将要写入内存位置。据我所知,在多核计算机上,核心可以使用它作为提示,表明它现在应该尝试获取给定缓存行的所有权,以便稍后可以更快地写入该位置。然而,AFAICT 仅在有两个内核可能争夺缓存行的情况下才重要。对于仅由单个核心读取和写入的缓存行,预取写入有任何用处吗?
最佳答案
在其他条件相同的情况下,对于仅由单个内核访问的行,预取写入比预取读取没有任何优势。在任何类型的预取之后,核心将拥有处于独占状态的行。在后续写入时,该行将更改为已修改状态。独占到修改的转换是免费的,因为根据定义,没有其他核心拥有该线路。 E->M 状态更改在本地完成,无需监听。
请注意,内核有自己的硬件预取逻辑。对线路的访问可能会导致核心自动抓取相邻的线路。如果全局变量或其他数据驻留在附近,SMP 系统可能会遇到大量意外的交叉窥探。
关于x86-64 - 预取写入是否会影响单核性能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12065632/