随着CPU数量的增加,原子操作是否会变得更慢?

2023-12-28

x86 和其他体系结构提供特殊的原子指令(lock、cmpxchg 等),允许您编写“无锁”数据结构。但随着越来越多的核心被添加,这些指令实际上必须在幕后完成的工作似乎会增加(至少是为了保持缓存一致性?)。如果今天的原子添加在双核系统上需要约 100 个周期,那么在未来的 80 多个核心机器上是否需要更长的时间?如果您编写的代码是为了持久,那么使用锁实际上可能是一个更好的主意,即使它们现在速度较慢?


你是对的,一旦计数开始高于几十个,拓扑约束就会以某种方式增加内核之间的通信延迟。我真的不知道 x86 公司处理这种扩展的意图是什么。

但锁是通过原子操作来实现的。因此,尝试切换到它们并不能真正获胜,除非它们以比您自己的手动原子操作尝试更具可扩展性的方式实现。我认为,一般来说,对于单个令牌之类的争用,原子原语始终是最快的方法,无论您有多少个核心。

正如克雷很久以前就发现的那样,天下没有免费的午餐。在高级软件设计中,您尝试尽可能不频繁地使用潜在有争议的资源,这始终会在大规模并行应用程序中带来最大的回报。这意味着获取锁后要做尽可能多的工作,但也要尽可能快。在极端情况下,这可能意味着在成功获取锁的假设下预先计算您的工作,尝试抓住它,并在成功时尽快完成,否则丢弃您的工作并在失败时重试。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

随着CPU数量的增加,原子操作是否会变得更慢? 的相关文章

随机推荐