Appearance
多模块存储器
2026 大纲 三(四)2 多模块存储器。
器件快不了,就让多个器件的等待时间重叠起来
单个存储体的存储周期由器件特性决定,很难缩短。既然一次访问的延迟压不下去,那就换个目标——提高单位时间能完成多少次访问。做法是用多个结构相同的存储模块(体),每个体有自己独立的地址寄存器、数据寄存器和读写控制电路,因此可以各自独立地存取。
🔴 多模块存储器一点也没有缩短存储周期。 单个体该花多久还是花多久,提高的是吞吐率——让多个体的存储周期在时间轴上互相重叠。这与流水线 CPU 不缩短单条指令的延迟、只提高吞吐率,是完全同一个道理。
但"能并行"不等于"一定并行"。四个体各干各的,前提是连续的几次访问恰好落在不同的体上;要是连着几次都撞在同一个体上,多出来的三个体只能干看着。所以关键不在有几个体,而在地址是怎么划分到体上的——这就是下一节两种编址方式的分歧点,也是本篇几乎所有题目的入口。
先动手看一眼
拨的时候盯住时序图上那几条"忙"的色带:它们是错开而重叠的,每条自己的长度(存储周期)始终没变。
一、两种编址方式
| 连续编址(高位交叉) | 交叉编址(低位交叉) | |
|---|---|---|
| 地址划分 | 高位是体号,低位是体内地址 | 高位是体内地址,低位是体号 |
| 4 个体、每体 4 单元时 | 地址 0~3 在体 0、4~7 在体 1、8~11 在体 2、12~15 在体 3 | 地址 0 在体 0、1 在体 1、2 在体 2、3 在体 3、4 又回体 0…… |
| 体内地址 | 连续 | 不连续,第 |
| 连续访问时 | 一直待在同一个体里,并行能力完全用不上,吞吐率与单体相同 | 相邻地址分布在不同体上,访问可以重叠进行 |
| 价值 | 地址空间的整齐划分(把不同区域分配给不同用途) | 提速的来源 |

图 7.13 交叉编址的多模块存储器(袁春风《计算机组成与系统结构(第 3 版)》p218)
交叉编址下有一条最常用的判据:
🔴 体号
地址的低 位。 判断两个地址是否落在同一个体,只需比较这几位。体数 取 2 的幂,"对 取模"才能退化成"取低 位",用连线就能实现而不需要除法电路。
高位交叉不是"错误"的设计,它的目标本就不是并行。同样的道理也出现在主存与 CPU 的连接中——片选用高位地址正是为了让片内地址连续,见 主存和 CPU 之间的连接。
二、流水线访问
先分清两个时间量:
| 时刻 | ||||||||
|---|---|---|---|---|---|---|---|---|
| 体 0 | 启动 | 忙 | 忙 | 忙 | 出 | |||
| 体 1 | 启动 | 忙 | 忙 | 忙 | 出 | |||
| 体 2 | 启动 | 忙 | 忙 | 忙 | 出 | |||
| 体 3 | 启动 | 忙 | 忙 | 忙 | 出 |

