gpt4 book ai didi

c - 在 8 位字段上使用 CMPXCHG 指令在任何方面都比在 32 位字段上更糟糕吗?

转载 作者:太空狗 更新时间:2023-10-29 17:21:05 26 4
gpt4 key购买 nike

我想问一下,在 8 位内存字段上使用 CMPXCHG 指令是否在任何方面都比在 32 位字段上使用它更糟糕。

我正在使用 C11 stdatomic.h 来实现几个同步方法。

最佳答案

不,lock cmpxchg [mem], reg 8 与 32 位 没有任何惩罚。现代 x86 CPU 可以加载并存储到它们的 L1d 缓存中,与对齐的 dword 或 qword 相比,单个字节没有损失。 Can modern x86 hardware not store a single byte to memory?答案:它可以零惩罚1,因为它们花费晶体管来使未对齐的加载/存储更快。

[u]int32_t 相比,处理寄存器中窄整数的周围 asm 指令如果有任何额外成本也应该可以忽略不计。参见 Why doesn't GCC use partial registers? - 大多数编译器都知道如何小心使用部分寄存器,而现代 CPU(Haswell 及更高版本,以及所有非 Intel 处理器)不会将低位 8 与寄存器的其余部分分开重命名,因此唯一的危险是错误的依赖性。根据您正在做的事情,最好将 unsigned 本地临时文件与 _Atomic uint8_t 一起使用,或者最好让您的本地人也 uint8_t.

脚注 1:与某些非 x86 CPU 不同,在这些 CPU 中,字节存储实际上是通过缓存 RMW 周期 (Are there any modern CPUs where a cached byte store is actually slower than a word store?) 实现的。在那些 CPU 上,您希望 atomic xchg 对于字和字节来说同样便宜,但是对于 cmpxchg 来说,这太过分了。但是几乎所有非 x86 ISA 都有 LL/SC 而不是 xchg/cmpxchg,所以即使是原子交换也是单独的 LL 和 SC 指令,并且 SC 将需要一个 RMW 周期来提交到缓存。

关于c - 在 8 位字段上使用 CMPXCHG 指令在任何方面都比在 32 位字段上更糟糕吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58213995/

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