Jos*_*vin 5 multicore x86-64 cpu-architecture prefetch cpu-cache
某些体系结构具有“预取写入”指令,以在您实际执行之前向 CPU 指示您将要写入内存位置。我知道在多核机器上,这可以被内核用作暗示它现在应该尝试获取给定缓存行的所有权,以便以后可以更快地写入该位置。但是,AFAICT 仅在有两个内核可能争用缓存线的情况下才重要。对于仅由单核读取和写入的缓存线,预取写入有任何用处吗?
在其他条件相同的情况下,对于仅由单个内核访问的行,预取写入比预取读取没有任何优势。在任何类型的预取之后,核心将拥有处于独占状态的行。在后续写入时,该行将更改为“已修改”状态。独占到修改的转换是免费的,因为根据定义,没有其他核心拥有该线路。E->M 状态更改在本地完成,无需监听。
请注意,内核有自己的硬件预取逻辑。对线路的访问可能会导致核心自动抓取相邻的线路。如果全局变量或其他数据驻留在附近,SMP 系统可能会遇到许多意外的交叉窥探。