主存储器和DRAM

发布时间 2023-11-09 09:43:44作者: 吴建明wujianming

主存储器和DRAM

SRAM与DRAM

•SRAM=静态RAM

–只要有电源,数据就会保留

•DRAM=动态RAM

–如果什么都不做,就会丢失数据

•SRAM:6T/位

–采用普通高速CMOS技术构建

•DRAM:1T每比特(+1个电容器)

–采用针对密度优化的特殊DRAM工艺构建

硬件结构

 

 

DRAM芯片组织(2/2)

•低级别组织与SRAM非常相似

•读取具有破坏性:通过读取擦除内容

•行缓冲区保存读取数据

–行缓冲区中的数据称为DRAM行

•通常被称为页面——不要与虚拟内存页面混淆

–Read将整行写入缓冲区

–总是在行缓冲区外执行块读取

•读取整行,但访问一个块

•类似于读取缓存线,但访问一个字

DRAM读取

•读取后,DRAM单元的内容消失

–但在行缓冲区中仍然安全

•在进行另一次读取之前将位写回

•读取缓冲区较慢,但读取缓冲区较快

–尝试从缓冲区读取多行(行缓冲区命中)

过程称为打开或关闭一行

DRAM刷新(1/2)

•DRAM单元逐渐丢失内容

–即使未访问

–这就是为什么它被称为动态

•必须定期读取和重写DRAM

–如果长时间没有对行进行读/写操作,该怎么办?

 

必须定期刷新所有内容

DRAM刷新(2/2)

•突发刷新

–停止世界,刷新所有记忆

•分布式刷新

–间隔一次刷新一行(或几行)

–避免长时间阻塞内存

•自刷新(低功耗模式)

–告诉DRAM自我刷新

–关闭内存控制器

–退出自我刷新需要一些时间

典型DRAM存取序列(1/5)

典型DRAM存取序列(2/5)

典型DRAM存取序列(3/5)

典型DRAM存取序列(4/5)

典型DRAM存取序列(5/5)

(旧)DRAM读取定时

每次指定原始DRAM行和列

带快速页面模式的(旧)DRAM读取定时

FPM允许在没有RAS的情况下从页面进行多次读取

(较新)SDRAM读取定时

SDRAM使用时钟,支持突发

存储装载组改善BW

•DRAM访问需要多个周期

•4字缓存块的未命中惩罚是多少

–考虑以下参数:

•1个周期发送地址

•6个周期访问每个单词

•1个周期发送回单词

–(1+6+1)x 4=32我们如何加快速度?

•扩展内存和总线

–并行读出所有单词

•4字块未命中惩罚

–1+6+1=8

•成本

–更宽的总线

–更大的扩展尺寸

简单交错主存储器

•将内存划分为n组,在

所以单词A是

–存储装载组(A mod n)

–单词处(A div n)

•可以在另一组繁忙时访问一个组

→ 交错增加了内存带宽,而没有更宽的总线

在内存组中使用并行性来隐藏内存延迟

DRAM组织

双列x8(2Rx8)DIMM

SDRAM拓扑

CPU到内存互连(1/3)

CPU到内存互连(2/3)

离散的南北桥芯片

CPU到内存互连(3/3)

综合北桥

内存通道

使用多个通道获得更多带宽

内存级并行性(MLP)

•如果内存延迟为10000个周期,该怎么办?

–运行时以等待内存为主

–重要的是重叠的内存访问

•内存级并行性(MLP):

–未完成内存访问的平均次数

当至少有一次内存访问未完成时。

•MLP是一个指标

–不是工作量的基本属性

–取决于微体系结构

带MLP的AMAT

•如果…

缓存命中率为10个周期(核心到L1和返回)

内存访问是100个周期(核心到内存再返回)

•然后…

50%未命中率时:AMAT=0.5×10+0.5×100=55

•除非MLP>1.0,否则…

50%mr时,1.5 MLP:AMAT=(0.5×10+0.5×100)/1.5=37

50%mr时,4.0 MLP:AMAT=(0.5×10+0.5×100)/4.0=14

在许多情况下,MLP决定性能

内存控制器(1/2)

内存控制器(2/2)

•内存控制器连接CPU和DRAM

•在LLC中缓存未命中后接收请求

–可能源自多个核心

•复杂的硬件、手柄:

–DRAM刷新

–行缓冲区管理策略

–地址映射方案

–请求调度

请求调度(1/3)

•写入缓冲

–写入可以等待读取完成

•控制器队列DRAM命令

–通常按组排队

–允许轻松重新排序操作。适用于同一组

•共同政策:

–先到先得(FCFS)

–先到先得(FR-FCFS)

请求调度(2/3)

•先到先得

–最旧的请求优先

•先到先得

–列更改优先于行更改

–跳过较旧的冲突请求

–查找行命中数(针对排队的请求)

•查找最旧的

•如果与正在进行的请求没有冲突

•否则(如果冲突),请尝试下一个最旧的

请求调度(3/3)

•为什么很难?

•DRAM中的大量时间限制

–tWTR:写入后读取前的最小周期

–tRC:组连续打开之间的最小周期

–…

•同时跟踪资源以防止冲突

–通道、组、列、数据总线、地址总线、行缓冲区

–同时处理多个排队的请求

…同时不忘刷新

行缓冲区管理策略

•打开页面策略

–访问后,将页面保留在DRAM行缓冲区中

–下一次访问同一页面更低的延迟

–如果访问不同的页面,必须先关闭旧页面

•如果有很多地方,那就很好

•关闭页面策略

–访问后,立即关闭DRAM行缓冲区中的页面

–下一次访问不同页面更低的延迟

–如果访问不同的页面,则旧页面已关闭

•如果没有本地,则良好(随机访问)

地址映射方案(1/3)

•问题:如何将物理地址映射到通道ID、等级

ID、组ID、行ID和列ID?

–目标:有效利用渠道/级别/组级别的并行性

•多个独立通道最大并行度

–将连续的缓存线映射到不同的通道

•单通道、多个等级/组 OK并行度

–受限于共享地址和/或数据引脚

–将关闭缓存线映射到同一列中的组

•从同一列读取比从不同列读取快

•从一个组访问不同行的速度最慢

–所有请求都已序列化,与行缓冲区管理无关。政策

–映射到同一组的行应避免空间局部性

•列映射取决于行缓冲区管理。(为什么?)

地址映射方案(2/3)

地址映射方案(3/3)

•打开页面映射方案示例:

高并行度:[行-列-行通道偏移]

易于扩展:[通道排列行-行-列偏移]

•关闭页面映射方案示例:

高并行度:[行-列-列-库通道偏移量]

易于扩展:[通道列-行-列-库偏移]

克服内存延迟

•缓存

–通过完全避免DRAM来减少平均延迟

–限制

•容量(程序不断增加)

•强制性失误

•预取

–猜猜接下来会访问什么

•放入缓存