网页资讯视频图片知道文库贴吧地图采购
进入贴吧全吧搜索

 
 
 
日一二三四五六
       
       
       
       
       
       

签到排名:今日本吧第个签到,

本吧因你更精彩,明天继续来努力!

本吧签到人数:0

一键签到
成为超级会员,使用一键签到
一键签到
本月漏签0次!
0
成为超级会员,赠送8张补签卡
如何使用?
点击日历上漏签日期,即可进行补签。
连续签到:天  累计签到:天
0
超级会员单次开通12个月以上,赠送连续签到卡3张
使用连续签到卡
07月24日漏签0天
内存吧 关注:252,579贴子:1,012,595
  • 看贴

  • 图片

  • 吧主推荐

  • 视频

  • 游戏

  • 首页 上一页 1 2
  • 23回复贴,共2页
  • ,跳到 页  
<<返回内存吧
>0< 加载中...

回复:解剖DRAM存储器

  • 只看楼主
  • 收藏

  • 回复
  • HE199157
  • 知名人士
    11
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
4、burst猝发模式
第三大节说明了 CPU 如何向内存条中的一个 rank 读写 64 比特,而如果读者对现代处理器有更多的了解,即了解 cache 的话,就会想到 CPU 在访问内存单个字的时候,不仅需要访问这个字,还需要把这个字所在的缓存行全部搬进 cache 中,因此内存不仅要一次提供一个字,还要提供一个缓存行( cache line )。
缓存行一般比较大,比如 8 个 64 比特,因此实际上内存要一次提供 8×64=512 比特数据。但如果按照第三节的模式访问内存,那么一次只能提取出 64 比特,即提取一个字,这并不满足缓存行的要求,为此,我们提出对内存使用“猝发模式”。
首先明确一点,缓存行内的各个字在内存上是紧邻的。有了这个基础,我们就可以灵活地使用 cell 阵列中的行缓存( row buffer )。第二节说到单元行进入放大器的行缓存之后,并不会在读写一个比特后立刻写回 cell 阵列,而是待在行缓存里等待下一个读写命令,如果下一个读写命令仍然发生在该单元行,那就可以直接操作 row buffer 。
在猝发模式里,我们更进一步,每当我们读取 cell 阵列中的一个比特,我们不仅把这个比特送到输出缓存中,而且紧接着把这个比特所在缓存行的各个比特都送到输出缓存,这样就完成了一次“猝发”,即把目标比特周围的多个比特连续地读出。


  • HE199157
  • 知名人士
    11
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
5、bank并行和内存交错
在第二大节中我们比较详细地聊了在一个 cell 阵列中读取数据的过程(对应下面 5 个步骤的第 3 步),而CPU在访问内存时,还需要一些别的操作。总的来说,CPU 访存大概要经过 5 个步骤:
1、CPU 发送指令给内存控制器;
2、内存控制器解析指令,并把“解析到的控制信息”发送到控制总线;
3、bank 接收控制信息,并读取数据;
4、内存芯片把读取出的数据放到数据总线;
5、内存控制器收取数据,并将其交给 CPU。
如果 CPU 连续访问同一 bank ,那么 CPU 、内存控制器、总线和 bank 就必须串行操作。可想而知,串行操作会让访存效率下降。
注意,这里我认为 CPU 不可以在一个 bank 工作时再给它发送新的指令,如果 CPU 连续不断地给一个 bank 发送指令,那么很可能前一个指令还没完成,后一个指令就改变了 bank 内的 row buffer 、列地址缓存或输出缓冲,这样是不行的。
有的朋友可能对 1、2、4、5 步的时间消耗和因此造成的效率下降不以为然,为了说明问题,下面以“总线延迟”为例:
众所周知,光速是 3×10^8m/s,而高性能 CPU 的频率可达 3GHz ,即 3×10^9Hz ,那么在 CPU 的一个时钟周期内,光可以运动 10cm 。“But electricity travels about fifth as far as light in sillicon”,即“但是电在硅中的传播距离大约是光的五分之一”,内容参考自 Stephen Jones GTC 2021 的 7min24s 起,这里的 electricity 我认为其实是指电压最高点,Stephen 总结道:“而在电子线路中 electricity 的运动则更加受限,经过测量,在电子线路中 electricity 在一个CPU时钟周期内只能运动 20mm 左右。”换句话说,每个时钟周期线路上的电压只能向前推进 20mm ,而 CPU 和内存芯片之间的距离远不止 20mm ,因此数据在总线上移动需要花费多个 CPU 时钟周期。
上面的计算说明,在 CPU 访存的 5 个步骤中,第 2 、第 4 步是要花很多时间的,而没有详细讨论的第 1 、第 5 步大概率比这两步还要慢。因此让 CPU 、内存控制器、总线和bank串行操作是不明智的。实际上,我们完全可以在一个 bank 进行第 3 步时,让 CPU 、内存控制器、总线去操作新的 bank ,以此隐藏起它们的工作时间,从而营造起一种 CPU 、内存控制器和总线不需要消耗时间的假象。上面这种做法实际上实现了“ bank 间并行”。
所谓在“ bank 间并行”就是让一个 chip 内的不同 bank 并行工作,让它们各干各的。为此 CPU 要连续、依次向不同的 bank 发送读取指令,这样在同一时间很多 bank 都在工作,第一个 bank 可能在输出,第二个 bank 可能在放大电压,第三个 bank 可能在开启单元行。当第一个 bank 猝发输出完毕,第二个 bank 刚好可以输出;当第二个 bank 猝发输出完毕,第三个 bank 刚好可以输出.......通过这样让“ bank 读取”和“ CPU 、内存控制器、总线工作”在时间上相互重叠的方式,我们可以成功地把 CPU 、内存控制器和总线的工作时间隐藏起来,从而打造出一种 CPU 无延迟访问内存、多个 bank 连续、依次“泵”出数据的理想情况。这种通过“ bank 间并行”实现“连续泵出数据”的方法,就是所谓的“内存交错”。
注意到,内存交错不仅隐藏了 CPU 、内存控制器和总线的工作时间,还隐藏了对单个 bank 而言 row 缺失所造成的多余访问时间(所谓“多余”是相对“ row 命中”情况而言的),关于这个问题的更多内容,可以参考为什么 banking 能提高 memory throughput 。
下图是一个示范:上面的时序图是不使用内存交错时 CPU 接收数据的时序,下面的时序图是使用内存交错时 CPU 接收数据的时序。很容易看到在第一种串行方法里,数据总线的利用率是很低的,而内存交错方法则可以让各个 bank 连续泵出数据。


