/// An attribute that will cause a variable or fIEld to be aligned so that/// it doesn't have false sharing with anything at a smaller memory address.#define FolLY_AliGN_TO_AVOID_FALSE_SHARING __attribute__((__aligned__(128)))
AFAIK,现代cpu上的缓存块是64字节长,实际上,我发现的所有资源,包括来自英特尔的this article,都谈到64字节的对齐和填充,以帮助解决虚假共享.
不过,Facebook的人员在需要的时候会将其成员调整为128字节.然后我发现刚刚在FolLY_AliGN_TO_AVOID_FALSE_SHARING的定义上面的解释的开始:
enum { /// Memory locations on the same cache line are subject to false /// sharing,which is very bad for performance. Microbenchmarks /// indicate that pairs of cache lines also see interference under /// heavy use of atomic operations (observed for atomic increment on /// Sandy BrIDge). See FolLY_AliGN_TO_AVOID_FALSE_SHARING kFalseSharingRange = 128};
虽然它给了我更多的细节,我仍然觉得我需要一些见解.我很好奇连续缓存行的同步,或者任何RMW *** 作在大量使用原子 *** 作时可能会相互干扰.
有人可以告诉我如何才能发生这种情况吗?
因此,从性能的角度来看,如果您有一个线程使用的变量,将它们分离到自己的高速缓存行(在原始帖子的示例中,假定为128字节),将数据与该数据对齐值 – 意味着每个数据块都在平均高速缓存线边界上开始,并且没有其他处理器将“共享”相同的数据(除非您真正在线程之间共享数据 – 此时您需要执行相关的缓存维护以确保数据在处理器之间正确更新)
[1]或具有多个内核的现代cpu中的处理器核心.为了简单起见,我使用“处理器”或“处理器”一词来对应于一个插槽内的真实处理器插槽或处理器内核.对于这个讨论,这个区别是无关紧要的.
总结以上是内存溢出为你收集整理的c – 虚假共享和128字节对齐/填充全部内容,希望文章能够帮你解决c – 虚假共享和128字节对齐/填充所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)