加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

计算机体系结构学习(6)——存储器组织、Banking

(2024-07-17 10:27:49)
标签:

it

分类: 技术
存储是计算系统的重要组成之一,从应用角度,现在计算系统需要处理的数据是非常庞大的;从性能角度,提升内存的访问速度对流水线停顿等有着极大的改善;从能耗角度,内存访问消耗的能量大约是一次复杂加法的几百倍,大部分的性能能耗其实用在了移动数据上;从安全角度,研究存储系统可以提升安全性与可靠性。

这篇文章我们将介绍存储器基础,并介绍banking技术。

1. 存储组织
1.1 虚拟 -> 物理内存
从程序员的角度看内存是:

程序员看到的是虚拟内存,可以认定虚拟内存的容量是无限的。

实际上,物理内存的大小是十分有限的,通过系统软件与硬件协同,会将虚拟内存地址映射到物理内存,系统自动管理物理内存空间,且对程序员是不可见的。

虚拟内存的好处是,程序员无需关心内存大小,一个小小的物理空间可以对外表现为很大的内存,但是系统软件架构会更难设计。

不过现在我们先忽略虚拟到物理内存的映射,先只考虑物理内存,后续的文章会更详细地介绍虚拟内存。

1.2 存储单元
常用的存储单元有:
存储单元 访问速度 价格 一般用于
触发器/锁存器 非常快,能够并行访问 非常贵 内部寄存器(RegFile)
SRAM 较快 较贵 Cache
DRAM 较慢,且为破坏性读 较便宜 主存
flash、硬盘、磁盘 非常慢,且为非易失性内存 非常便宜 外存
Register

在与非门构成的DFF中,主从锁存都需要4个与非门,一共就是8个与非,每个与非门需要4个mos管,也就是说一个DFF需要32个mos管,存储密度低

在同步电路中,通常使用DFF缓存数据,几乎不需要响应时间,速度最快,是整个存储系统层次的最顶层
通常用于做CPU内部寄存器,保存指令执行过程中临时存放的操作数和中间(或最终)的操作结果

SRAM(Static Random Access Memory)

用两个交叉耦合的反相器存储1bit数据(4个晶体管)
用2个晶体管实现访问
组成为:6个晶体管
贵、快、存储密度较低

DRAM(Dynamic Random Access Memory)

用电容的充电情况表示存储的数据,如果是充满电的则存储的是1,反之存的为0
通过对电容充放电,实现写数据
从DRAM读数据是破坏性的,需要刷新
组成为:1个电容+1个晶体管
慢、便宜、存储密度较高

1.3 内存阵列
一个有N位地址线、M位数据的内存,有 
 行、M列数据,内存容量为 
 

一个4*3的内存阵列如下图,根据地址译码,驱动相应行,读出这一行存储的数据:

其中的存储单元常采用DRAM、SRAM:

2. 搭建更大容量的内存
大容量的内存需要更多的存储单元,但是存储器越大,也意味着访问越慢,那么如何做到大内存、且访问不是特别慢呢?

一个思路是,把内存分成更小的阵列,并将它们互连到输入/输出总线上。

2.1 Banking
问题:一个单片的大内存阵列访问耗时很长,并且不能并行进行多个访问

目标:减小内存阵列访问的延迟,并且使能够并行访问内存

基本思想:把一个大阵列分成多个banks,使它们在同一个周期/连续周期内能够独立地访问

例如,将内存分成16个banks,这样就可以在每个周期完成一个bank的访问,也可以一次访问N个banks(要访问的数据在不同的bank中):

广义的内存结构为:

Channel → Rank → Bank

2.2 DRAM子系统
自上而下地看DRAM内存系统:

Channel → DIMM (Dual in-line memory module):

DIMM → Rank:

Rank → Chip:

Chip → Bank:

Bank → row&column:

Bank内部实际上还被划分为Sub-Banks,例如下面两张图:

Kim et al., “A Case for Exploiting Subarray-Level Parallelism in DRAM,” ISCA 2012

Seshadri+, “In-DRAM Bulk Bitwise Execution Engine,” ADCOM 2020

2.3 举例:Cache在内存系统的实现
Cache指高速缓存,一般把常用的数据、指令放在Cache中。

假设物理内存空间的低64bit为Cache区域,从Rank0的8个Chip下面的、第一个Bank中的、Row0 Col0 处获得8bit数据,作为cache的8bit存储空间:

(蓝色的为row buffer)
由于banking机制,这8bit的数据是可以并行访问的,这也是cache高速的原因。

以此类推,继续获得第二个8bit数据:

这样一个64bit的cache块需要8个周期实现数据传输,一次读取8bit数据。

2.4 访问内存Bank的步骤
1) 行译码,驱动响应字线
2) 被选择的bits驱动位线
3) 放大行数据信号,读到row buffer
4) 列译码,选择行中相应的数据输出
5) 提前给位线充电,为下一次访问做好准备

参考:
ETH苏黎世联邦理工学院 Onur Mutlu教授的《数字设计与计算机体系结构》课程

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有