




免费预览已结束,剩余1页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
分析分析 CacheCache 的运行机制和设计理念的运行机制和设计理念 随着双核时代的到来 CPU 的 Cache 越来越受到 DIYer 的重视 本文吸收了其它高 手发表的文章观点 浅谈一下 Cache 的运行和设计原理 1 CPU Cache 简介简介 Cache 其是就是 CPU 和内存之间的一个中转站 由于目前 CPU 的频率 速度 已经 大大超过内存 往往 CPU 会为了读取或存储数据白白浪费几十个时钟周期 这造成了巨 大的资源浪费 于是 Cache 的设计思想被提上日程 几经实验修改后 逐渐形成了我们现 在所能够看到的 Cache 架构 在现代 CPU 设计中 设计师们要解决的最主要问题 就是找到一个在 CPU 和内存之 间平衡的均点 Cache 作为 CPU 内存的中转站 在其中发挥了巨大的作用 CPU 在请 求数据或指令时 除了常规的在内存中进行查找外 还会在 Cache 中进行查找 一旦命中 就可以直接从 Cache 中读取 节约大量时间 正因为如此 Cache 在现代 CPU 中显得越 来越重要 2 Cache 的实现原理的实现原理 众所周知 Cache 属于 SRAM Satic Random Access Memory 它利用晶体管的 逻辑开关状态来存取数据 也正因为如此 SRAM 内部的电路构造比起常见的 DRAM Dynamic Random Memory 要复杂得多 导致了成本的巨增 这也是 SRAM 不 能普及的一个重要原因 Cache 在计算机存储系统中没有编配固定的地址 这样程序员在写程序时就不用考虑 指令是运行在内存中还是 Cache 中 Cache 对于计算机上层来说是完全透明的 CPU 在读取数据时 会首先向内存和 Cache 都发送一个查找指令 如果所需要的数 据在 Cache 中 命中 则直接从 Cache 读取数据 以节约时间和资源 CPU 对 Cache 的搜索叫做 Tag search 即通过 Cache 中的 CAM Content Addressed Memory 对希 望得到的 Tag 数据进行搜索 CAM 是一种存储芯片 延迟很低 常用于网络设备中用作 路由选择 CPU 进行 Tag search 的过程是这样的 在 Cache 中数据或指令是以行为单位存储的 一行又包含了很多字 如现在主流的设计是一行包含 64Byte 每一行拥有一个 Tag 因此 假设 CPU 需要一个标为 Tag 1 的行中的数据 它会通过 CAM 对 Cache 中的行进行查找 一旦找到相同 Tag 的行 就对其中的数据进行读取 在现代计算机中 虽然 Cache 的容量一直在增涨 但现在桌面处理器中 Cache 最大 的也不过 4MB 设计师们是如何保证在这小小的 Cache 中保存的数据或指令就一定是 CPU 需要的呢 这就要利用到 CPU 运行时的两个基本局限性 时间局限性和空间局限性 所谓时间局限性 是指 CPU 在某一时刻使用到的数据或指令 在下一时刻也会被重 复利用 比如 3D 游戏中 同一场景会在不同时间被渲染多次 如果在第一次渲染中 Cache 存储了相关指令 数据 那么在下一次需要重复渲染时 就能够直接从 Cache 中读 取相关内容 而空间局限性 指的是 CPU 在读取某一地址的数据时 也有可能会用到该地址附近 的数据 也就是说 CPU 需要的数据在很多时候是连续的 例如在听歌或看电影时 数据 流总是连续的 正常播放状态下 这样的应用对于 CPU 来说是很有利的 数据预读取 单元也能够发挥最大作用 Cache 正是利用了上述两个局限性 得已实现并工作 设计师们能够充分利用这两个 局限 在容量较小的 Cache 中存入 CPU 在将来某时刻需要的内容 需要指出的是 很多 程序在执行指令或数据时 所呈现出来的局限性是不同的 有可能执行指令的时候呈现出 时间局限性 而数据呈现出空间局限性 因此设计师们把 L1 Cache 分成了 Instruction Cache 指令缓存 和 Data Cache 数据缓存 3 Cache 的运行原理的运行原理 前面已经说过 Cache 的数据存储是以行 Line 为单位的 每一行又包含 64Byte 行是存储在 框架 Block frame 这种数据容器中的 而框架则直接与内存相对应 很明 显 Cache 中可能包含数个框架 那么这些 Cache 框架是怎么与内存相对应相联系的呢 有三种办法 第一种方法叫完全相联法 即内存中的数据可以存储在任何 Cache 框架中 同一数据 也可以存储在不同的框架中 这样数据的存储相当灵活 CPU 在查找时也很方便 只需 在框架中对比找出需要的 Tag 行 即实现命中 显著的提升了命中率 然而这样做的缺陷 也很明显 对于容量较大的 Cache 来说 CPU 需要在成百的框架中查找需要的 Tag 行 延迟大大增加 因此这种设计方式只适用于容量较小的 Cache 由于完全相联法的这种局限性 设计师们很快提出了另一种旨在降低延迟的组织方式 直接映象法 和完全相联不同 在直接映象中内存会将数据存入的 Cache 框架地址 记住 以后再次存储时就只能使用该框架 这样做的好处是使 CPU 只需要进行一次 Tag search 在以后的读取操作中就可以直接找到所需 Tag 行所在的框架 从而达到降低延迟 的目的 而至于内存会将数据存入 Cache 的哪个框架中 这有个算法 块地址与整个框架数 的同余 我们举个简单的例子来看 有个 1K 的缓存 块大小为 64 字节 则总共有 16 个 缓存块 也就是有 16 个框架 那在内存中首地址为 12480 的内存块应该保存在缓存的哪 个框架中呢 12480 64 195 195mod16 3 则它应该放入第 4 个框架中 这样一来 内 存中的数据能很快的读取到缓存中的某个块中 CPU 也能很快的在这个块中找到所要的数 据 这样就省下了对比各个框架的时间 自然延迟就小了 但是 如果第 4 个框架中装入 了内存块 195 的数据 而其它同余依然是 3 的 35 51 67 等这些块就不能装入了 这样 当 CPU 需要 35 51 67 这些块的时候 就会发生冲突 collision 导致出现 Cache miss 的情况 大大的降低了命中率 直接映象法和完全相联法都只解决了 Cache 运行问题的一个方面 这以后设计师们又 设计了另一种综合前两者优点的方法 路组相联法 先将 Cache 分成不同的组 每个组 中放入不同的框架 内存数据的存储对于组来说是固定的 这就有效控制了延迟 而每个 框架中的行又按照完全相联的方法 灵活存储 这又提高了命中率 显然 一组中放入的 框架越少 那么它的命中率和延迟都能够控制得越好 组中的框架称为 路 有几个框架 就叫做几路 路组相联法很好的解决了命中率和延迟之间的矛盾 因此在现代 Cache 中得到广泛的 推广应用 4 Cache 的写入策略的写入策略 前面说了这么多 似乎都在谈 Cache 的读取 而忘了它的写入是怎么样的 这是因为 在一个常见的应用程序中 其 50 的指令是与数据存取相关的 而其中又有近 30 的指令 与读取有关 也就是说 CPU 在运行中进行的读取操作频率要远远大于写入操作 所以本 文用了大量篇幅来说明 Cache 的读取 而它的写入则相关简单 依赖于三种写入策略 写回法 当 CPU 更新 Cache 时 并不同时更新内存中的相应数据 这种方法减少了 访问内存的次数 缩短了时间 但在保持与内存内容的一致性上存在在隐患 并且使用写 回法 必须为每个缓存块设置一个修改位 来反映此块是否被 CPU 修改过 全写法 和写回法相反 当 Cache 数据更新时 也同时更新内存数据 Cache 不用设 置修改位或相应的判断器 这种方法的好处是 当 Cache 命中时 由于缓存和内存是同时 写入的 所以可以很好的保持缓存和内存内容的一致性 但缺点也很明显 由于每次写入 操作都要更新所有的存储体 如果一次有大量的数据要更新 就要占用大量的内存带宽 而内存带宽本来就不宽裕 如果写操作占用太多带宽的话 那主要的读操作就会受到比较 大的影响 写一次法 这是一种基于上面两种方法的写策略 它的特点是 除了第一次更新 Cache 的时候要同时更新内存 其它时候都和写回法一样 只修改 Cache 这就在内存一 致性和延迟中找到了一个较好的平衡 5 Cache 的替换策略的替换策略 所谓替换策略 是指 Cache 中数据的更新方法 无论如何 Cache 的容量还是比较小 的 要保证在这样的容量下其中的数据是 CPU 需要的 就需要不停地对 Cache 进行更新 摈弃不需要的旧数据 加入新内容 目前常见的 Cache 替换策略有三种 分别是 先进先出 First In First Out FIFO 即替换最早进入 Cache 的数据 这种算法在 早期的 Cache 里使用较多 那时候的 Cache 的容量还很小 数据在 Cache 的时间都不会 太久 经常是 CPU 一用完就不得不被替换下来 以保证 CPU 所需要的其它数据能在 Cache 中找到 但这样命中率也会降低 因为这种算法所依据的条件是数据在 Cache 中的 时间 而不是其在 Cache 中的使用情况 最不经常使用 Least Frequency Used LFU 即替换被 CPU 访问次数最少的行 LFU 算法是将每个行设置计数器 起始为 0 每被 CPU 访问一次 就加 1 当需要替换时 找到那个计数最小的替换出来 同时将其它行的计数置 0 这种算法利用了时间局限性原 理 但是每次替换完都把其它行置 0 使得把这种局限性的时间限定在了两次替换之间的 时间间隔内 由于替换太频繁 让这时间间隔太短了 并不能完全反映出 CPU 近期的访 问情况 近期最少使用 Least Recently Used LRU 即替换在近段时间里 被 CPU 访问 次数最少的行 它是 LFU 的拓宽版本 其原理是在每个行中设置一个计数器 哪一行被 CPU 访问 则这行置 0 其它增 1 在一段时间内 如此循环 待到要替换时 把计数值 最大的替换出去 这种算法相当于延长了替换时间 从而更能本质地反应行的使用情况 有一点要说明的是 有时候行被替换出 并不代表它一定用不到了 而是 Cache 容量不够 了 这种算法是目前最优秀的 大部分的 Cache 的替换策略都采用这种算法 6 实例分析实例分析 NetBurst 与与 K7 8 Cache 设计设计上的一些异同上的一些异同 之所以拿 Intel 放弃的 NetBurst 架构而非现在最新的 Core 架构来做比较 是因为我觉 得 NetBurst 中的 Cache 设计设计十分先进 在一定呈度上代表了未来的发展趋势 虽然这次 实验失败了 但还是可以拿出来做一些简单的分析 用 CPU Z 等软件来查看 NetBurst 架构 P4 的信息 会发现其 L1 和其它 CPU 有些不 一样 它没有了以前的 Instruction Cache 取而代之的是一个称为 Trace Cache 的东西 并且其容量也不再是 KByte 而是 Ops 这是怎么回事呢 先来看看 CPU 运行程序时的基本操作流程 首先 CPU 会根据 IPR Instruction Pointer Rigster 提供的地址取得指令 然后对指令进行解码 得出操作地址数和操作码 再由操作地址数获得操作数 并由 ALU 结合操作码计算出操作数 最后保存在寄存器中 这其中最为复杂的就是解码操作 现代 CPU 为了提高指令执行效率 借签了 RISC 的设计 理念 将不同的 X86 指令解码为长短统一 内容简单的微指令并以超标量的方式执行 在以前的 CPU 设计中 一般是等到 CPU 需要执行某指令时 才对其进行解码 在引 入了分支预测后 就可以预先读取 CPU 可能用到的指令 并解码 以备 CPU 需要时直接 调用 这就是 Trace Cache 的作用 它可以将分支预测得到的 X86 指令事先解码为微指令 并存储在一个被称为回溯片断 trace segment 的逻辑组中 并且这些解码后的指令非常 灵活 它能够在进入 trace segment 前决定是否直接进入流水线来执行 当 trace segment 中的微操作指令执行后 trace cache 就会马上变成 执行模式 execute mode 这种模 式下 微指令就会依据预测时的顺序来被 CPU 提取 并执行 这样一来 Trace cache 存 储的指令就是 CPU 可以直接执行的微操作 并且由于是存放在 L1 中 使得 CPU 每次需 要时都可以马上取得译码好的微指令 再加上超低的延迟可以让 CPU 执行频率迅速增大 使 CPU 的主频达到前所未有的高度 还有一个重要的好处就是可以让 CPU 本身的 X86 解 码单元减少 简化 CPU 结构 总的来说 Trace Cache 引入的最终目的就是为了减少 X86 指令解码器 缓解长流水线出现预测失误所带来的性能损失 并代替原始的 L1 指令 缓存 由于 Intel 一直没有公布 Trace Cache 的具体大小 只是透露其可以装入 12 条微指令 因此其单位是 12 Ops 然而 这种大胆的 Cache 设计设计最大的弊端在于 一旦分支预测出现错误 后果将是极 其严重的 因此 Intel 希望借助于较大的 L2 来缓减预测出错引起的性能损失 这就要求 L2 拥有极高的命中率 因此 Intel 在 NetBurst 架构中采用了 8 路组相联 其命中率可以达到 完全相联的水平 容量为 2MB 的 L2 并提供 256b 带宽 以确保其低延迟 但从实际 效果来看 显然由于流水线级别的增加给分支预测带来了不可估计的难度 即使有 2MB L2 坐镇 也难保 P4 的 高频低能 对于 K7 K8 来说 其 Cache 设计设计同 Intel 也有相
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 农业种植2025年智能化风险评估与精细化管理效果提升策略报告
- 安全方法培训总结课件
- 法院大楼改造工程方案(3篇)
- 理想家园课件
- 理发店员工安全知识培训课件
- 安全文明服务培训方案课件
- 电力工程评审方案(3篇)
- 农业灌溉智能化升级2025年农业现代化路径研究报告
- 废水改造工程资金方案(3篇)
- 安全教育知识培训反思课件
- 《网店色彩设计》课件
- 《铁路技术管理规程》(普速铁路部分)
- 《中国汽车产业格局》课件
- 老年女性子宫颈癌筛查中国专家共识(2024版)解读
- CNAS-GL025:2023 校准和测量能力(CMC)表述指南
- 船用齿轮箱基础知识培训讲义
- 古建筑屋面瓦拆除与修复方案
- DB22T 2091-2014 国境空港口岸检验检疫设施建设规范
- 2024数据要素典型案例集
- 医院科室副主任竞聘
- 无人机项目建设规划投资计划书
评论
0/150
提交评论