理解'__atomic_compare_exchange'的汇编代码的困难

Posted

技术标签:

【中文标题】理解\'__atomic_compare_exchange\'的汇编代码的困难【英文标题】:Difficulties in understand assmbly code of '__atomic_compare_exchange'理解'__atomic_compare_exchange'的汇编代码的困难 【发布时间】:2017-03-02 02:49:25 【问题描述】:

我用 C++ 编程并使用 CAS 操作进行线程同步。

我使用 Vtune 分析了我的程序,发现大部分时间都花在了 CAS 操作上。

我看了一下汇编代码。

分析结果显示,大部分时间都花在了“movq %rax, (%rsi)”上,而不是“lock cmpxchgq %rcx, (%rdi)”上。

'movq %rax, (%rsi)' 操作与 CAS 操作有什么关系? 此操作正在移动哪些数据?

【问题讨论】:

请在此处以纯文本形式发布代码、错误或文本输出,而不是难以阅读、无法复制粘贴以帮助测试代码或在答案中使用的图像,并且是对使用屏幕阅读器的人怀有敌意。您可以编辑问题以在问题正文中添加代码。使用 按钮来格式化任何代码块,或者使用四个空格缩进以获得相同的效果。 【参考方案1】:

lock cmpxchgq 需要很长时间。当分析器确定程序当前的位置时,它有时必须等待指令完成执行才能找到。这会导致在一条长的、不可中断的指令之后的指令被报告为占用大量时间,而实际上前一条指令是如此冗长。

【讨论】:

【参考方案2】:

实际上是lock cmpxchg 正在占用这个时间。 VTune release notes 中提到了以下限制,这解释了这一点: 运行时间归因于下一条指令(200108041)

【讨论】:

以上是关于理解'__atomic_compare_exchange'的汇编代码的困难的主要内容,如果未能解决你的问题,请参考以下文章

深入理解Python中的 __new__ 和 __init__

if __name__ == '__main__' 如何正确理解?

(转)Python中如何理解if __name__ == '__main__'

使用元类理解 __call__ [重复]

Python 中的 if __name__ == '__main__' 该如何理解

魔力Python--if __name__ == '__main__' 的理解