访存优化实践 二 : 内存一致性模型与缓存一致性

一、内存一致性

    通常在不考虑异构平台的前提下,所谓内存一致性,是指从CPU Core角度看,无论何时“读内存地址”都能获取最近的值。
    在计算机技术发展的早期,沿用的是单核CPU单进程工作模式,在这种模式下即使引入了Cache,从硬件和软件层面,都没有一致性的问题。随着时间推移,多(核)CPU、指令执行顺序优化重排、多进程/线程并发等等技术也成为充分利用硬件资源的必要手段。如何在复杂的场景下保证内存一致性成为一个必须面临的难题。
相关概念:
  • Cache
    • 为了弥补CPU与DRAM之间的速度差异,在CPU和主存之间增加高速缓存即Cache,以缩短从外部存储器读取指令和数据的时间。
    • Cache能够有效提升访问速度的原因是基于程序的局部性特点。 所谓局部性,即在一定的时间片段内,程序访问的地址通常集中在提个相对集中的地址空间范围内。根据地址集中的原因,局部性可分为时间局部性和空间局部性。时间局部性是指被访问的某个存储单元在一个较短的时间间隔很可能又被访问。空间的局部性是指访问的某个存储单元的临近单元在一个较短的时间间隔内很可能也被访问。
    • 通常Cache被集成在CPU内部,由高速的SRAM组成,其访问速度几乎与CPU量级接近。基于局部性原理,短期内热度较高的指令和数据被缓存在Cache中,避免了CPU频繁的直接访问主存,从而提升速速。
  • 多(核)CPU
    • 多CPU:即在主板上有多个socket,可以安装多个物理CPU,而CPU之间通过系统总线连接。
    • 多核CPU: 在一个物理 CPU 内部,封装了多个物理核, 物理核之间通过片内总线相连,相比主版上的系统总线,片内总线速度非常快。 一个 Die 上物理核的个数,受 Die 的大小影响。通常 Die 越大,能容纳的物理核就越多。但是越大的 Die ,良品率和制作成本就越高。 每一个物理核都可以被当做一个逻辑CPU来管理使用。在linux系统上'lscpu'命令可以看到的在线cpu数就是按照"逻辑CPU"统计的。
    • 超线性程: Hyper-Threading Technology 简称 HT 或者 HTT, 在运行的时候, 同时 支持两 条不同的 CPU 指令流送入物理核心,理想评估下,等效于 在物理核内部 有了两个 逻辑核心 或者 逻辑CPU。但是,由于 逻辑核心是共享 Execution Engine,所以即使同时有两条指令进入,也是需要排队执行。只有 Execution Engine 在执行指令流 时需要等待其所需数据到达,在这个等待的时间内切换到其他指令流 执行,才能避免 Execution Engine 处于空闲状态,也就是在此种情况下能发挥超线程的优势。
      1. 线程技术的并行性并不彻底,并行性并不能真正的翻倍
      2. 在不支持超线程的单核 CPU 上运行多线程,是操作系统进行时间片调度造成的假象,任何同一时刻,其实都只有一 条指令流在物理核上执行。
      3. 在支持超线程的单核 CPU 上运行多线程

你可能感兴趣的:(计算机技术学习与实践,缓存,开发语言,内存一致性)