理解'__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__'