我正在深入研究多线程编程,并考虑使用原子操作进行无锁引用计数。
很明显,原子操作可能比非原子操作慢,至少在恒定的范围内。我担心的是其他CPU同步来执行原子操作。
我想知道在核心A上执行原子操作(如果和多少)是否会影响其他核心的性能,这些核心:
发布于 2015-09-15 16:55:08
许多人认为原子操作很便宜。然而,由于原子操作是一种推广,所以它不一定是正确的。原子操作有三种基本类型:
前两者通常都比较便宜(或者,我们都知道,它们的成本与英特尔上的非原子朋友完全一样)。它们确实设置了内存屏障,但这些障碍只与执行它们的CPU相关,CPU正在努力提高屏障的效率。然而,在争论中,第三种可能并不便宜。原子CAS和朋友实际上在循环中执行操作,直到成功为止,因此在争用时执行操作可能需要大量时间。
发布于 2016-02-26 08:38:19
我将原子读-修改-写入操作与现代x86 CPU上相应的非原子操作进行比较。
与核心A无关
没有效果。
正在执行与核心A相同进程的不同线程。
没有效果。
正在执行原子操作
没有效果。
正在执行原子操作,并且正在执行与核心A相同进程的不同线程。
没有效果。
正在执行任何与内存相关的操作,即。装载,储存,..。
没有效果。
是否在同一内存区域(缓存行、页)执行任何与内存相关的操作?作为核心A
高速缓存行必须由执行原子操作的核心独占获取(从缓存中包含它的任何其他核心窃取它),并且在原子操作完成缓存之前不能被另一个核心访问,并且缓存间通信将同步,以便在另一个核心中共享或独占。
原子操作的主要成本是执行原子指令的核心管道。因为原子操作必须同时在一个定义良好的地方进行,所以它(大部分)不能与其他操作重叠。这对超标量CPU来说是一个巨大的损失,它通过在处理的各个阶段保持大量指令来获得性能。
https://stackoverflow.com/questions/32591204
复制相似问题