繁体   English   中英

原子 RMW 操作和函数调用的比较成本是多少?

[英]What's the compative cost of an atomic RMW operation and a function call?

我的理解是原子机器指令可能比非原子操作慢两个数量级。 例如,给定

int x;
x++

std::atomic<int> y;
y++;

我的理解是x++通常比y++运行得快得多。 (我假设增量操作映射到底层机器指令。我确信确切的比较成本因架构而异,但我说的是经验法则。)

作为一般经验法则,我再次对原子 RMW 操作和非内联函数调用的相对成本感兴趣。 例如,给定这个非内联函数,

void f(){}

与执行非内联调用f的成本相比,我们通常可以说y++的成本(即原子增量)?

我的动机是试图正确看待“原子操作比非原子操作昂贵得多”的普遍主张。 一种方法是尝试了解与调用和从非内联函数返回相比,原子 RMW 操作的开销有多大。

请不要回复“唯一知道的方法就是测量”。 我不是在询问原子 RMW 操作与特定架构上特定上下文中的函数调用。 我问的是一个一般的经验法则,可以用作讨论基础的人,他们可能会认为,“我们永远不能使用原子指令,因为它们太贵了”,但他们不会三思而后行函数调用。

问的问题有问题。

一是您使用的伪代码语法没有明确的存储类并且似乎对本地对象进行操作。 局部原子对象是没有意义的。 原子操作是针对不同线程共享的对象。

编译器很可能会注意到非易失性局部变量仅在函数中使用,并且不会生成任何特殊的原子操作(我不知道目前有任何编译器会这样做)。

我们必须假设对象不是本地的(或者是易失的)。

任何存储器操作的成本取决于缓存很多 如果该位置不在我们的缓存中,则操作成本会高得多。

堆栈的所有末端(最近的部分)几乎总是在我们的缓存中。

根据定义,共享对象的值必须在缓存之间传输(它们被多个线程修改或读取)。

那么你在这里真正比较的是什么? 除非你说得准确,否则这个问题是无法回答的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM