第四章 向量处理机
本章复习分级
- 重点掌握:向量链接、编队、分段开采总时间、DAXPY。
- 需要背诵:横向/纵向/纵横处理、Cray-1冲突、R∞、n1/2、nv。
- 理解即可:典型向量机型号。
作业覆盖重点:4.5和4.6连续考链接通过时间及存储器结构冲突,4.7考两组向量表达式的流水执行,4.8考超过MVL后的分段开采。这四类计算应优先于机器型号细节。
本章直观图景
向量处理机最适合处理“同一种操作重复做很多次”的任务。普通标量处理像一个厨师一盘一盘做菜;向量处理像后厨把一批菜排成队,切菜、翻炒、装盘各有专门工位,一旦流水线启动,后面就能连续出结果。
本章的关键词可以串成一句话:向量太长就分段开采;向量指令能并行就编队;有先写后读但能接流水就链接;性能好不好看启动开销被多少元素摊薄。
4.1 向量的处理方式
💡 以
| 处理方式 | 方式 | 数据相关次数 | 功能切换次数 | 适用性 |
|---|---|---|---|---|
| 横向处理 | 逐行计算:先算 |
N次 | 2N次 | ❌ 不适用于向量机 |
| 纵向处理 | 按列计算:先算 |
1次 | 1次 | ✅ 适用于向量机 |
| 纵横处理 | 分组,组内纵向处理 | S+1次 | 2S+1次 | ✅ 适用于长向量 |
大白话理解: - 横向处理:一个元素从头算到尾,再算下一个元素,像“做完第1份套餐再做第2份套餐”。功能部件要频繁切换,不适合向量流水线。 - 纵向处理:先把所有元素的同一步都做完,再做下一步,像“先把所有菜都切完,再统一下锅”。最适合一条向量指令处理一整列数据。 - 纵横处理:向量太长一次装不下,就分几组;每组内部按纵向处理。像洗衣机容量有限,100件衣服分成几批洗,每批内部流程一样。
💡 小例子:若N=4,计算
4.2 向量处理机的结构
两种典型结构:
| 结构 | 对应处理方式 | 特点 | 典型机器 |
|---|---|---|---|
| 存储器-存储器 | 纵向处理 | 源和目的向量都在存储器,中间结果送回存储器 | STAR-100, CYBER-205 |
| 寄存器-寄存器 | 分组处理(纵横) | 设向量寄存器,快速访问 | CRAY-1, YH-1 |
CRAY-1特点(考点): - 12条可并行工作的单功能流水线 - 8个向量寄存器V0~V7,每个含64个64位寄存器 - 向量长度寄存器VL:控制本次向量指令实际处理的元素个数 - 向量屏蔽寄存器VM:控制哪些元素参与运算,常用于条件向量操作 - Vi冲突:并行指令使用相同Vi - 功能部件冲突:并行指令使用相同功能部件
大白话+例子: -
VL像“本次实际处理多少个元素”的计数器。即使V0最多能装64个元素,VL=10时也只处理前10个。
- VM像“打勾名单”。VM某一位为0,对应元素就跳过,适合处理
if (A[i] > 0) B[i]=A[i] 这类条件操作。 -
Vi冲突就是两条并行指令抢同一个向量寄存器,例如一条要写V2,另一条也要读/写V2,就可能打架。
-
功能部件冲突就是两条并行指令都要用同一个加法流水线,但硬件只有一个加法部件。
4.3 链接技术(★重点)
链接技术:具有先写后读相关的两条指令,在不出现功能部件冲突和源向量冲突的情况下,可以把功能部件链接起来进行流水处理。
本质:把流水线定向思想引入到向量执行过程。
💡 例4.1:在Cray-1上链接执行: 1
2
3
4V0 ← 存储器 // 访存:7拍
V2 ← V0 + V1 // 向量加:3拍
V3 ← V2 < A3 // 左移:4拍
V5 ← V3 ∧ V4 // 与操作:2拍
为什么是“通过时间 + 向量长度 - 1”:
通过时间表示第1个元素从第一条流水线入口走到最后一条流水线出口所需的时间。向量流水线启动后,通常每拍输入一个新元素、每拍输出一个新结果。因此:
- 第1个结果:等完整通过时间,需24拍。
- 第2个结果:比第1个晚1拍。
- 第64个结果:比第1个晚63拍。
所以全部结果时间为
注意:课件例4.1按“存储到读功能部件传送1拍”计,得到24/87拍;部分作业参考答案把该传送记为0拍,可能得到23/86拍。考试做题时以题目给定口径为准。
链接条件: 1. 前后指令存在先写后读关系 2. 无向量寄存器冲突和无功能部件冲突 3. 前一条指令的第一个结果元素送入结果向量寄存器时才能链接 4. 若后一条指令的两个源操作数来自两条先行指令,则两条先行指令产生首结果的时间必须相等 5. 向量长度必须相等
大白话:链接就是“上一道工序刚做出第1个半成品,下一道工序马上接过去加工”,不用等整批64个元素全做完。它能快,是因为多条向量流水线像生产线一样首尾相接。
💡 例子:做 V2=V0+V1 后接
V3=V2*V4。不链接时,要等64个加法结果都写完V2,乘法才开始;链接时,第1个加法结果刚出来,乘法部件就可以处理第1个元素,同时加法部件继续处理第2个元素。
什么时候不能链接:
- 两条指令没有先写后读关系,只是彼此独立:这时谈不上“接流水”,应该考虑能否放在同一编队。
- 两条指令抢同一个功能部件:比如两条都要用同一个加法流水线,硬件只有一套,就不能链接。
- 发生向量寄存器冲突:后一条指令需要的源/目的寄存器被其他未完成指令占用。
- 两个源操作数来自两条不同先行指令,但两个首结果出来时间不同:后一条双源指令没法稳定地每拍接到一对匹配元素。
链接题判题流程:
- 先找 RAW:后一条是否要用前一条的结果向量?
- 再查资源:功能部件是否不同、向量寄存器是否不冲突?
- 再看时间:若后一条有两个先行源,两个首元素是否同拍到达?
- 最后算时间:能链接时按“通过时间 + 向量长度 - 1”;不能链接时按多个编队/多条向量指令分别启动。
4.4 向量指令编队技术
编队(convoy):把能够重叠执行的向量指令放在同一组。处理完一个编队,再进入下一个编队。
注意:同一编队不等于所有指令在同一拍启动。存在数据依赖时,后一条指令可以等前一条产生第一个元素后,通过链接开始工作。
怎么判断能否放进同一编队
依次检查:
- 是否抢功能部件:两条指令都要使用唯一的取数部件或加法部件,就必须分队。
- 是否有寄存器冲突:若读写同一个向量寄存器会发生冲突,就必须分队。
- 有数据依赖时能否链接:能链接就可重叠执行;不能链接就必须分队。
一句话:资源不冲突,数据接得上,就能放在同一编队。
具体例子:
对应的向量指令为:
1 | ① LV V1, X // 把向量X装入V1 |
假设机器只有一个访存部件,并允许链接,编队结果为:
1 | 编队1:[① 取X → ② 乘a] |
原因:
- ①产生第一个
X元素后,②就能立刻开始乘,因此①②可以链接。 - ③产生第一个
Y元素后,④可将它与②已经产生的乘积相加,因此③④可以链接。 - ①和③都使用同一个取数部件,不能放在同一编队。
- ⑤也使用访存部件,而且要等④产生结果,因此单独放在编队3。
以第一个元素为例,实际流动过程是:
1 | 读出X[0] → 计算a×X[0] |
后面的元素紧跟着进入流水线,所以不必等整个向量算完才开始下一步。
若启动时间分别为取数12拍、乘法7拍、加法6拍、存数12拍,则:
这里共有 3个编队。计算总时间时,稳定处理部分为
4.5 性能评价参数
(峰值性能):向量长度无穷大时的最高性能 (半性能向量长度):性能达到一半时所需的向量长度 (向量长度临界值):向量方式优于标量方式的最小向量长度 - 循环开采(Strip Mining):当实际向量长度超过最大向量长度MVL时,把长向量分成若干段,每段长度不超过MVL,逐段执行。
大白话:向量机一开始要付“启动成本”,比如流水线要装入。向量越长,这个启动成本被越多元素平摊,平均性能越接近峰值。
💡 例子:出租车起步价10元,坐1公里很贵,坐20公里平均每公里就便宜。向量启动开销也类似:短向量时启动成本占比大;长向量时每个元素分摊到的启动成本小。
:理想情况下“车一直满速跑”的最高速度。 :跑多长才能达到最高速度的一半;越小说明启动损失越小。 :向量方式什么时候开始比标量方式划算;如果数据太短,可能还不如普通标量算。 - 循环开采:车一次最多载64人,来了200人就分4趟载;最后一趟不满也要单独启动一次。
短向量为什么不划算:
假设一条向量加法启动要6拍,之后每拍出一个结果。长度为4时,总时间约为10拍,平均每个元素2.5拍;长度为100时,总时间约为106拍,平均每个元素约1.06拍。启动时间没有变,但被更多元素分摊了,所以长向量更接近峰值性能。
本章查漏补缺
需要背诵
- 向量处理方式:
- 横向:逐元素完成所有操作,相关多、切换多,不适合向量机。
- 纵向:按整列/整向量逐操作执行,适合向量机。
- 纵横:分组纵向处理,解决向量长度超过寄存器长度。
- Cray-1两类冲突:Vi寄存器冲突、功能部件冲突。
- VL/VM:VL控制处理长度,VM控制元素是否参加运算;二者常和分段开采、条件向量语句一起考概念。
- 链接条件:
- 前后指令存在先写后读关系。
- 无功能部件冲突、无源/结果向量寄存器冲突。
- 前一指令第一个结果元素进入结果寄存器时,后一指令才能开始链接。
- 若后一指令两个源来自两条先行指令,两条先行指令产生首结果时间必须相等。
- 参与链接的向量长度应相等。
重点掌握
- 一条向量指令时间:若用“通过时间”
表示第一对元素产生结果所需时间,则 ;课件常令 ,于是 。做题时要先看题目给的是“通过时间”还是“启动时间”。 - 一个编队时间:同编队多条指令并行,启动时间取其中最大值。
- 分段开采公式:
是编队数;链接后 往往减少。
分段开采公式怎么来:
当向量长度
每一段都要付出一次循环控制开销
进入稳定阶段后,每个元素要经过
例:
理解即可
- 典型向量机型号和峰值性能数字一般不需硬背,除非老师课堂明确强调。
本章习题
复习优先级:先掌握作业4.5至4.8,重点是链接通过时间、存储器结构冲突、两组向量表达式的流水执行和分段开采。DAXPY用于巩固同一种编队与分段公式。选择、判断题仅用于概念查漏。
概念自测(补充)
选择题
在Cray-1上,以下哪种情况不能进行链接? A. 相邻指令存在先写后读相关且无功能部件冲突 B. 两条指令使用不同的向量寄存器和不同的功能部件 C. 相邻指令存在先写后读相关,但功能部件冲突 D. 两条先行的指令结果产生时间相等
向量处理机的纵向处理方式相比于横向处理方式,主要优势是: A. 数据相关次数和功能切换次数少 B. 不需要向量寄存器 C. 向量长度不受限制 D. 硬件实现更简单
半性能向量长度 n1/2 反映了什么? A. 向量处理机的最大性能 B. 向量流水线建立时间对性能的影响 C. 向量寄存器的长度 D. 存储器的访问带宽
判断题
- ( )Cray-1是存储器-存储器结构的向量处理机。
- ( )链接技术中,两条先行的指令产生运算结果的时间必须相等才能链接。
- ( )分段开采技术中,向量长度必须小于等于向量寄存器长度。
重点计算
1. 作业4.5原题:链接流水线通过时间
在Cray-1上按链接方式执行以下4条向量指令: 1
2
3
4V0 ← 存储器 // 访存:7拍
V2 ← V0 + V1 // 向量加:3拍
V3 ← V2 < A3 // 左移:4拍(注意:与课本例题中左移时间不同,此处改为4拍)
V5 ← V3 ∧ V4 // 逻辑乘:2拍
2. 补充同型题:DAXPY编队与分段开采
在某向量处理机上执行 DAXPY 运算
本章习题答案
选择题讲解
- C。 链接要求前后向量指令虽然有先写后读关系,但不能有功能部件冲突、向量寄存器冲突等其他冲突;若功能部件冲突,就不能把两条流水线顺利接起来。
- A。 纵向处理按整向量完成一个操作后再做下一个操作,数据相关次数和功能切换次数远少于逐元素横向处理,因此更适合向量流水线。
- B。 半性能向量长度
表示性能达到峰值性能一半所需的向量长度,反映启动开销/流水线建立时间对短向量性能的影响。
判断题讲解
- 错。 Cray-1采用的是寄存器-寄存器型向量结构:向量运算的操作数和结果主要放在向量寄存器中。存储器-存储器型向量机则直接以存储器中的向量为输入和输出。
- 对。 这里指后一条指令的两个源操作数分别来自两条先行向量指令的双源链接情形。后一条指令必须等两个首结果都到达;若两条先行指令产生首结果的时间不同,就不能在同一时刻把两个元素配对送入后继功能部件。
- 错。 分段开采正是为了解决总向量长度大于最大向量长度
的情况。要求的是每一段长度不超过 ,而不是整个向量长度必须不超过 。
- 计算题:第1题通过时间23拍,总时间86拍;第2题编队为
[LV X, MULT]、[LV Y, ADD]、[SV],。
课后题答案
4.5
按参考答案口径,存储到读功能部件传送时间记为0:
向量长度64:
注意:题面写左移5拍,但参考答案实际按4拍计算;考试按老师给的参考口径写23拍。
4.6
这题参考答案说明“不够严谨”,常见三种结果都可接受:
- 若全部按可链接并计最后一次寄存器到存储器输出:
,全部结果 拍。 - 若最后寄存器向存储器输出时间记0:
,全部结果 拍。 - 若认为第1条取存储器与第5条存存储器有结构冲突,不能全部链接:前4条
,总时间 拍。这一种最符合“只有一个存储器部件”的原则。
4.7
的链接通过时间: 拍。 - 两组表达式串成流水处理时:
拍。 - 时钟周期50ns,总时间
。 - 浮点吞吐率:
。
4.8
指令序列可写为
LV B、MULTSV、SV A,
4.9-4.10
参考答案PDF中只有题号页,未给出可抽取的题面和解答。若老师另发过题面,需要单独补;当前文件夹材料无法确认标准答案。
如果您喜欢我的文章,可以考虑打赏以支持我继续创作.