从 01 开始 从 01 开始
首页
  • 计算机简史
  • 数字电路
  • 计算机组成原理
  • 操作系统
  • Linux
  • Docker
  • 计算机网络
  • 计算机常识
  • Git
  • 数据库
  • JavaSE
  • Java 高级
  • JavaEE

    • 构建、依赖管理
    • Ant
    • Maven
    • 日志框架
    • Junit
    • JDBC
    • XML-JSON
  • JavaWeb

    • 服务器软件
    • 环境管理和配置管理-科普篇
    • Servlet
  • Spring

    • Spring基础
  • 主流框架

    • Redis
    • Mybatis
    • Lucene
    • Elasticsearch
    • RabbitMQ
    • MyCat
    • Lombok
  • SpringMVC

    • SpringMVC 基础
  • SpringBoot

    • SpringBoot 基础
  • Node
  • Windows 使用技巧
  • 最全面的输入法教程
  • 浏览器
  • 终端软件
  • 装机
  • 笔记类软件
  • Markdown
  • 各大平台
  • 远程控制
  • RSS
  • 图片类工具
  • Office
  • 手机
  • 校招
  • 五险一金等
  • 职场规划
  • 关于离职
  • 杂谈
  • 教程简介
  • 英语学习方法论
  • 字母
  • 音标
  • 单词
  • 语法
  • 英语兔的相关视频
  • Larry 想做技术大佬的相关视频
  • 驾驶技能
  • 住房相关
  • 厨艺
  • 关于税
  • 理财
  • 睡眠
  • 皮肤
  • 口腔健康
  • 学会呼吸
  • 健身日志
  • 电影

    • 电影推荐
  • 漫画

    • 漫画软件
    • 漫画推荐
  • 游戏

    • Steam
    • 三国杀
    • 求生之路
  • 反腐
  • GFW
  • 404 内容
  • 审查与自我审查
  • 互联网
  • 2022
  • 2023
  • 2024
  • 2025
  • 关于本站
  • 关于博主
  • 网站动态
  • 公告栏
  • 友人帐
  • 从零开始搭建一个博客
  • 搭建邮件服务器
  • 本站分享
  • 文章分类
  • 文章归档

晓林

