2

i am using gcc 4.4.6 and atomics can be accessed by #include <cstdatomic> . After using them, i realized they are very very slow. Finally i came across a post on stackoverflow, which describes it here Why is std::atomic<bool> much slower than volatile bool?

But i am not able to follow it. Can someone please help me understand that post or explain why atomics in gcc4.4.6 are so slow?

4

2 回答 2

2

我相信 gcc-4.4 很早就支持原子。gcc 中的原子最近在 gcc-4.7 中进行了重新设计。我相信这是第一个版本,其中不同的硬件目标能够使用特定于硬件的高效内置函数。在 gcc-4.8 中提供了一个 libatomic。在 4.7 和 4.8 的过程中,各种平台都升级了它们的原子支持。wiki解释了使用原子时各种内存模型的一些优化权衡。

基本上,gcc-4.4 有点早。IIRC 甚至原子的标准规范也通过 gcc-4.7 不断变化。

于 2013-02-02T20:17:07.897 回答
0

__sync_*在 4.6.3 中使用了这些函数,并没有注意到任何明显的缓慢,生成的汇编代码也没有显示任何异常。我刚刚更新了我曾经使用__sync_fetch_and_add过的项目std::atomic<>::fetch_add()——尽管它不经常调用原子函数,但我的代码完全没有区别——在代码的单线程或多线程运行中。所以我同意前面的回答:换一个新gcc的,它应该会自行修复。

于 2013-02-02T20:29:04.930 回答