难以理解'__atomic_compare_exchange'的伪装代码

时间:2017-03-02 02:49:26

标签: c++ profiling vtune

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

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

我看了一下汇编代码。

enter image description here

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

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

2 个答案:

答案 0 :(得分:2)

std::make_unique<std::vector<int>>(22, 1)需要很长时间。当探查器确定程序当前的位置时,有时必须等待指令完成执行才能找到它。这会导致在长时间不可中断的指令之后的指令被报告为占用大量时间,而实际上前一条指令是如此冗长。

答案 1 :(得分:1)

It is actually lock cmpxchg is taking this time. There is the following limitation mentioned in VTune release notes which explains this: Running time is attributed to the next instruction (200108041)