程序猿,自由职业者,博主,英语爱好者,健身达人
首页
  • 计算机简史
  • 数字电路
  • 计算机组成原理
  • 操作系统
  • Linux
  • Docker
  • 计算机网络
  • 计算机常识
  • Git
  • 数据库
  • JavaSE
  • Java 高级
  • JavaEE

    • 构建、依赖管理
    • Ant
    • Maven
    • 日志框架
    • Junit
    • JDBC
    • XML-JSON
  • JavaWeb

    • 服务器软件
    • 环境管理和配置管理-科普篇
    • Servlet
  • Spring

    • Spring基础
  • 主流框架

    • Redis
    • Mybatis
    • Lucene
    • Elasticsearch
    • RabbitMQ
    • MyCat
    • Lombok
  • SpringMVC

    • SpringMVC 基础
  • SpringBoot

    • SpringBoot 基础
  • Node
  • Windows 使用技巧
  • 最全面的输入法教程
  • 浏览器
  • 终端软件
  • 装机
  • 笔记类软件
  • Markdown
  • 各大平台
  • 远程控制
  • RSS
  • 图片类工具
  • Office
  • 手机
  • 校招
  • 五险一金等
  • 职场规划
  • 关于离职
  • 杂谈
  • 教程简介
  • 英语学习方法论
  • 字母
  • 音标
  • 单词
  • 语法
  • 英语兔的相关视频
  • Larry 想做技术大佬的相关视频
  • 驾驶技能
  • 住房相关
  • 厨艺
  • 关于税
  • 理财
  • 睡眠
  • 皮肤
  • 口腔健康
  • 学会呼吸
  • 健身日志
  • 电影

    • 电影推荐
  • 漫画

    • 漫画软件
    • 漫画推荐
  • 游戏

    • Steam
    • 三国杀
    • 求生之路
  • 反腐
  • GFW
  • 404 内容
  • 审查与自我审查
  • 互联网
  • 2022
  • 2023
  • 2024
  • 2025
  • 关于本站
  • 关于博主
  • 网站动态
  • 公告栏
  • 友人帐
  • 从零开始搭建一个博客
  • 搭建邮件服务器
  • 本站分享
  • 文章分类
  • 文章归档
  • 计算机历史

  • 数字电路

  • 计算机组成原理

    • 网课-计算机组成原理(北大-陆俊林)

      • 概述-计算机组成原理(北大-陆俊林)
      • 第1周-计算机组成章节视频简介
      • 101-电子计算机的兴起
      • 102-冯·诺依曼结构的要点
      • 103-冯·诺依曼结构的小故事
      • 104-计算机结构的简化模型
      • 105-计算机执行指令的过程
      • 106-计算机输入和输出
      • 107-冯诺依曼结构和具体实现
      • 201-设计自己的计算机
      • 202-x86 体系结构
      • 203-x86 指令简介
      • 204-复杂的 x86 指令举例
      • 205-MIPS 体系结构
      • 206-MIPS 指令简介
      • 301-算术运算和逻辑运算
      • 302-门电路的基本原理
      • 303-寄存器的基本原理
      • 304-逻辑运算的实现
      • 305-加法和减法的实现
      • 306-加法器的优化
      • 401-乘法的运算过程
      • 402-乘法器的实现
      • 403-乘法器的优化 1
      • 404-乘法器的优化 2
      • 405-除法的运算过程
      • 406-除法器的实现
      • 407-除法器的优化
      • 501-处理器的设计步骤
      • 502-数据通路的建立
      • 503-运算指令的控制信号
      • 504-访存指令的控制信号
      • 505-分支指令的控制信号
      • 506-控制信号的集成
      • 601-流水线的基本原理
      • 602-流水线的优化
      • 603-超标量流水线
      • 604-流水线的冒险
      • 605-数据冒险的处理
      • 606-控制冒险的处理
      • 701-存储层次结构概况
      • 702-DRAM 和 SRAM
      • 703-主存的工作原理
      • 704-主存技术的发展
      • 705-高速缓存的工作原理
      • 706-高速缓存的组织结构
      • 707-存储容量的计算
      • 801-中断和异常的来源
      • 802-中断向量表的结构
      • 803-中断向量表的发展
      • 804-中断的处理过程
      • 805-内部中断分类说明
      • 806-基于中断的功能调用
      • 901-输入输出接口的基本功能
      • 902-输入输出接口的编址方式
      • 903-输入输出的控制方式
      • 904-中断控制方式
      • 905-外部中断的处理过程
      • 906-直接存储器访问方式
  • 操作系统

  • Linux

  • 计算机网络

  • Git

  • 计算机小知识

  • 数据库

  • 计算机基础
  • 计算机组成原理
  • 网课-计算机组成原理(北大-陆俊林)
2023-06-13

704-主存技术的发展

# 704-主存技术的发展

近些年来 SDRAM 的标准不断地升级换代, 其性能也得到很大的提升。那为什么 还总是说 CPU 和内存之间的速度差距越来越大了呢? 这一节我们就来探讨这个问题。

‍‍

近 20 年来,流行的内存都采用了 SDRAM 的结构,需要注意的是虽然平时我们会说以前用 SDRAM 内存,现在用 DDR 内存, 但这种说法是不规范的。所谓 DDR 内存也是 SDRAM 的一种,只不过接口采用了双倍数据率而已。 那么有了 DDR SDRAM 之后,如果要特指之前的 SDRAM,可以说是 SDR SDRAM。 SDR 就是单数据率的简称,而 DDR 之后, 又有了 DDR2,3,4 等后续标准。 为了区分明确,也把第一代的 DDR 称为 DDR1。

​

‍

这些内存规格后面带的数字, 比如这里的 1600,指的是内存接口的等效时钟频率, 借此我们可以计算出内存的传输带宽。 如果按照内存位宽为 64 比特,由此计算出的内存传输带宽,早期的 pc66 是 0.53GB/s, 而到了 DDR3-1600 则达到了 12.8GB/s,十几年里增长了二十倍之多。

​

‍

然而,很多经典教材和资料中都会提到,近几十年来, 计算机处理器与存储器的性能差距日益加大, 存储器性能的增长不到十倍。那这又是怎么回事呢? 这个说法是否有问题呢?

​

‍

