精简版 · 小杯2026-08 冻结,已停止更新(发布前修订了 4 处已知错误)。后续勘误与新增内容只在正式版。看正式版(中杯)→
Skip to content

多体交叉存储器

考情分析

多体交叉存储器的低位交叉方式和带宽计算常以选择题和计算题形式出现。重点理解低位交叉如何实现流水线访问。

大纲定位

考纲第三章(四)「主存储器」第 2 条:多模块存储器

要求到什么程度:能判断高位/低位交叉的地址分布差异,能算连续访问的时间和带宽,能判两个地址是否落在同一个体。大题里常和 Cache 缺失、DMA 传送串在一起考。

基本概念

多体存储器由多个独立的存储模块(体)组成,每个体有自己的地址寄存器、数据寄存器和控制电路,可以并行工作。

设有 m 个存储体,每体存储周期为 T

还有一个符号必须一开始就分清,否则后面所有公式都会代错:

符号含义别名
T单个体完成一次存取所需时间存储周期
τ总线传送一个字的时间(一个总线周期/一拍)总线周期

流水线上"每隔多久启动下一个体",用的是总线拍 τ。当 T=mτ 时,各体恰好首尾衔接、流水不断流——这是临界值,不是什么"通常取值"。T>mτ 会产生冲突(见文末无冲突条件)。

高位交叉(顺序存储)

地址的高位决定选择哪个存储体,低位是体内偏移。

体号=地址/体大小=地址高位

地址分布(4 体,每体 4 个字):

地址体号体内地址
0~3体00~3
4~7体10~3
8~11体20~3
12~15体30~3

连续地址访问集中在同一个体,无法并行,与单体无异。适合按功能划分(如操作系统区/用户区分体存储)。

低位交叉(交叉存储)

地址的低位决定选择哪个存储体,高位是体内偏移。

体号=地址modm=地址低位

地址分布(4 体):

地址体号体内地址
0体00
1体10
2体20
3体30
4体01
5体11
.........

相邻地址分布在不同的体,连续访问可以并行,形成流水线效果。

图 7.13 交叉编址的多模块存储器

图 7.13 交叉编址的多模块存储器

判断两个地址在不在同一个体

选择题常给两个十六进制地址问是否冲突。动作固定:取地址的低 log2m 位比较

:8 体低位交叉,问 0x1F400x1F48 是否同体。

0x1F40末位 0=0002低 3 位=0体 00x1F48末位 8=10002低 3 位=0体 0

同体,会冲突。(只需看十六进制末位:8 体取末位的低 3 位,4 体取低 2 位。)

编者注(易混):位宽扩展并联的 k 片芯片,若上层按字节编址而单片只出 1 字节,则字节地址的低 log2k 位就决定落在哪片——这与按字节交叉的 k 个体是同一个物理结构的两种说法。别因为"位扩展不需要片选译码"就认为不存在体号。

低位交叉的流水线访问

CPU 发出读连续 m 个字的请求,每隔 τ 启动下一个体,m 个体的读操作流水进行。

时序图(m=4T=4τ):

时刻0τ2τ3τ4τ5τ6τ7τ
体 0启动d0
体 1启动d1
体 2启动d2
体 3启动d3

每个体自己都要占满 T=4τ,但启动时刻错开一拍。第一个字在 4τ(即 T)出来,此后每隔 τ 出一个,最后一个字在 7τ 完成——正好是 T+(m1)τ=4τ+3τ

图 7.14 4 体交叉轮流访问方式

图 7.14 4 体交叉轮流访问方式

教材这张时序图更能说明问题:四个体的"单体访存周期"是互相重叠的,每个体自己仍然要花满一个 T,但由于启动时刻错开,对外看每隔一个总线拍就有一个字出来。

读取 m 个字的总时间:T+(m1)τ(第一个字需要 T,后续每字只需 τ)。

单体存储读取 m 个字需要 mT

带宽计算:先判是哪一问

这里是本篇最容易翻车的地方——"最大带宽"和"读一组字的平均带宽"是两个不同的量,公式不同,差出的倍数还不小。拿到题先判问的是哪个。