图 7.14 4 体交叉轮流访问方式(袁春风《计算机组成与系统结构(第 3 版)》p218)
看这张时序表要抓住一件事:四个体各自仍然要花满一个存储周期
🔴 各体的启动间隔是总线拍
,不是存储周期 。 这是理解流水的关键:体的工作是重叠的,总线的传送是串行的。对外的效果就是第一个字在 时刻出来,此后每隔 出一个。
由此得到两条最常用的结论:
第一条要看清是
判访存冲突:光"同体"还不够
给一串访问地址问"哪一对可能冲突",要同时满足两个条件,缺一不可:
- 两个地址落在同一个体——比较地址的低
位; - 两次访问在序列中的间隔小于
——间隔 时该体已经轮完一圈、恢复空闲,接得上;间隔 时前一次还在忙。
所以一串地址里同体的配对往往有好几对,真正冲突的只是那些挨得太近的。判题时先按
一次访问要占几个存储周期
另一类问法是给一个具体地址和一个数据长度,问读它需要几个存储周期。做法分两步:先看一次并行访问能覆盖哪几个字节(
举例:4 体交叉、每体 8 位、总线 32 位,则一次覆盖 4 字节且边界对齐到 4 的倍数。一个 8 字节的 double 若起始地址除以 4 余 2,它占的字节会横跨
三、带宽的三种计算口径
这是本节最容易混淆的地方——"最大带宽"与"读一组字的平均带宽"是不同的量,数值差别不小。
| 求什么 | 用哪个 | 含义 |
|---|---|---|
| 最大 / 稳态 / 峰值带宽 | 流水线满载之后每隔 | |
| 连续读 | 第一个字的 | |
| 已给出送地址时间的一次突发访问 | 送首地址 |
三者的差别全在"那一个启动的
三种口径各代一组数:为什么加速比只有 2.29 而不是 4,突发访问为什么只等一个存储周期(想核对自己会不会把口径用串时展开)
(一)稳态最大带宽。 4 体交叉,
单体只有
(二)读一组
单体读 4 个字需
(三)含送地址时间的突发传送。 8 体交叉,送首地址 5 ns,存储周期 40 ns,总线一拍 5 ns,每字 4 B,读 32 B(8 个字):
要点是:8 个体的准备工作是重叠的,只需等第一个体的 40 ns,而不是
(四)判断两个地址是否同体。 8 体交叉编址,0x1F40 与 0x1F48:8 体需看低 3 位,十六进制末位即为低 4 位。
两者同体;若这两次访问在序列中挨得比 8 拍近,就会冲突。
四、什么时候交叉编址帮不上忙
⚠️ 交叉编址只对连续访问有效。 随机访问时地址落在哪个体是随机的,可能连续撞在同一个体上,此时与单体无异;即使地址连续,多个访问源(如指令预取与数据访问同时进行)仍可能争用同一个体。
还有一个概念关系要理顺:位扩展并联的多片芯片算不算多体交叉?从物理连接看是同一件事的两种描述。若上层按字节编址而每片一次只出 1 字节,则字节地址的低
考点速记
- 多模块存储器是空间并行技术,提高吞吐率而非缩短单体存储周期;连续编址(高位交叉)体号取高位、体内地址连续、无法并行,交叉编址(低位交叉)体号取低位、相邻地址在不同体、支持流水线访问。体号
地址的低 位。 - 各体的启动间隔是总线拍
而非存储周期 ;读 个连续字的时间 ;无冲突条件 ,等号成立时流水恰好不断流。 - 最大带宽
是单体的 倍;读一组字的平均带宽含启动代价,倍数一定小于 。交叉编址只对连续访问有效。
这一节在真题里被考过的形式(下方「真题练习」里属于本篇的那几道):
- 给一串访存地址,问哪一对可能发生冲突:先按
标出每个地址的体号,再在同体的位置之间数间隔。同体且间隔 才冲突;间隔恰好等于 是"刚恢复就接上",不冲突。⚠️ 只看同体不看间隔会多选。 - 给一个地址和数据长度,问读它需要几个存储周期:一次并行访问覆盖的是一段对齐的
字节,数该数据跨了几段。起始地址不对齐会多出一次。 - 给若干芯片交叉编址,问哪个地址与某地址在同一芯片:比较低
位,把十六进制末位展开成二进制去取。 - 大题里算突发传送一次要多久:
。要点是各体的准备是重叠的,只等第一个体的 。 - 大题里问四体低位交叉的最大带宽:"每
个存储周期启动一个体"即 ,最大带宽 。
易错:把读
个连续字的时间算成 。只有第一个字等满 ,其余每隔 出一个。
易错:判冲突只比体号不看间隔。间隔
的同体访问不冲突。
易错:把"最大带宽"和"读一组字的平均带宽"混用。前者不含启动代价、是单体的
倍,后者含、必定小于 倍。
易错:以为多体交叉缩短了存储周期。它只让多个存储周期重叠,单体的
一点没变。
教材出处
- 袁春风《计算机组成与系统结构(第 3 版)》§7.2.6 多模块存储器:连续编址与交叉编址的地址划分、轮流启动方式、图 7.13 与图 7.14(p217~218)
相关知识
主存和 CPU 之间的连接|DRAM 芯片与内存条|半导体随机存取存储器