美文网首页
CPU的性能优化

CPU的性能优化

作者: 瑶瑶小仙女 | 来源:发表于2019-05-24 12:58 被阅读0次

    1、CPU的缓存
    CPU存在三级缓存分别是L1,L2,L3,其中L1的大小在32-4096KB,缓存的大小也是从L1到L3逐渐增加,其中大多数情况下是多核CPU共享一个L3缓存。
    CPU读取数据的时候是先读取L1,然后L2,最后L3,要是缓存中没有的话才从主存中读取,最后主存中也咩有的话就从外存中读取。
    然后每个CPU都有自己的缓存那么怎么保证的数据一致性呢,就是通过 缓存同步协议。
    1.1、缓存同步协
    缓存一致性规定缓存要有四种状态。分别是1、修改态,2、专有态,3、共享态,4、无效态
    1、修改态:缓存中的数据已经相对于主存有修改了,属于缓存专有。
    2、专有态:缓存和主存中的数据相同,属于缓存专有。
    3、共享态:缓存和主存中的数据相同,属于缓存专有。
    4、无效态:缓存和主存中的数据已经不同,切该cache已经无效。
    多核CPU中,CPU对于数据的修改需要通知给其他的CPU。
    那就意味着,多核CPU在执行的时候不仅要控制自己的数据读写,同时还要监听别的CPU对数据的读写。从而保证数据的一致性。

    2、指令重排序
    第二个CPU对对于代码执行效率的优化是指令重排序
    指令重排序是指CPU在不改变程序执行结果的情况下对执行的指令进行优化。这里遵循 as-if-serial 原则,as-if-serial 原则就是CPU不会对有数据依赖的执行指令进行重排。这也是为了保证程序的正确性。

    这里会遇到两个问题:
    问题一、
    由于每个CPU操作的是他对应的缓存中的数据,在统一时刻各个CPU可能看到的统一地址的数据是不一致的。
    问题二、
    在多核多线程情况下,as-if-serial 会失效。
    为了解决以上问题。出现了内存屏障。
    内存屏障
    1、写内存屏障(Store Memory Burrier),在指令后面插入写内存屏障(Story Burrier),就是强制将数据先写进内存,并且CPU不会为了性能而进行指令重排序。
    2、读内存屏障(Load Memory Burrier),在指令前面插入读内存屏障(Load Burrier),就是强制所有的CPU说该内存的数据已经失效,必须从主存中进行读取。
    以上的内存屏障就是为了保证缓存和主存的数据一致性。

    相关文章

      网友评论

          本文标题:CPU的性能优化

          本文链接:https://www.haomeiwen.com/subject/dyrgzqtx.html