缓存行和cpu缓存实例

并发框架Disruptor译文html

  1. 剖析Disruptor:为何会这么快?(一)锁的缺点
  2. 剖析Disruptor:为何会这么快?(二)神奇的缓存行填充
  3. 剖析Disruptor:为何会这么快?(三)伪共享
  4. 剖析Disruptor:为何会这么快?(四)揭秘内存屏障

七个例子帮你更好地理解 CPU 缓存缓存

缓存行

为了简化与RAM之间的通讯,高速缓存控制器是针对数据块,而不是字节进行操做的。
从程序设计的角度讲,高速缓存其实就是一组称之为缓存行(cache line)的固定大小的数据块,其大小是以突发读或者突发写周期的大小为基础的。
每一个高速缓存行彻底是在一个突发读操做周期中进行填充或者下载的。
即便处理器只存取一个字节的存储器,高速缓存控制器也启动整个存取器访问周期并请求整个数据块。
缓存行第一个字节的地址老是突发周期尺寸的倍数。缓存行的起始位置老是与突发周期的开头保持一致。
现代处理器有专门的功能单元来执行加载和存储操做。
加载单元每一个时钟周期只有启动一条加载操做;与加载操做同样,在大多数状况下,存储操做可以在完整流水线化的模式中工做,每一个周期开始一条新的存储。

共享内存的并行计算,有可能会出现"伪共享"问题.并发

好比,两个处理器各要访问一个word,这两个word却存在于同一个cache line大小的区域里,这时,从应用逻辑层面说,这两个处理器并无共享内存,由于他们访问的是不一样的内容(不一样的word)。可是由于cache line的存在和限制,这两个CPU要访问这两个不一样的word时,却必定要访问同一个cache line块,产生了事实上的“共享”。显然,因为cache line大小限制带来的这种“伪共享”是咱们不想要的,会浪费系统资源。
相关文章
相关标签/搜索