为什么 StoreLoad 比其他屏障类型更贵?

问题描述 投票:0回答:1

已经有一个关于为什么 StoreLoad 屏障昂贵的问题,并且答案解释了它很昂贵,因为 StoreLoad 屏障阻塞了加载,直到(可能昂贵的)存储操作完成。

但是,这对我来说并不完全有意义,因为其他屏障类型(例如 LoadStore、LoadLoad、StoreStore)似乎具有与屏障之后的操作相同的属性,直到屏障之前的操作完成为止。我想知道是否/为什么 StoreLoad 总是被认为与各自性能中的其他障碍本质上不同?

我确实理解,在具有强大内存模型的特定平台上(例如 X86),从 CPU 的角度来看,其他三种屏障类型是免费的,因此只需要编译器屏障。但是其他没有强大内存模型保证的平台(例如 ARM、PowerPC)呢? StoreLoad还贵吗?

performance cpu-architecture memory-barriers
1个回答
1
投票

对于intel x86-64,这个评论说过‘LoadLoad、StoreStore和LoadStore’是由硬件保证的,所以它们并不昂贵。

StoreStore 的基本操作在重新排序后没有改变,尽管 intel 不会重新排序,这在 Intel 64 和 IA-32 架构中显示 软件开发人员手册(订单号:325462-079US)第 3 卷-A“9.2.3.2 加载或存储均不会通过类似操作重新排序”。所以虽然有存储缓冲区,但开销并不高。 (即上面评论中的“相互订购商店”)

至于其他架构,希望有人能填补这里的空缺。我不是专家。

已编辑

对于 Arm,StoreLoad 还意味着缓冲区耗尽,至少对于 Cortex-M55 来说是这样。

© www.soinside.com 2019 - 2024. All rights reserved.