模型一:稳态最大带宽(问"最大带宽"用这个)

流水线满载之后,每隔 T/m 就有一个字出来(m 个体轮流,每个体的周期 Tm 路重叠掉了)。所以:

Bmax=mWT

也就是单体带宽的 m

B0=WT,Bmax=mB0

:4 体低位交叉,T=50 ns,数据总线 32 位(W=4 B)。

Bmax=4×4 B50 ns=16 B50 ns=320 MB/s

单体只有 4 B/50 ns=80 MB/s。答 80 MB/s 就是没意识到低位交叉在并行

编者注(卷面):这一步的论证句要写出来——「n 体低位交叉并行工作,最大带宽 =n× 字宽 / 存储周期」。真题判分维度点名要这句,只给数字会扣分。

模型二:读一组 m 个字的时间(含冷启动)

如果问的是"连续读 m 个字要多久",那第一个字的 T躲不掉的冷启动代价,不能按稳态算:

tm=T+(m1)τ,B¯=mWT+(m1)τ

第一个字要等满一个 T,之后每个字只要一个总线拍 τ(因为后续体的存取已经和前面的传送重叠了)。

:4 体,T=200 ns,τ=50 ns,W=4 B,连续读 4 个字。

t=200+3×50=350 ns,B¯=16 B350 ns45.7 MB/s

单体读 4 个字要 4×200=800 ns,加速比 800/3502.29 倍——注意这个倍数小于 m=4,因为冷启动的 T 被摊进来了m 越大、或读的字数越多,平均带宽越接近模型一的 m 倍上限。

模型三:题目给了"送首地址时间"的突发传送

有的题会把一次突发访问的三段全给出来,这时按三段直接相加,别套公式:

t=τ+T+mτm 线

:8 体低位交叉,送首地址 5 ns,存储周期 40 ns,总线一拍 5 ns,每字 4 B,读 32 B(8 个字)。

t=5+40+8×5=85 ns

论证句同样要写:8 个体的准备是重叠的,只需等第一个体的 40 ns,不是 8×40=320 ns

三个模型怎么选

题目问什么用哪个
最大带宽 / 稳态带宽 / 峰值带宽模型一 mW/T
连续读 m 个字的时间或其平均带宽模型二 T+(m1)τ
题干显式给了送首地址时间、问一次突发多久模型三 三段相加

交互可视化

加载可视化中...

无冲突访问条件

低位交叉存储器流水线工作时,要求前一次对某体的访问在下一次访问该体之前完成。因此必须满足:

Tmτ

即存储周期 T 不能超过 m 倍的总线传输时间 τ。若 T>mτ,当 CPU 再次访问同一体时该体尚未完成上次操作,产生访问冲突,需要等待。

低位交叉的局限

  • 连续地址访问效果好,随机访问没有优势
  • 体数 m 一般取 2 的幂(便于硬件实现模 m 运算用位选择代替除法)
  • 如果多个体同时被访问(如指令流水线取指与数据访问冲突),仍然可能产生冲突

考点清单

  • 低位交叉:体号 = 地址 mod m,相邻地址在不同体,支持流水线访问
  • 高位交叉:体号 = 地址高位,相邻地址在同一体,无法并行
  • 低位交叉读 m 个字的时间:T+(m1)τ,而非 mT
  • 最大带宽 =mW/T= 单体的 m(稳态,问"最大带宽"用这条)
  • 读一组 m 字的平均带宽 =mW/[T+(m1)τ],含冷启动,倍数小于 m——两条别混用
  • 卷面必须写论证句:「n 体并行,最大带宽 =n× 字宽 / 存储周期」「只等第一个体的 T,不是 nT
  • 无冲突条件:Tmτ(体数必须足够多)
  • 体数 m 通常取 2 的幂,体号取地址低 log2m 位;判同体只看十六进制末位

教材出处

  • 袁春风《计算机组成与系统结构(第 3 版)》§7.2.6 多模块存储器:图 7.13(p218)、图 7.14(p218)

真题练习