gpt4 book ai didi

c - 更喜欢 fetch_and_add 还是 add_and_fetch?

转载 作者:太空宇宙 更新时间:2023-11-04 02:55:32 29 4
gpt4 key购买 nike

我正在使用 GCC's atomic builtins增加一个共享的 volatile int。我只想增加值,我不关心返回值。为此,我应该选择 fetch_and_add 还是 add_and_fetch?我在文档中没有看到任何暗示一个比另一个有性能优势的内容。真的没关系吗?

或者,由于我实际上不需要以原子方式读取值,是否有更好的方法来增加 volatile int 因为我实际上并不读取返回值?

这显然与体系结构相关,因此您可以假设我使用的是 x64。如果有影响,我会特别使用 AMD Opteron CPU。

最佳答案

这取决于您的硬件、变量的大小、增量值和编译器选项。

要检查它,将一个小的 C 程序翻译成汇编。

volatile int init;
void foo(void) {
__sync_fetch_and_add(&init,1);
__sync_add_and_fetch(&init,1);
}

用 'gcc -S x.c' 翻译成文件 x.s。x.s中最有意思的是

    lock addl       $1, init(%rip)
lock addl $1, init(%rip)

这表明两个内在函数被翻译成相同的汇编代码(此处为 Intel x64)。

您也可以尝试使用 -march=native 和/或 -O3 或您最喜欢的选项,看看它是否始终相同...

关于c - 更喜欢 fetch_and_add 还是 add_and_fetch?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18011044/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com