2025-07-24 00:17:43
广告
不感兴趣
开通SVIP免广告
  • HE199157
  • 知名人士
    11
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
6、小结
到这里为止,文章的内容就结束了,回顾一下,本文主要讨论了 DRAM 基本单元的结构、基本单元的读写原理、普通 DRAM 芯片的读写过程、读写时间消耗、row buffer 、DRAM 系统层次、猝发模式和内存交错等内容。
通过阅读本文,读者可以建立起对DRAM芯片的基本认识,了解 CPU 访存时存储芯片内部的动作,也有可能受到本文启发,发掘出自己对高性能内存系统的兴趣(×)。另外,读者还可以看看自己电脑的内存插槽数和内存通道数,更好地了解自己电脑的性能。咳咳。


  • HE199157
  • 知名人士
    11
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
https://www.bilibili.com/video/BV1TE411V7fd/


  • HE199157
  • 知名人士
    11
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
https://www.bilibili.com/video/BV1T3411T73E/


  • XWH
  • 高级粉丝
    3
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
顶


  • HE199157
  • 知名人士
    11
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
搬砖不易,啦啦啦啦


登录百度账号

扫二维码下载贴吧客户端

下载贴吧APP
看高清直播、视频!
  • 贴吧页面意见反馈
  • 违规贴吧举报反馈通道
  • 贴吧违规信息处理公示
  • 首页 上一页 1 2
  • 23回复贴,共2页
  • ,跳到 页  
<<返回内存吧
分享到:
©2025 Baidu贴吧协议|隐私政策|吧主制度|意见反馈|网络谣言警示