San*_*eep 7 x86 multithreading atomic lock-free
我正在寻找关于各种英特尔处理器的锁定cmpxchg指令的平均延迟的一些参考.我无法找到关于该主题的任何好的参考,任何参考都会有很大帮助.
谢谢.
很少(如果有的话)对此有很好的参考,因为有太多的变化。它基本上取决于一切,包括总线速度、内存速度、处理器速度、处理器数量、周围指令、内存栅栏以及很可能月球和珠穆朗玛峰之间的角度......
如果您有一个非常具体的应用程序,例如已知(固定)硬件、操作环境、实时操作系统和独占控制,那么它可能很重要。在这种情况下,基准。如果您对软件运行的位置没有这种级别的控制,那么任何测量实际上都毫无意义。
正如这些答案中所讨论的,锁是使用 CAS 实现的,因此如果您可以使用 CAS 而不是锁(这将需要至少两个操作),它会更快(明显?只有可能)。
您将找到的最佳参考资料是Intel Software Developer's Manuals,但由于变化太大,它们不会为您提供实际数字。然而,他们将描述如何获得最佳性能。可能是处理器数据(如这里的i7至尊版,在“技术文件”)会给你实际的数字(或至少是一个范围)。
最好的 x86 指令延迟参考可能包含在Agner 的优化手册中,基于对各种 Intel/AMD/VIA 芯片的实际经验测量,并且经常针对市场上最新的 CPU 进行更新。
不幸的是,我没有看到CMPXCHG指令延迟表中列出的指令,但第 4 页确实指出:
带有 LOCK 前缀的指令具有较长的延迟,这取决于缓存组织和可能的 RAM 速度。如果有多个处理器或内核或直接内存访问 (DMA) 设备,则所有锁定的指令都将锁定高速缓存行以进行独占访问,这可能涉及 RAM 访问。一个 LOCK 前缀通常花费超过一百个时钟周期,即使在单处理器系统上也是如此。这也适用于带有内存操作数的 XCHG 指令。