不要原子操作变得较慢多个CPU被添加?(Do atomic operations become sl

2019-08-20 02:59发布

x86和其他架构提供特殊的原子操作(锁定,CMPXCHG等),让你写“无锁”的数据结构。 但是,随着越来越多的内核被添加,它好像工作的这些指令将必须做些幕后将增长(至少保持高速缓存一致性?)。 如果一个原子添加大约需要100今天次双核心系统上,它可能会在未来的80多个核的机器显著更长的时间? 如果你正在编写代码到最后,也许它实际上是一个更好的主意,用锁定,即使今天他们是慢?

Answer 1:

你是正确的,拓扑限制将,这种或那种方式,提高核心之间的通信延迟,一旦开始计数超过几十走高。 我真的不知道是什么意图是x86的公司来处理那种缩放。

但锁是在原子操作的方面来实现。 所以,你真的不试图切换到他们,除非他们比你会用自己的手挽原子操作尝试什么更多可扩展的方式实现夺冠。 我认为,通常,对于单令牌般的争论,原子基元将始终还是以最快的方式,无论你有多少个核都有。

作为克雷发现很久以前,这里有没有免费的午餐。 高级软件设计,在您尝试使用可能引起争议的资源这样罕见的可能会一直导致大规模并行应用程序的最大支出。 这意味着做尽可能多的工作,尽可能获取锁的结果,而是尽快为好。 在极端的情况下,这可能意味着预先计算您在成功获取锁的假设工作,试图抓住它,并刚刚完成尽可能快地成功,否则扔掉的失败你的工作和重试。



Answer 2:

在标题提出的问题,简单的答案是“是”的长答案是“它是复杂的。”

至于锁是更好的,没有。 内部锁具有推动至少尽可能多的(如果不是更多)流量在总线。 想想看,这样一来,如果处理器只有一个原子操作,原子比较和交换,你可以用它来实现锁和原子增量。 那么在总线协议的水平也有使用,只有少数元。 锁并不比原子操作,因为他们正在做的事情不同的速度较慢,他们是慢,因为他们正在做更多的同样的事情(从一致性的观点来看)。 因此,作为原子操作慢下来,锁往往会相当慢下来。

话虽如此,有很多很多的关于这个问题的论文和特殊情况是复杂的。 我不会担心你的代码是怎么回事规模上具有不可预知的性能80个核CPU(因为我们不知道?他们将如何设计)。 他们要么会表现得像我们目前的CPU和你的代码将进行罚款,否则将不能和任何你猜现在会变成错了。 在大多数情况下,它会变成代码是不会影响性能无论如何,所以也无所谓,但如果是的话那么适当的事情会解决它在未来的时候,当你理解建筑和性能特点你的目标处理器。



Answer 3:

我不认为这个问题是原子操作将需要更长的时间自己; 真正的问题可能是一个原子操作可能会阻止其它处理器上总线操作(即使他们执行非原子操作)。

如果你想编写代码来持续,尽量避免在第一时间锁定。



Answer 4:

在一个侧面说明了这个问题,值得一提的,你指的是未来已经在GPU的本技术。 一个现代化的Quadro图形具有多达256个内核,可以在全球(显示)内存pefrorm原子操作。
我不知道这是如何实现的,但事实是,它已经发生了。



文章来源: Do atomic operations become slower as more CPUs are added?