多模块存储器

DRAM 的存取周期降不下来,但存取周期里有很大一段是”恢复时间”,这段时间存储体在忙、总线却是空的。多模块存储器的全部思路就是:再造几个存储体,让一个体在恢复时另一个体在传数据,把总线填满。

它提高的是带宽,不是延迟——任何一次单独的访问仍然要等一个完整的存取周期。这是 3.1.2 那张表的第三行,也是本节所有判断题的核心。

这一节还是全章术语最容易打架的地方:位扩展、单体多字、多体交叉三个词描述的是三件不同的事,而它们在同一道题里可以同时出现。

机制

单体多字存储器

一个存储体,把存储字长做成 个字宽,一次访问读出 个连续的字。

  • 带宽提高 倍,存取周期不变
  • 前提是指令和数据在主存中连续存放
  • 遇到转移指令或非连续的数据访问时,取出的 个字里有一部分白读了,效率下降
  • 一次只能读出同一个字组内的字,无法同时读两个不相邻的字

多体并行存储器

每个体都是一个完整的存储器,有自己的读写控制电路、地址寄存器和数据寄存器,能独立工作。这句话是”多体”的定义,也是判断一个结构算不算多体的唯一标准。

按地址的哪一部分做体号,分成两种编址:

高位交叉编址(顺序方式):地址的高位是体号,低位是体内地址。体号地址每体单元数连续的地址落在同一个体内,所以顺序访问时不能并行。它的用途是扩容——把多个体拼成一个大的地址空间,以及多机共享时把不同体分给不同处理机。

低位交叉编址(交叉方式):地址的低位是体号,高位是体内地址。体号地址连续的地址依次落在不同体上,因此顺序访问可以流水重叠——这才是提高带宽的那一种。

flowchart TB
    subgraph H["高位交叉(顺序方式)· 4 体"]
        H0["体 0<br/>地址 0~3"] --- H1["体 1<br/>地址 4~7"] --- H2["体 2<br/>地址 8~11"] --- H3["体 3<br/>地址 12~15"]
    end
    subgraph L["低位交叉(交叉方式)· 4 体"]
        L0["体 0<br/>0,4,8,12"] --- L1["体 1<br/>1,5,9,13"] --- L2["体 2<br/>2,6,10,14"] --- L3["体 3<br/>3,7,11,15"]
    end
    H -.->|"连续访问全落在一个体<br/>不能重叠"| X["扩容 / 多机共享"]
    L -.->|"连续访问轮流落体<br/>可流水"| Y["提高带宽"]

    classDef good fill:#d5f5e3,stroke:#27ae60
    classDef plain fill:#fdebd0,stroke:#e67e22
    class Y,L good
    class X,H plain

低位交叉的时序与两个公式

设存储周期为 ,总线传送周期为 ,体数为 。

体数的下界:要让流水线不出现空拍,必须在第 0 体忙完 之前把其余体都启动一遍,即

取 时称为”最佳交叉存取”;再增加体数不会继续提速,因为总线已经被填满了——这是”体数越多越快”这一错误直觉的终点。

连续读取 个字的总时间:

第一个字要等一个完整的存储周期 ,之后每 就出来一个。注意这个式子里第一个字的延迟一点没减少——再一次印证”交叉编址只提高带宽”。

作为对照,顺序方式(高位交叉)读 个连续字要 ,两者之比就是加速比。

边界

疑问点:位扩展和多模块交叉编址是不是同一件事

这个疑问来自一道具体的题,题干与选项如下:

某存储器总线的宽度是 64 位,用 8 个 位的 DRAM 芯片扩展构成 位的内存条,按字节编址,支持突发传送方式。double 变量 的主存地址为 2026 0000H,int 变量 的主存地址为 2026 1006H,下列叙述中错误的是: A. 该内存条可不采用多模块交叉编址 B. DRAM 芯片的行缓冲采用的是 SRAM C. 读取变量 只需要一个存取周期 D. 读取变量 需要两个存取周期

先把 B、C、D 各自验证一遍,这三条都是独立可判的硬结论:

B 正确。 行缓冲要在一次行激活后长时间保持整行数据并被反复列访问,电容做不到,行缓冲由 SRAM 型单元构成(见 3.2.1)。 C 正确。 内存条一次提供 64 位 = 8 B; 是 double(8 B),地址 …0000H 是 8 的倍数,恰好落在一个 8 B 访问单元内,一个存取周期读完。 D 正确。 是 int(4 B),地址 …1006H 除以 8 余 6,占用字节偏移 6、7、8、9,跨了 …1000H~1007H 和 …1008H~100FH 两个访问单元,需要两个存取周期。这正是 2.3.4 边界对齐的直接应用。

B、C、D 都对,所以答案只能是 A。这一点没有争议。

边界辨析:这道题的答案可以记,它的解析不能记

教辅给 A 的理由是:“内存条一次向计算机提供 8 B 的数据,每个 DRAM 芯片提供 1 B 的数据,因此一定采用多模块交叉编址。” 这个理由与王道正文自己对”多体并行存储器”的定义相冲突。 正文要求各体有独立的读写控制电路、地址寄存器和数据寄存器,能独立工作;而这 8 片芯片共用地址线、共用片选,每次必须同进同退,恰恰不具备独立性。按正文的定义,它们是位扩展构成的单体多字结构,不是多体。

