c++ - '__atomic_compare_exchange'汇编代码难懂

标签 c++ profiling intel-vtune

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

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

我看了一下汇编代码。

enter image description here

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

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

最佳答案

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

关于c++ - '__atomic_compare_exchange'汇编代码难懂,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42545946/

相关文章:

c++ - 来自 cpp 文件的部分行最终出现在输出文件中 - 闹鬼代码?

c++ - 有什么优雅的方法可以在 C++ 中格式化字符串?

c++ - 在 C++ 中使用 ios_base 时范围解析运算符的目的是什么

cuda - 如何观察可执行文件子部分的CUDA事件和指标(例如,仅在内核执行期间)?

linux - system_call_after_swapgs,我的代码大部分时间都花在哪里?

c++ - 从 C++ 到 C 的转换

c++ - 获取以毫秒为单位的时间来分析函数持续时间

profiling - Callgrind main() inclusive 成本远小于 100%

c - 使用 C/Intel 程序集寻求最大位图(又名位数组)性能

c++ - 如何反汇编编译器生成的代码?