`
isiqi
  • 浏览: 16491448 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

False Sharing问题

阅读更多

在多处理器,多线程情况下,如果两个线程分别运行在不同的CPU上,而其中某个线程修改了cache line中的元素,由于cache一致性的原因,另一个线程的cache line被宣告无效,在下一次访问时会出现一次cache line miss,哪怕该线程根本无效改动的这个元素,因此出现了False Sharing问题【1】。

如下图所示,thread1修改了memory灰化区域的第[2]个元素,而Thread0只需要读取灰化区域的第[1]个元素,由于这段memory被载入了各自CPU的硬件cache中,虽然在memory的角度这两种的访问时隔离的,但是由于错误的紧凑地放在了一起,而导致了,thread1的修改,在cache一致性的要求下,宣告了运行Thread0的CPU0的cache line非法,从而出现了一次miss,导致从小从memory中读取到cache line中,而一致性的代价付出了,但结果并不是thread0所care的,导致了效率的降低。关于实验可以参考[2]。

因此在多核编程情况下,要特别注意False Sharing问题。

解决的方法可以是:详细参见【1】

__declspec (align(64)) int thread1_global_variable;
__declspec (align(64)) int thread2_global_variable;

或者是

  1. structThreadParams
  2. {
  3. //Forthefollowing4variables:4*4=16bytes
  4. unsignedlongthread_id;
  5. unsignedlongv;//Frequentread/writeaccessvariable
  6. unsignedlongstart;
  7. unsignedlongend;
  8. //expandto64bytestoavoidfalse-sharing
  9. //(4unsignedlongvariables+12padding)*4=64
  10. intpadding[12];
  11. };
  12. __declspec(align(64))structThreadParamsArray[10];

【1】http://software.intel.com/en-us/articles/avoiding-and-identifying-false-sharing-among-threads/

【2】http://www.codeproject.com/KB/threads/FalseSharing.aspx

分享到:
评论

相关推荐

    Java高性能编程 Speed is a Feature !!!

    2. **内存屏障**:在Java中,`volatile`关键字用于确保内存屏障的正确性,以防止false sharing问题。 3. **自旋锁**:虽然没有上下文切换,但会占用CPU时间。 4. **互斥锁**:会产生上下文切换,不会占用CPU时间。 ...

    【并发编程】 — 伪共享(False Sharing)底层原理及其解决方式

    1.2 缓存行的概念1.3 伪共享(False Sharing)的概念 + 其可能引发的性能问题2 如何避免伪共享 — 数据填充2.1 不使用数据填充时的效率验证2.2 手动进行数据填充的效率验证2.3 通过java8新特性@sun.misc.Contended...

    false-sharing

    虚假共享建造mvn clean packagedocker build -t false-sharing .跑docker run false-sharing

    真正解决百度编辑器UEditor上传图片跨域问题.docx

    最后,解决跨域问题不仅涉及前端代码,还需要后端服务器配置CORS(Cross-Origin Resource Sharing)策略,允许来自不同源的请求。确保服务器返回的响应头包含`Access-Control-Allow-Origin`字段,并设置为允许的源,...

    love-sharing-service:爱分享小程序预设原始码

    useSSL=false & useUnicode=true & characterEncoding=utf-8 & zeroDateTimeBehavior=convertToNull & transformedBitIsBoolean=true & serverTimezone=GMT+8 & nullCatalogMeansCurrent=true username: root

    爱立信NSASA 双模设置Co-Cell knowledge sharing.pptx

    如果MOM参数secondaryCellOnly设置为“false”,则应用SA(或NSA+SA)模式;如果设置为“true”,则应用NSA模式。 配置NSA SA共模小区时,有以下几个前提条件:首先,eNB(演进型节点B,即4G基站)需安装FAJ 121 ...

    程序员的技术成长攻略.pdf

    ”程序员需要了解底层知识,包括存储、写请求、Cache/Disk、计算存储分离、缓存、高速缓存的作用、理解volatile、false-sharing、计算、分支预测、网络、LVS、SLB等。这些知识点是技术创新和解决问题的基础。 解决...

    AJAX学习总结(四)---解决缓存问题

    cache: false, // jQuery默认为true,设置为false可以禁用缓存 headers: { "Cache-Control": "no-cache", "Pragma": "no-cache" }, // 其他配置... }); ``` #### 3. 使用POST请求 通常,GET请求更容易被...

    CPU Cache and Memory Ordering

    网易杭研院何登成学习CPU架构以及并发程序设计的一些心得 与收获。主要内容包括: – 简单介绍CPU的架构,部分主要模块及其功能(Cache Structure, ...Data Race (False-Sharing, Per-Processor Data))

    AJAX开发中常见的三种问题

    解决方法包括使用JSONP(JSON with Padding)技术,设置服务器端允许CORS(Cross-Origin Resource Sharing)或者使用代理服务器转发请求。 2. **异步操作的管理**: AJAX的本质是异步通信,这可能导致数据加载与...

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

    public final class FalseSharing implements Runnable { public final static int NUM_THREADS = 4; // 线程数量 public final static long ITERATIONS = 500L * 1000L * 1000L; // 迭代次数 private final int ...

    Oracle+11g安装后参数规范设置.pdf

    - `alter system set "_optimizer_adaptive_cursor_sharing"=false sid='*' scope=spfile;` - `alter system set "_optimizer_extended_cursor_sharing"=none sid='*' scope=spfile;` - `alter system set "_...

    ArcGIS API for Flex开发WebGIS中的安全沙箱问题

    当使用ArcGIS API for Flex进行跨域请求时,比如获取地图服务、图层或地理编码数据,Flash Player的安全策略会阻止这些操作,除非服务器返回一个合适的Cross-Origin Resource Sharing (CORS)头或者一个crossdomain....

    解决ajax跨域问题

    随着技术的发展,现在更多地推荐使用CORS(Cross-Origin Resource Sharing,跨源资源共享)来解决跨域问题,因为它更加灵活且安全。 总之,理解和掌握JSONP的基本原理和实现方法对于前端开发者而言是非常重要的。...

    (北京专用)2014届高考英语一轮复习方案 作业手册(34) Unit 4 Sharing(含解析) 新人教版选修7

    7. 第8题 "a false sense of security" 指“虚假的安全感”,符合语境中未能预见危险的到来,所以正确答案是A. security。 8. 第9题 "adjusted correctly" 意为“正确调整”,用于描述望远镜对视力的校准,所以正确...

    120道Java面试题以及答案.doc

    4. **伪共享(False Sharing)** - 伪共享是指不同线程对位于同一缓存行内的变量进行修改,导致不必要的缓存失效和额外的通信开销。解决这个问题需要仔细调整数据结构,以避免变量在内存中的紧密排列。 5. **忙...

    js解决跨域访问问题

    CORS(Cross-Origin Resource Sharing)是另一种解决跨域问题的有效方案,它是通过在HTTP头部添加特定字段来允许服务器声明哪些资源可以被其他源访问。为了启用CORS,服务器需要在响应头中添加`Access-Control-Allow...

    flex跨域访问问题

    1. **CORS(Cross-Origin Resource Sharing)** CORS是一种现代的跨域访问解决方案,服务器可以通过设置特定的HTTP响应头`Access-Control-Allow-Origin`来允许特定的源进行跨域访问。在Flex中,你可以通过...

    2019杭州云栖大会-程序员的成长攻略.pdf

    同时,理解volatile关键字的使用场景、避免false sharing(伪共享)来优化多线程性能也是性能调优的要点。在计算机科学中,分支预测是处理器优化的关键技术,它能够大幅提高程序的运行效率。网络层面上,LVS(Linux ...

Global site tag (gtag.js) - Google Analytics