我正在为我的最新项目制作一个基于光纤的作业系统,该系统将依赖于使用自旋锁来实现正确的功能。我本来打算使用 PAUSE 指令,因为这似乎是普通现代自旋锁等待部分的黄金标准。然而,在对实现我自己的光纤进行一些研究时,我发现最近机器上的暂停周期持续时间已增加到不利的程度。
我从这里发现了这一点,其中引用了英特尔优化手册,“上一代微架构中 PAUSE 指令的延迟约为 10 个周期,而在 Skylake 微架构上它已扩展到多达 140 个周期,”和“由于 PAUSE 延迟显着增加,对 PAUSE 延迟敏感的工作负载将遭受一些性能损失。”
因此,我想找到 PAUSE 指令的替代方案以在我自己的自旋锁中使用。我读过,在过去,暂停一直是首选,因为它以某种方式节省了能源使用,我猜测这是由于另一个经常引用的事实,即使用暂停以某种方式向处理器发出信号,表明它处于自旋锁之中。我还猜测,这是在功率范围的另一端,为所需的周期数进行一些虚拟计算。
鉴于此,是否有一种最佳情况的解决方案能够接近 PAUSE 的表观能源效率,同时具有作为重复“丢弃”计算的灵活性和低周期计数?