【问题标题】: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 操作有什么关系? 此操作正在移动哪些数据?

【问题讨论】:

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

标签: c++ profiling intel-vtune


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-02-24
      • 2016-12-24
      • 1970-01-01
      • 2013-08-15
      • 1970-01-01
      • 1970-01-01
      • 2021-02-25
      相关资源
      最近更新 更多