囹狐冲吧 关注:4贴子:543
  • 14回复贴,共1

‖浅谈 Cache Memory‖

只看楼主收藏回复

除了才华,只有梦想。才华与梦想恰能改变整个世界。
_sailing_新浪博客


来自手机贴吧1楼2016-05-21 03:49回复
    Cache Controller的基本组成部件


    来自手机贴吧2楼2016-05-23 21:45
    回复
      2025-06-29 07:21:20
      广告
      在 Opteron 微架构 中, L1 和 L2 Cache Controller 将与 LSU 共同 完成一次存储器读写操 作。在 L1 和 L2 Controller 中含有各类 Buffer ,和连接这些 Buffer 的通路。一次存 储器访问指令,在通过 指令流水后,将首先到 达 LSU ,并由 LSU 将其 请求转发至 L1 和 L2 Cache Controller ,并由 这些 Cache Controller 完 成剩余的工作。
      Cache Controller 需要在保证 Memory Consistency 的 前提下,将数据重新传 递给 LSU ,完成一次存 储器读写的全过程。在 一个微架构中, Cache Controller 是一个较为复 杂的功能,由其管理的 Cache 流水线是整个微 架构的精华。


      来自手机贴吧3楼2016-05-23 21:46
      回复
        在一个处理 器系统中,存储器子系 统是一个被动部件,由 来自处理器的存储器读 写指令和外部设备发起 的 DMA 操作触发。虽然 在存储器子系统中并无 易事, DMA 操作依然相 对较易处理。在多数设 计中,一个设备的 DMA 操作最先看到的是 LLC ,之后在于其他 Cache 进行一致性操作。通常 处理器系统的 LLC 控制 器将首先处理这些 DMA 操作。
        在一个 ccNUMA 处 理器系统中, Cache Controller 由 FLC/MLCs /LLC Cache Controller , DMA Controller 和 Directory Controller ,共 同组成。


        来自手机贴吧4楼2016-05-23 21:47
        回复
          其中 FLC Cache Controller 与 LSU 和指令 流水线直接相连,管理 第 1 级分离的指令与数 据 Cache ; MLCs Cache Controller 可能由多级 MLC Controller 组成,上 接 FLC 下接 LLC Controller ,管理中间层 次的 Cache 。在多数 CMP 处理器中, FLC 与 MLCs Controller 在一个 CPU Core 之内,属于私 有 Cache ,并且与 CMP 处理器中的其他处理器 的 FLC/MLCs 保持一致。
          一个实际的 CPU Core 与其下的存储器子 系统间的连接异常复 杂。不同的处理器架构 其存储器子系统的实现 也有较大的差别。但是 对于一个存储器子系统 而言,其所担负的主要 任务依然明晰。
          存储器子系 统的首要任务是将所访 问的数据经由各级 Cache ,最后传递到距 离 CPU Core 最近的一级 缓冲,即进行数据传 送;另外一个任务是使 用合适的机制管理与这 些数据相关的状态信 息,包括 Cache 的 Tag , MSHR 和其他复杂状 态信息;最后可能也是 需要额外关注的是,存 储器子系统需要考虑本 系统所使用的 Consistency Model 和 Coherence Protocol 。


          来自手机贴吧5楼2016-05-23 21:48
          回复
            在一个存储 器子系统中,依然存在 若干级子系统。其中每 一个子系统大体由数据 单元包括 Data Array 和 相关 Buffer , Cache 控 制器和连接通路这三大 部分组成。这个子系统 与其上和其下的子系统 通过各类 Buffer 进行连 接,协调有序地完成存 储器子系统的三大任 务。
            在一个实际 的处理器系统中,进一 步考虑到多级 Cache Controller 和外部设备, 这几大类数据请求与消 息会进一步分为更多的 子类,以维护 Cache 协 议与状态机的正常运 行。不同的处理器系统 使用了不同的 Cache 协 议与状态机,使用了不 同的组成结构,进一步 加大了 Cache Controller 的设计难度。


            来自手机贴吧6楼2016-05-23 21:48
            回复
              在 L1 Cache 与 L2 Cache 之 间, Athlon 微架构设置 了专用的 Buffer ,暂存 从 L1 Cache 中淘汰的 Cache Block ,这个 Buffer 也被称之为 Victim Buffer 。
              从一个工程 师的角度上看, NI/NE Cache 带来的最大优点 莫过于简化了 Cache Hierarchy 的设计。与使 用 Inclusive 和 Exclusive Cache 结构相比,采用 这种方式使得 Inner Cache 和 Outer Cache 间 的耦合度得到了较大的 降低,也因此降低了 Cache Hierarchy 的设计 难度。
              耦合度的降 低有助于 Inner 和 Outer Cache Controller 设计团 队在一定程度上的各自 为政。这种各自为政的 结果不仅仅提高了 Cache Controller 的效 率,更重要的是提高了 设计人员的工作效率。 但是这种各自为政只是 在一定程度上的, Inner 是 Outer Cache 的 Inner 这个事实决定了 Inner Cache 和 Outer Cache 无 论采用何种方式进行互 联,依然存在大的耦合 度。


              来自手机贴吧7楼2016-05-25 22:37
              回复
                Intra-CMP Coherence 的复杂程度超 过了初学者的想象。其 中各级 Cache 之间的关 系,及为了处理这些关 系而使用的 Cache Block 状态和总线协议均较为 复杂。仅是其中使用的 Cache Coherency Protocol 也复杂到了需 要使用专门的语言才能 将其简约地进行描述。 这个语言即 SLICC(Specification Language for Implementing Cache Coherence) ,这个语言 是有志于深入了解 Cache Coherency Protocol 所需要了解的基础知 识。


                来自手机贴吧8楼2016-05-25 22:38
                回复
                  2025-06-29 07:15:20
                  广告
                  从总线带宽的角度 上看, Load 比 Store 重 要一些,在进行 Cache 优化时,更多的人关心 读的效率。
                  在一个程序 的执行过程中不可能不 使用 Write 操作。如何 在保证 Memory Consistency 的前提下, 有效降低 Write 操作对 Performance 的影响, 如何减少 Write Traffic ,是设计的重中之重。 在一个处理器系统中, Write 操作需要分两种情 况分别讨论,一个是 Write Hit ,另一个是 Write Miss 。


                  来自手机贴吧9楼2016-05-25 22:38
                  回复
                    Write Through 方法指进行写操作时, 数据同时进入当前 Cache ,和其下的一级 Cache 或者是主存储 器; Write Back 方法指 进行写操作时,数据将 直接写入当前 Cache , 而不会继续传递,当发 生 Cache Block Replace 时,被改写的数据才会 更新到其下的 Cache 或 者主存储器中。
                    很多人认为 Write-Back 在降低 Write Traffic 上优于 Write- Though 策略,只是 Write-Back 的实现难于 Write-Though ,所以有 些低端处理器使用了 Write-Though 策略,多 数高端处理器采用 Write-Back 策略。
                    这种说法可 能并不完全正确,也必 将引发无尽的讨论。


                    来自手机贴吧11楼2016-05-25 22:39
                    回复
                      采用 Write-Though 策略最大的缺点是给其 他 Cache 层次带来的 Write Traffic ,而这恰 恰是在一个 Cache Hierarchy 设计过程中, 要努力避免的。为了降 低这些 Write Traffic , 几乎所有采用 Write- Though 策略的高端处理 器都使用了 WCC(Write Coalescing Cache) 或者其 他类型的 Store-Though Queue ,本节仅关注 WCC 。
                      所有 CPU Core , LLC Slice , QPI Agent , iMC , PCIe Agent , GT(Graphics uniT) 通过 Ring Bus 连接在一起 [1] [99] 。 Ring Bus 是 Sandy Bridge EP 处理器 的设计核心,也意味着 GT 可以方便的与 CPU Core 进行 Cache Coherence 操作。


                      来自手机贴吧12楼2016-05-25 22:40
                      回复
                        处理器与存 储器子系统运行速度的 失配,使得存储器层次 结构多次引起关注,处 理器系统使用了更大规 模的 Cache 。在很多处 理器系统中, LLC 的大 小已达十几兆字节。随 着工艺的提高,使用更 大规模的 Cache 容量, 并非遥不可及。只是 Cache 容量依然远不能 与主存储器容量增加的 速度相比。
                        Prefetch 指在处理 器进行运算时,提前通 知存储器子系统将运算 所需要的数据准备好, 当处理器需要这些数据 时,可以直接从这些预 读缓冲中,通常指 Cache ,获得这些数 据,不必再次读取存储 器,从而实现了存储器 访问与运算并行,隐藏 了存储器的访问延时。 Prefetch 的实现可以采 用两种方式, HB(Hardware-Based) 和 SD(Software-Directed)


                        来自手机贴吧13楼2016-05-25 22:40
                        回复
                          除了预读 时机之外,需要进一步 考虑,预读的数据放置 到 Cache Hierarchy 的哪 一级, L1 , L2 还是 LLC ,所预读的数据是私有 数据还是共享数据。需 要进一步考虑预读数据 的 Granularity ,是 By Word, Byte , Cache Block ,还是多个 Cache Block ;需要进一步考虑 是否采用 HB 和 SD 的混 合方式。这一切增加了 Prefetch 的实现难度。


                          来自手机贴吧14楼2016-05-25 22:41
                          回复
                            软件预读指 令可以由编译器自动加 入,但是在很多场景, 更加有效的方式是由程 序员主动加入预读指 令。这些预读指令在进 行大规模向量运算时, 可以发挥巨大的作用。 在这一场景中,通常含 有大规模的有规律的 Loop Iteration 。这类程 序通常需要访问处理较 大规模的数据,从而在 一定程度上破坏了程序 的 Temporal Locality 和 Spatial Locality ,这使得 数据预读成为提高系统 效率的有效手段。


                            来自手机贴吧15楼2016-05-25 22:41
                            回复
                              2025-06-29 07:09:20
                              广告
                              无论是软件 还是硬件 Prefetch 的实 现方式,都不可避免地 出现 Prefetch 得来的数 据并没有被及时使用, 从而会在一定程度上一 定程度上的重复,这种 重复会进一步提高系统 功耗,对于有些功耗敏 感的应用,需要慎重使 用 Prefetch 机制。 Prefetch 机制除了对系 统有较大影响之外,还 会引发一定程度的 Cache Pollution 。这使得 Stream buffer [20] 机制 因此引入。


                              来自手机贴吧16楼2016-05-25 23:02
                              回复