编程篇3:内存屏障和CPU缓存
Posted 互联网金融训练营
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了编程篇3:内存屏障和CPU缓存相关的知识,希望对你有一定的参考价值。
过硬的技术+透彻的金融业务+心理学=互联网金融专家
什么是CPU缓存
CPU缓存是CPU的一个重要的组成部分,缓存就是数据交换的缓冲区(称作Cache)。缓存的作用是帮助硬件更快的相应的。
所以CPU的缓存就是CPU与内存之间的临时数据交换器。
英特尔官网对CPU缓存的定义为:CPU告诉缓存是处理器上的一个快速记忆区域。
为什么要有CPU缓存,什么是三级缓存
CPU在摩尔定律的指导下以每18个月翻一番的速度在发展,然而内存和硬盘的发展远远不及CPU。这就造成了高性能的内存和硬盘价格及其昂贵,然而CPU的高度运算需要高速的数据。为了解决这个问题,CPU厂商在CPU中内置了少量的高速缓存以解决I/O速度和CPU运算速度之间的不匹配问题。
它的出现是为了解决CPU运行处理速度与内存读写速度不匹配的矛盾——缓存的速度比内存的速度快多了。CPU缓存一般直接跟CPU芯片集成或位于主板总线互联的独立芯片上。(现阶段的CPU缓存一般直接集成在CPU上)CPU往往需要重复处理相同的数据、重复执行相同的指令,如果这部分数据、指令CPU能在CPU缓存中找到,CPU就不需要从内存或硬盘中再读取数据、指令、从而减少了整机的相应时间;同时当CPU调用大量数据时,就可避开内存直接从缓存中调用,从而加快读取速度。
由于CPU的运算速度超越了1级缓存的数据IO能力,CPU厂商又引入了多级的缓存结构。如下图三级缓存图:
CPU缓存分三级,也就是三级缓存。分别是:L1Cache,L2Cache,L3Cache。
CPU在读取数据时,先在L1中寻找,再从L2寻找,再从L3寻找,然后是内存,再然后是外存储器。
MESI协议,一致性协议
多核CPU的情况下有多个一级缓存,如何保证缓存内部数据的一致,不让系统数据混乱,这里就引入了一个一致性协议MESI。知道这个就好,MESI协议的目的是为了保证在单核CPU对缓存中数据做了改动,需要通知给其他CPU,也就是说:CPU处理要控制自己的读写操作,还要监听其他CPU发出的通知,从而保证最终一致。
CPU缓存性能优化的手段:运行时指令重排
在执行一段代码中,当CPU写缓存时发现缓存区块正在被其他CPU占用,为了提高CPU处理性能,可能会将后面的读缓存命令优先执行。但是指令重排遵守as-if-serial语义:意思是说无论怎么重排序,(单线程)程序的执行结果不能被改变。编译器和处理器不会对存在数据依赖关系的操作做重排序。
指令重排引起的问题
CPU在解决一个问题的时候,同时也会引入新的问题,技术一向如此。
2:多核多线程情况下,怎么保证指令执行后运行结果是正确的。
解决办法
上面的思想可以借鉴在Java的开发中。
1:
2:
以上是关于编程篇3:内存屏障和CPU缓存的主要内容,如果未能解决你的问题,请参考以下文章