x86-64 - 预取写入是否会影响单核性能?

标签 x86-64 multicore cpu-architecture prefetch cpu-cache

某些架构具有“预取写入”指令,用于在实际执行操作之前向 CPU 指示您将要写入内存位置。据我所知,在多核计算机上,核心可以使用它作为提示,表明它现在应该尝试获取给定缓存行的所有权,以便稍后可以更快地写入该位置。然而,AFAICT 仅在有两个内核可能争夺缓存行的情况下才重要。对于仅由单个核心读取和写入的缓存行,预取写入有任何用处吗?

最佳答案

在其他条件相同的情况下,对于仅由单个内核访问的行,预取写入比预取读取没有任何优势。在任何类型的预取之后,核心将拥有处于独占状态的行。在后续写入时,该行将更改为已修改状态。独占到修改的转换是免费的,因为根据定义,没有其他核心拥有该线路。 E->M 状态更改在本地完成,无需监听。

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

关于x86-64 - 预取写入是否会影响单核性能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12065632/

相关文章:

cpu-architecture - 弗林瓶颈 - 最大加速 2

javascript - Chrome 在高迭代次数上意外减速

assembly - 最小操作码大小 x86-64 strlen 实现

多 CPU 内核中的 Java 多线程

c++ - 如何确定要为体系结构启用或禁用的功能标志

x86 - 乱序执行会导致推测性内存访问吗?

assembly - 如何在 64 位 (linux) 上的 asm 中将 argv 参数传递给 execv

assembly - 在 64 位 masm 中打印 hello

.net - 多核环境中的多线程应用程序 - 每个核心的奇怪负载

python - 如何编写脚本在多核机器上有效运行多进程