主存储器和DRAM
主存储器和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来减少平均延迟
–限制
•容量(程序不断增加)
•强制性失误
•预取
–猜猜接下来会访问什么
•放入缓存
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
2022-11-09 RISC- Compiler Reordering- template-compiler分析
2021-11-09 华为与大众合作