Bła*_*lik 7 assembly spinlock rust arm64 armv8
其中有std::hint
一个函数,其文档spin_loop
中具有以下定义:
\n\n\n\n发出机器指令,向处理器发出信号,表明它正在忙等待自旋循环中运行 (\xe2\x80\x9cspin lock\xe2\x80\x9d)。
\n在接收到自旋循环信号后,处理器可以通过例如节省功率或切换超线程来优化其行为。
\n
最后一个让我有点头晕()。我认为这ISB
是一个冗长的操作,这意味着,如果在自旋锁中使用,线程在尝试检测锁是否再次打开时会有点滞后,但除此之外几乎没有任何利润。
ISB SY
在 aarch64 上使用in 代替 a NOP
in spin 循环有什么优点?
我必须深入研究 Rust 存储库历史才能得到这个答案:
已yield
替换isb
为c064b6560b7c
:
在arm64上,我们在几个数据库上看到ISB(指令同步屏障)比自旋循环中的yield更好用。Yield 指令是一个 nop 指令。isb 指令使处理器短暂休眠。isb 相当于 x86 上的暂停指令。
[...]
因此本质上,它利用完成所需的时间ISB
来暂停处理器,从而浪费更少的电量。
Peter Cordes 在他的一篇评论中很好地解释了这一点:
ISB SY 不会长时间停滞,只是在紧密循环中与垃圾邮件负载相比节省了一点电量。
归档时间: |
|
查看次数: |
1108 次 |
最近记录: |