那么 之前我们已经学习过,SDRAM 的基本单元是一个电容和一个晶体管。对于 SDRAM 的读写,对于 SDRAM 的读写最终体现在了对电容的充放电, 而要减少这个电容的充放电时间,那是非常困难的。 因此,在 SDR SDRAM 的时代,当时钟频率 提升到了 133MHz 之后就很难进一步提升了

​

‍

‍

‍

那后来的 DDR SDRAM 又是如何提升性能的呢? 那我们就来看一看内存模组的内部结构。对于一个位宽 8 比特的 SDR SDRAM 芯片,每次访问其内部的存储阵列都会取出 8 比特的数据。 而同样位宽的 DDR SDRAM 芯片,每次访问存储阵列则会取出两倍的数据量。 那这 16 比特的数据是怎么传输的呢?这就要用到双倍数据率的概念。

​

‍

所谓的双倍数据率也就是 DDR, 相对应的是 SDR,SDR 是指毎个时钟的上升沿传输数据,接收端也用时钟的上升沿采样数据,而 DDR 则是在时钟的上升沿和下降沿都传输数据, 这样就可以在同样的时钟频率下传输双倍的数据。 需要说明的是,DDR 指的是这种传输方式, 运用在 SDRAM 内存上,就有了 DDR SDRAM, 但它不仅仅用在内存上,还用在其他很多领域。所以 DDR 只是一种传输数据的方式,不能将它等价于我们现在用的内存。

​

‍

‍

那我们再来看一看 DDR SDRAM 是如何工作的。 先来看看 PC100 规格的 SDR SDRAM。 它的存储阵列的核心时钟频率是 100MHz, 对外接口的时钟频率也是 100MHz。 以读操作为例,每个时钟周期从存储阵列中读一个数据并送到芯片的接口信号上, 从外部看来每个时钟上升沿传输一个数据, 单根数据线上的数据传输率为 100MBPS。 而第一代 DDR 标准及 DDR-200, 它的存储阵列的核心时钟频率也是 100MHz, 但是每个时钟周期读出两个数据,接口的时钟频率 还是 100MHz,但因为在两个时钟沿都传输数据, 所以仍然在一个时钟周期内把这两个数据都传输出去了。 从外部看来每个时钟上升沿和下降沿各传输一个数据, 单根数据线上的数据传输率为 200MBPS,这也就是 DDR-200 的名称由来。

​

到这里我们应该发现了一个问题, 通常理解的提升内存性能应该是减少读写数据的时间, 就像我们去图书馆借书,原来办手续需要十分钟, 现在图书馆说要提升一倍的服务效率,我以为会只要五分钟了, 但是 DDR SDRAM 的思路却不一样。 它说,你看这样好不好?办手续呐我们还是保持十分钟, 但你不是要借一本数学书吗?我现在多给你一本语文书, 也就算我们的服务效率提升一倍了。这算不算欺骗消费者呢? 咱们稍后再说。

‍

‍

‍

即使是保持办手续还是十分钟这件事情上,它也没有做到。 这张表列出了 SDR 到 DDR1 的各代内存的典型规格。 我们看到 SDR 的核心频率从 66M 到 100M 再到 133M,性能肯定是越来越好了。 但是到了 DDR1 的第一代,也就是 DDR-200, 它的核心频率反而下降了,从 133MHz 降到了 100MHz。

​

‍

其实这也容易理解,要从存储阵列中每次取出双倍的数据, 虽然改动并不大,但对性能还是有影响的,因此速度也就慢了下来。 那 DDR-200 相对于 PC133 到底提升了什么呢? 我们先以对 PC133 的读操作为例, 大概需要 15 个纳秒进行行选,再用 15 个纳秒进行列选, 然后才能得到第一个数据。而与这个数据相邻的后续数据则可以在每个时钟周期送出一个, 而从发出地址到传输完这四个数据总共需要 60ns。

我们再来看 DDR-200, 因为要从存储阵列中取出双倍的数据,所以对存储阵列的访问变慢了, 大概需要 20ns 的行选,再加 20ns 的列选,这样才能得到第一个数据。 不过在与这个数据相邻的后续数据则可以在每个时钟周期送出两个, 因此,送出这四个数据,大约需要 20ns。DDR-200 宣称的 1.6GB/s 的传输带宽就是根据最后这一段 20ns 送出了四个数据计算出来的。

