编程篇3:内存屏障和CPU缓存

Posted 互联网金融训练营

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了编程篇3:内存屏障和CPU缓存相关的知识,希望对你有一定的参考价值。

编程篇3:内存屏障和CPU缓存

过硬的技术+透彻的金融业务+心理学=互联网金融专家


0 1

什么是CPU缓存


CPU缓存是CPU的一个重要的组成部分,缓存就是数据交换的缓冲区(称作Cache)。缓存的作用是帮助硬件更快的相应的。


所以CPU的缓存就是CPU与内存之间的临时数据交换器。


英特尔官网对CPU缓存的定义为:CPU告诉缓存是处理器上的一个快速记忆区域。


0 2

为什么要有CPU缓存,什么是三级缓存


CPU在摩尔定律的指导下以每18个月翻一番的速度在发展,然而内存和硬盘的发展远远不及CPU。这就造成了高性能的内存和硬盘价格及其昂贵,然而CPU的高度运算需要高速的数据。为了解决这个问题,CPU厂商在CPU中内置了少量的高速缓存以解决I/O速度和CPU运算速度之间的不匹配问题。


它的出现是为了解决CPU运行处理速度与内存读写速度不匹配的矛盾——缓存的速度比内存的速度快多了。CPU缓存一般直接跟CPU芯片集成或位于主板总线互联的独立芯片上。(现阶段的CPU缓存一般直接集成在CPU上)CPU往往需要重复处理相同的数据、重复执行相同的指令,如果这部分数据、指令CPU能在CPU缓存中找到,CPU就不需要从内存或硬盘中再读取数据、指令、从而减少了整机的相应时间;同时当CPU调用大量数据时,就可避开内存直接从缓存中调用,从而加快读取速度。


由于CPU的运算速度超越了1级缓存的数据IO能力,CPU厂商又引入了多级的缓存结构。如下图三级缓存图:


编程篇3:内存屏障和CPU缓存

编程篇3:内存屏障和CPU缓存

CPU缓存分三级,也就是三级缓存。分别是:L1Cache,L2Cache,L3Cache。

CPU在读取数据时,先在L1中寻找,再从L2寻找,再从L3寻找,然后是内存,再然后是外存储器。


0 3

MESI协议,一致性协议


多核CPU的情况下有多个一级缓存,如何保证缓存内部数据的一致,不让系统数据混乱,这里就引入了一个一致性协议MESI。知道这个就好,MESI协议的目的是为了保证在单核CPU对缓存中数据做了改动,需要通知给其他CPU,也就是说:CPU处理要控制自己的读写操作,还要监听其他CPU发出的通知,从而保证最终一致。


0 4

CPU缓存性能优化的手段:运行时指令重排


在执行一段代码中,当CPU写缓存时发现缓存区块正在被其他CPU占用,为了提高CPU处理性能,可能会将后面的读缓存命令优先执行。但是指令重排遵守as-if-serial语义:意思是说无论怎么重排序,(单线程)程序的执行结果不能被改变。编译器和处理器不会对存在数据依赖关系的操作做重排序。


0 5

指令重排引起的问题


CPU在解决一个问题的时候,同时也会引入新的问题,技术一向如此。



2:多核多线程情况下,怎么保证指令执行后运行结果是正确的。


0 6

解决办法

编程篇3:内存屏障和CPU缓存

上面的思想可以借鉴在Java的开发中。


编程篇3:内存屏障和CPU缓存


1:

2:




以上是关于编程篇3:内存屏障和CPU缓存的主要内容,如果未能解决你的问题,请参考以下文章

内存屏障

CPU缓存与内存屏障解析

CPU缓存和内存屏障

CPU缓存和内存屏障

CPU缓存和内存屏障

CPU运行时优化(高速缓存指令重排内存屏障等)