Performance 为什么_mm_pause()可以显著提高性能?
根据: 无效_mm_暂停(无效) 下一条指令的执行在一个实现中被延迟 具体时间。该指令不修改 建筑状态。这一内在因素尤其重要 性能增益 也就是说:Performance 为什么_mm_pause()可以显著提高性能?,performance,assembly,x86,cpu-architecture,lockless,Performance,Assembly,X86,Cpu Architecture,Lockless,根据: 无效_mm_暂停(无效) 下一条指令的执行在一个实现中被延迟 具体时间。该指令不修改 建筑状态。这一内在因素尤其重要 性能增益 也就是说: while(!acquire_spin_lock())\u mm_pause();//代码片段1 速度更快,功耗更低 当(!acquire_spin_lock())继续时;//代码段2 我能理解为什么代码段1比代码段2功耗更低 我不能理解的是: 为什么代码段1比代码段2快?这看起来很有趣:“对于自旋锁实现,Intel至少有一条PAUSE指令,专门通知
while(!acquire_spin_lock())\u mm_pause();//代码片段1
速度更快,功耗更低
当(!acquire_spin_lock())继续时;//代码段2
我能理解为什么代码段1比代码段2功耗更低
我不能理解的是:
为什么代码段1比代码段2快?这看起来很有趣:“对于自旋锁实现,Intel至少有一条PAUSE指令,专门通知CPU这是一个自旋锁等待循环,这允许它尽可能优化缓存和内存访问,以避免内存排序冲突,从而要求CPU同步。我相信,在较旧的处理器上,这可能非常引人注目。。。。暂停实际上也可能会延迟CPU进行此优化,而as rep nop只会以尽可能快的速度运行。”它避免了内存顺序错误推测管道核(也称为完全清除管道,如分支未命中,但更糟)关于离开循环的迭代。同样相关:另请参见Nehalem Xeon上的基准测试。也提出了一些煽动性的说法,但也引用了Intel的优化手册:将SKL上的暂停延迟从~10个周期增加到~100个周期的好处是,通过从其他HyperC上偷取更少的周期,加快HT系统上的线程工作负载read.(并且在spin等待时经常重读会减少争用。)@racraman,区分PAUSE和REP NOP是没有意义的,因为它们是完全相同的指令。如果你多读一点链接的线程,你会发现引用语的作者收回了它。