但也不能说这个理由纯属胡说,它对了一半: 按字节编址时,第 片芯片持有的正是所有地址 的字节——字节地址在 8 片之间的分配形式,确实就是”低位交叉”。

真正的问题在于”多模块交叉编址”这个词组携带了两层含义,而这道题的解析取了其中一层:

层面问的是本题成立吗
编址形式地址的低位是不是用来区分模块成立(字节地址低 3 位选片)
访问方式(实质义)各模块能不能独立、重叠地工作不成立(8 片必须同步)

考场上一律用实质义:判断”是不是多模块交叉存储器”,看各模块有没有独立的读写控制电路、能不能重叠访问。这是王道正文、唐朔飞教材和统考真题的统一口径。 这道题记住答案 A 即可,它的推理不要带回 3.3.2——把”8 片并联凑数据线”当成交叉编址,会把位扩展的概念彻底污染。 “好不严谨”这个判断是对的,而且指向准确:不严谨的不是答案,是同一个术语在同一本书里被用作了两个意思。

三个词的分工,务必固定下来:

术语回答的问题在哪一节
位扩展为什么要用 8 片——凑够数据线宽度3.3.2
单体多字一次访问读出多少个字——一个体、宽字长本节
多体交叉几个体能不能重叠工作——独立控制电路本节

低位交叉不改变单次访问的存取周期。 判断题若说”多体交叉存储器缩短了存取周期”,错;说”提高了存储器的带宽/工作速度”,对。

体数超过 之后不再提速。 这条限定几乎每次考交叉存储器都会被抽掉。

高位交叉不能提高连续访问的速度。 它的价值在扩容和多机共享,把它当成提速手段是最常见的错配。

计算模板:突发传送综合题

这类题把交叉存储器、总线时钟、Cache 缺失串在一起,步骤是固定的。 以下面这道为例:

32 位计算机,CPU 主频 800 MHz,Cache 命中时的 CPI 为 4,Cache 块大小 32 B;主存采用 8 体交叉,每体存储字长 32 位,存取周期 40 ns;存储器总线宽度 32 位,总线时钟频率 200 MHz,支持突发传送。每次读突发传送总线事务包括:传送首地址和命令、存储器准备数据、传送数据;每次突发传送 32 B,传送地址或 32 位数据均需一个总线时钟周期。

第一步:把两个时钟周期先算出来。 CPU 时钟周期 ;总线时钟周期 。 总线带宽 位。

第二步:数需要几个总线事务。 Cache 块 32 B,每次突发传送 32 B → 1 个读突发传送事务。

第三步:拆一次事务的三段,全部折算成总线时钟周期。

段用时折算
传送首地址和命令1 个总线周期1 拍
存储器准备数据一个存取周期 40 ns拍
传送 32 B 数据 次8 拍

合计 拍 。 8 体交叉正是在这里发挥作用:数据一旦开始送,后续 7 个字由其余各体接力提供,8 拍连续不断,不需要每个字都等一个 40 ns 的存取周期。

第四步:把缺失代价加到 CPU 执行时间上。 设执行 100 条指令,平均每条访存 1.2 次,缺失率 5%。

缺失次数次 命中时的执行时间缺失附加

边界辨析:第四步里"命中时的 CPI"已经包含了命中的访存时间

这是这类题唯一真正的陷阱。题目给的是”Cache 命中时的 CPI 为 4”,这个 4 已经把命中情况下的取指和访存全部算进去了,所以 是”假设全部命中”时的完整执行时间。 缺失惩罚是在此之上额外叠加的,不能再去乘一遍 CPI,也不能把命中时的访存时间再单独加一次。 另外两个高频错误: 缺失次数按访存次数算,不是按指令条数算——是 ,不是 。 缺失代价用的是一次完整总线事务的时间(85 ns),不是存取周期(40 ns)——因为 CPU 等的是整块 32 B 到位,而不是第一个字到位。

对照速查

结构体数独立控制电路提高什么连续访问能否重叠
单体多字1—带宽—
高位交叉有容量组织否
低位交叉有带宽是
位扩展1( 片并联)无(共用片选)字长否
公式用途
交叉体数的下界,取等号为最佳交叉
低位交叉连续读 个字
顺序方式连续读 个字

考点

  • 多体的定义是”各体有独立的读写控制电路,能独立工作”
  • 低位交叉提高带宽,高位交叉用于扩容和多机共享
  • ;体数超过 不再提速
  • 低位交叉连续读 个字用时 ,首字延迟不变
  • 交叉编址不缩短存取周期
  • 位扩展 ≠ 多体交叉:位扩展的各片共用片选、必须同步
  • 单体多字要求指令数据连续存放,遇转移则效率下降
  • 突发传送事务 = 传地址 + 准备数据 + 传数据,三段分别折算成总线周期
  • “命中时的 CPI”已含命中访存时间,缺失代价另加

链接