gpt4 book ai didi

multithreading - x86 暂停指令在自旋锁中如何工作*以及*它可以在其他场景中使用吗?

转载 作者:行者123 更新时间:2023-12-03 07:41:07 25 4
gpt4 key购买 nike

pause指令常用于测试循环spinlock ,当其他线程拥有自旋锁时,以减轻紧密循环。据说相当于一些NOP指令。有人能告诉我它到底是如何用于自旋锁优化的吗?在我看来,即使是 NOP 指令也是浪费 CPU 时间。它们会降低 CPU 使用率吗?

另一个问题是我可以将暂停指令用于其他类似的目的吗?例如,我有一个繁忙的线程,它不断扫描某些地方(例如队列)以检索新节点;然而,有时队列是空的,线程只是在浪费CPU时间。 sleep 线程并由其他线程唤醒它可能是一种选择,但是线程很关键,所以我不想让它 sleep 。

可以为了我的目的暂停指令工作以减轻 CPU 使用率吗?目前它使用物理核心 100% 的 cpu?

最佳答案

PAUSE通知 CPU 这是一个自旋锁等待循环,因此可以优化内存和缓存访问。另请参阅pause instruction in x86有关在离开自旋循环时避免内存顺序错误推测的更多详细信息。

PAUSE实际上可能会停止CPU一段时间以节省电量。较旧的 CPU 将其解码为 REP NOP,因此您不必检查其是否受支持。较旧的 CPU 将尽可能快地不执行任何操作 (NOP)。

另请参阅https://software.intel.com/en-us/articles/benefitting-power-and-performance-sleep-loops

<小时/>

更新:我认为在队列检查中使用 PAUSE 不是一个好主意,除非您打算使队列像自旋锁一样(并且没有明显的方法来做到这一点)。

即使暂停,长时间旋转仍然很糟糕。

关于multithreading - x86 暂停指令在自旋锁中如何工作*以及*它可以在其他场景中使用吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4725676/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com