内存模型与无锁编程全解析
1. 互锁操作的相对成本
在一些循环中,我们可以通过引入延迟来减少竞争。从相关图表中能看到,当省略这种延迟时,由于缓存竞争的增加,互锁操作的相对成本会上升。图表中的数字是相对的,其目的是让我们了解这些操作相对于普通读写操作的成本。需要注意的是,不要试图从中推断出绝对成本,因为不同架构下的成本差异很大。
常见的互锁操作包括:
- Load/Store
- Load/XCHG
- CMPXCHG
2. 内存一致性模型概述
内存一致性模型,简称内存模型,是一个复杂但重要的话题。它精确地规定了在何种条件下,哪些类型的加载和存储操作可以相互移动以及移动的方向。内存模型的强度范围是连续的,从弱到强分布。
2.1 弱内存模型与强内存模型
- 弱内存模型 :允许所有的加载和存储操作重新排序,但要保证原程序的顺序正确性,即不违反数据依赖。这种模型为优化提供了更多机会,但编程难度较大。
- 强内存模型 :以顺序一致性为代表,禁止所有的重新排序,程序的执行顺序与代码编写顺序完全一致。它更易于理解和编程,但会牺牲一些优化机会。任何比顺序一致性弱的模型通常被称为宽松内存模型。
在理想情况下,我们都希望使用顺序一致性进行编程,但顺序一致性往往会带来巨大的性能影响。随着未来架构中顺序执行变得更流行以降低功耗和复杂度,追求顺序一致的架构可能会更具吸引力。目前,内存模型的开发者需要权衡利弊,制定出能为用户带来最大价值的规则。
超级会员免费看
订阅专栏 解锁全文
3万+

被折叠的 条评论
为什么被折叠?



