什么是伪共享问题(False Sharing)

在计算机由单核发展到多核之后,多核编程也成为提高性能的利器。每个CPU都有自己的Cache,如果一个内存中的变量在每个cache都存在的话,就需要保证各个cache中变量的一致性。Intel多核架构实现Cache一致性是采用的MESI (Modified/Exclusive/Shared/Invalid) 协议。
缓存系统中是以缓存行(cache line)为单位存储的。缓存行是2的整数幂个连续字节,一般为32-256个字节。最常见的缓存行大小是64个字节。当多线程修改互相独立的变量时,如果这些变量共享同一个缓存行,就会无意中影响彼此的性能,这就是伪共享。缓存行上的写竞争是运行在SMP系统中并行线程实现可伸缩性最重要的限制因素。有人将伪共享描述成无声的性能杀手,因为从代码中很难看清楚是否会出现伪共享。

为了让可伸缩性与线程数呈线性关系,就必须确保不会有两个线程往同一个变量或缓存行中写。两个线程写同一个变量可以在代码中发现。为了确定互相独立的变量是否共享了同一个缓存行,就需要了解内存布局,或找个工具告诉我们。Intel VTune就是这样一个分析工具。本文中我将解释Java对象的内存布局以及我们该如何填充缓存行以避免伪共享。

图1说明了伪共享的问题。在核心1上运行的线程想更新变量X,同时核心2上的线程想要更新变量Y。不幸的是࿰

多核编程中伪共享问题(false sharing)相关推荐

  1. 伪共享(false sharing),并发编程无声的性能杀手

    在并发编程过程中,我们大部分的焦点都放在如何控制共享变量的访问控制上(代码层面),但是很少人会关注系统硬件及 JVM 底层相关的影响因素.前段时间学习了一个牛X的高性能异步处理框架 Disruptor ...

  2. .NET 并行(多核)编程系列之七 共享数据问题和解决概述

    .NET 并行(多核)编程系列之七 共享数据问题和解决概述 原文:.NET 并行(多核)编程系列之七 共享数据问题和解决概述 .NET 并行(多核)编程系列之七 共享数据问题和解决概述 前言:之前的文 ...

  3. 多核编程中的负载平衡难题

    多核编程中的负载平衡难题 作者:周伟明 相关文章链接: 多核编程中的锁竞争难题 多核编程的几个难题及其应对策略(难题一) OpenMP并行程序设计(二) OpenMP并行程序设计(一) 双核CPU上的 ...

  4. 一起谈.NET技术,.NET并行(多核)编程系列之七 共享数据问题和解决概述

    之前的文章介绍了了并行编程的一些基础的知识,从本篇开始,将会讲述并行编程中实际遇到一些问题,接下来的几篇将会讲述数据共享问题. 本篇的议题如下: 1.数据竞争 2.解决方案提出 3.顺序的执行解决方案 ...

  5. Java Review - 并发编程_伪共享

    文章目录 what's 伪共享 为何会出现伪共享 如何避免伪共享 小结 what's 伪共享 为了解决计算机系统中主内存与CPU之间运行速度差问题,会在CPU与主内存之间添加一级或者多级高速缓冲存储器 ...

  6. 伪共享,并发编程无声的性能杀手

    伪共享,并发编程无声的性能杀手 在并发编程过程中,我们大部分的焦点都放在如何控制共享变量的访问控制上(代码层面),但是很少人会关注系统硬件及 JVM 底层相关的影响因素.前段时间学习了一个牛X的高性能 ...

  7. Java 中的伪共享详解及解决方案

    转载自  Java 中的伪共享详解及解决方案 1. 什么是伪共享 CPU 缓存系统中是以缓存行(cache line)为单位存储的.目前主流的 CPU Cache 的 Cache Line 大小都是 ...

  8. 一篇对伪共享、缓存行填充和CPU缓存讲的很透彻的文章

    认识CPU Cache CPU Cache概述 随着CPU的频率不断提升,而内存的访问速度却没有质的突破,为了弥补访问内存的速度慢,充分发挥CPU的计算资源,提高CPU整体吞吐量,在CPU与内存之间引 ...

  9. CPU Cache下的伪共享和缓存行

    本文转载自https://blog.csdn.net/karamos/article/details/80126704 认识CPU Cache CPU Cache概述 随着CPU的频率不断提升,而内存 ...

最新文章

  1. react es6+ 代码优化之路-1
  2. 数据挖掘原理与算法:练习题1
  3. 02.字符串常量池 ? class常量池? 运行时常量池?
  4. iOS-基于TCP连接Scoket-服务端
  5. Pytorch(4)-模型保存-载入-eval()
  6. SAS在金融中的应用三
  7. 欢迎各位小伙伴们关注我的公众号,可以随时跟我在微信上进行交流
  8. c#期末考试知识点_c#期末考试复习题及答案
  9. coco数据集大小分类_COCO数据集的简单介绍
  10. 一款短小精悍的日志分析工具web_log_analyse
  11. 读msdn文档----五种提高SQL性能的方法
  12. Team Building
  13. kali 查看ip地址
  14. 替换空格 ——《剑指offer》
  15. 机器学习入门系列05,Classification: Probabilistic Generative Model(分类:概率生成模型)
  16. 社交电商如何持续进化?来看看最新的拼团玩法——七人拼团
  17. Spring-IoC概念
  18. 在计算机海洋里摸爬滚打搜集的一些资源
  19. 智能手机中图像处理的原理解析及 RGB 数值变化规律研究
  20. 计算机专业学bim有用吗,大学选择BIM专业,毕业后有就业前景吗?

热门文章

  1. Java开发者必须掌握的20个Spring常用注解
  2. 携程实时计算平台架构与实践丨DataPipeline
  3. 更高效地提高redis client多线程操作的并发吞吐设计
  4. 初学者一些常用的SQL语句(二)
  5. 逆向project实战--Afkayas.1
  6. 走路!不要跑步!不生病的秘密!
  7. 【心灵鸡汤】谁的青春不迷茫
  8. Spring Boot:在Spring Boot中使用定时任务
  9. 13.追我的男生辣么多
  10. Selenium操作页面元素