这个指标本身没有错,但是评价内存的性能要看两个指标。 这个指标称为访存带宽,是内存厂商大力宣传的。 另一个重要的指标就是读出第一个数据的时间称为访存延迟, 因为 CPU 真正需要的很可能只是第一个数据,所以访存延迟非常关键。 这里 DDR-200 读出第一个数据用了 40ns,比 PC133 还慢了 10ns. 即使是看读出这四个数据的总时间, 它也用了总共 60ns,和 PC133 是一样的。 因此 DDR-200 的性能表现是要比 PC133 差的。

​

‍

‍

不过,随着制造工艺的改进到了下一代的 DDR-266,情况有了一些改善。 DDR-266 的核心频率已经提升到了 133MHz, 和 PC133 一样,但是行选的时间还偏慢一些,这样读出第一个数据大约需要 35ns,不过连续读出四个数据的总时间已经比 PC133 要快一些了,大约是 50ns。

​

‍

我们再来看一看行选和列选时间的参数的总表。 等到了 DDR-400 的时候,最短的行选时间已经和 PC133 一样是 15ns 了,而列选也更快了一些, 缩短到了 10ns,因此 DDR-400 的性能要明显优于 PC133 了。但是到了这个时候,核心频率的提升又遇到了困难。

​

‍

那么怎么继续提升内存性能呢?这就轮到 DDR2 出场了。既然提升核心频率有困难,那就再增加预先取出数据的数量, 之前是从存储阵列中取出双倍的数据, 那现在就取出四陪的数据。例如 DDR-400,它的核心频率只有 100MHz, 和 DDR-200 一样,但因为预取了四个数据, 从外界看来数据传输率达到了 400MBPS。 当然这时候单靠双倍数据率的传输也不够了。 所以它的接口时钟频率也提升了一倍,变成了 200MHz。 这样上下始终沿都传输数据,正好在核心时钟的一个周期内把四个数据都送出去了。

​

‍

‍

和之前一样,DDR2 的第一代标准的性能也不好,其核心频率比当时流行的 DDR-400 要低一半, 不但访存延迟大的多,而且访存带宽也是一样的,所以 DDR2-400 的性能表现是全面落后于 DDR-400 的,很快就被市场淘汰了。 随着制造工艺的改进,DDR2 的核心频率提高之后,性能才逐渐地超过了 DDR1。 不过呢,它的核心频率也没有提高多少。

​

‍

‍

而从 DDR2 到 DDR3 的升级, 基本上也是一样的套路。

​

‍

‍

这是内存的行选时间的变化图, 图中的毎一个红点都是新升级后的第一代。我们可以看出, 内存标准的每次升级都会让行选的时间变长,之后再慢慢地缩短。 从 SDR SDRAM 的最后一代也就是 PC133,到后来多年占据主流地位的 DDR3-1600 十几年的时间里行选时间也只是从 15ns 缩短到了 10ns, 降低了大约 30%。

​

‍

‍

‍

这是内存列选时间的变化图,情况基本一样。 我们可以看出内存的发展过程,基本上就是以牺牲访存延迟为代价,努力提高访存带宽。 访存带宽确实有了几十倍的提升,但是访存延迟的优化幅度很有限。这是由 SDRAM 的基本单元结构决定的, 也就是那个电容的充放电过程。如果不同材料和结构上做根本的改变,基于现在的 SDRAM 结构想要优化访存延迟是很困难的。 所以说从处理器访存的基本要求来看,读出一个指定数据所需要的时间确实没有多少改善,这个说法是没有问题的。

​

‍

‍

这就是所谓内存性能越来越高的真相。 如果我是 CPU,我想要的数据你并不能快一点给我, 但你却给了我很多我现在用不着的数,这对性能真的有帮助吗? 从现状来看肯定是有的, 那这样的帮助是如何实现的呢? 这就是我们下一节要探讨的问题了。

上次更新: 2024/9/29 12:08:10
703-主存的工作原理
705-高速缓存的工作原理

← 703-主存的工作原理 705-高速缓存的工作原理→

最近更新
01
2025 年 2 月记
02-28
02
最全面的浏览器教程-完结撒花
02-16
03
这个工具可以轻松搞到你的浏览器账户密码!
02-15
更多文章>
Theme by Vdoing | Copyright © 2022-2025 | 粤 ICP 备 2022067627 号 -1 | 粤公网安备 44011302003646 号 | 点击查看十年之约
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式