向量处理器
一、向量处理基础概念
1. 向量定义与需求
- 向量:由一组有序、同类型、同位数的元素组成(如科学计算中的数组)。
- 应用领域:科学计算、图像处理、人工智能(如矩阵运算、神经网络)。
- 标量处理机瓶颈:仅处理单个数据,性能受限于指令级并行(ILP)挖掘难度(如循环开销、流水线冲突)。
$$ \text{标量代码示例:} \\ \begin{array}{l} \text{loop:} \\ \quad \text{LD F0, a} \\ \quad \text{LD F2, 0(Rx)} \quad \text{// 取A[i]} \\ \quad \text{MULTD F2, F0, F2} \quad \text{// a*A[i]} \\ \quad \ldots \\ \end{array}\\ \text{执行578条指令(N=64)} $$
2. 并行类型
| 并行类型 | 说明 | 硬件实现 |
|---|---|---|
| 指令级并行 (ILP) | 单指令流中多指令并行执行(如超标量、VLIW) | Tomasulo算法、乱序执行 |
| 数据级并行 (DP) | 对数组元素执行相同操作(单指令多数据) | 向量架构、SIMD扩展(SSE)、GPU、TPU |
| 线程级并行 (TLP) | 多指令流并行执行(如多核、多线程) | 多处理机系统 |
关键点:NEC SX-4 同时支持 ILP、TLP 和 DP。
二、向量处理机核心架构
1. 标量 vs 向量处理机
| 类型 | 数据表示 | 指令示例 | 性能对比 |
|---|---|---|---|
| 标量处理机 | 仅标量数据 | ADD R1, R2 |
低效(需循环处理向量) |
| 向量处理机 | 标量+向量数据 | ADDV V1, V2, V3 |
高效(单指令处理N个元素) |
向量指令类型:
ADDV V1, V2, V3(向量+向量)ADDSV V1, F0, V2(标量+向量)LVWS V1, R1, R2(跨步载入,步长=R2)LVI V1, R1, V2(间接载入,gather操作)
2. 向量数据结构
| 表示方法 | 参数 | 适用场景 | 示例 |
|---|---|---|---|
| 等间距向量 | 起始地址A、长度L、间距f | 连续数据(银河机,f=8) | VADD V1, V3, V5(长度VL=50) |
| 带位移向量 | 基地址A、位移量f、长度L | 非连续数据(可变增量) | A=10000, L=12, f=4(有效长度8) |
| 稀疏向量 | 压缩存储+位掩码 | 含大量零元素的数据 | 位向量[0,0,1,0,1,0,0,1]标记非零位置 |
稀疏向量运算优化:直接对压缩向量操作(如
C4=A4+B4),避免解压开销。
3. 向量处理方式
| 方式 | 执行顺序 | 特点 | 适用架构 |
|---|---|---|---|
| 横向处理 | 按元素顺序(水平) | 频繁切换功能部件,效率低 | 标量机(不推荐) |
| 纵向处理 | 按操作步骤(垂直) | 减少功能部件切换,适合长向量 | 存储器-存储器结构 |
| 纵横处理 | 分组处理(纵向+横向) | 解决向量长度 > 寄存器长度问题 | 寄存器-寄存器结构 |
纵横处理示例(N=100, MVL=64):
- 分组:
k = ⌈100/64⌉ = 2(余数L=36) - 组内纵向执行:
$$ \begin{array}{l} \text{第1组:} \\ \quad T_{1-64} = B_{1-64} + C_{1-64} \\ \quad D_{1-64} = A_{1-64} \times T_{1-64} \\ \text{第2组(余数):} \\ \quad T_{65-100} = B_{65-100} + C_{65-100} \\ \quad D_{65-100} = A_{65-100} \times T_{65-100} \end{array} $$
三、向量处理机结构设计
1. 存储器-存储器结构
- 核心思想:操作数直接来自存储器,结果直接写回存储器。
- 带宽挑战:需每周期读2个操作数 + 写1个结果。
- 解决方案:
- 多体交叉存储器:例如8个存储体并行(低位交叉编址)。
- 缓冲技术:在流水线输入/输出端加可变延迟缓冲器(如Star-100)。
- 冲突避免:数据分布策略(例:A[i]存模块
(i mod 8))。
时序优化示例(8模块存储系统):
- 延迟配置:A延迟2周期,C延迟4周期 → 对齐操作数到达时间。
2. 寄存器-寄存器结构
- 核心思想:用向量寄存器作为中间存储,降低主存带宽压力。
- 代表机型:Cray-1(12条流水线,8个向量寄存器V0-V7,每个64元素)。
- 层级存储:
- 向量寄存器 (V):64元素/寄存器,用于向量运算。
- 标量寄存器 (S/T):高速标量中间存储(程序员管理)。
- 地址寄存器 (A/B):变址和循环控制。
Cray-1关键特性:
- 并行通道:每个V寄存器有独立总线到6个功能部件。
- 冲突类型:
- V_i冲突:并行指令使用相同向量寄存器(如
V3 ← V1+V2与V5 ← V4∧V1)。 - 功能部件冲突:多条指令竞争同一计算单元(如两条乘法指令)。
- V_i冲突:并行指令使用相同向量寄存器(如
四、性能提升技术
1. 链接技术 (Chaining)
- 原理:将先写后读相关的指令链接成流水线,减少启动延迟。
- 条件:无功能部件冲突 + 无向量寄存器冲突。
- 时序公式:
$$ T_{\text{link}} = T_{s} + T_{e} + (n-1)T_c \quad \text{(单指令)} \\ T_{\text{all}} = \sum_{i=1}^{m} (T_{\text{start}}^{(i)} + n) \quad \text{(多指令编队)} $$T_s:流水线建立时间;T_e:通过时间;T_c:时钟周期。
示例(Cray-1链接):
$$
\begin{array}{l}
V_0 \leftarrow \text{存储器} \quad (T_e=7) \\
V_2 \leftarrow V_0 + V_1 \quad (T_e=3) \\
V_3 \leftarrow V_2 \ll A_3 \quad (T_e=4) \\
V_5 \leftarrow V_3 \land V_4 \quad (T_e=2) \\
\end{array}
\text{通过时间} = 7+3+4+2 = 16 \text{拍}
$$
2. 分段开采 (Stripmining)
- 问题:向量长度
n> 向量寄存器长度MVL(如Cray-1的MVL=64)。 - 方法:将长向量分块,循环处理每块。
- 执行时间:
$$ T_{\text{all}} = \left\lceil \frac{n}{\text{MVL}} \right\rceil (T_{\text{loop}} + T_{\text{start}}) + m \cdot n $$T_loop:循环开销(固定15拍);m:编队数。
DAXPY示例(Y = a*X + Y, n=200, MVL=64):
- 分组:
k = ⌈200/64⌉ = 4块(最后余数40元素) - 编队数
m=3→T_all = 4×(15+31) + 3×200 = 784拍
3. 条件执行
- 掩码寄存器:1位/元素,控制是否执行操作。
- 示例:
1
2
3cvm ! 启用所有掩码
vgt vA, f0 ! 设置掩码(A[i]>0)
vld vA, xB, vm ! 仅在掩码位为1时载入B到A
五、性能评价指标
1. 单指令处理时间
$$ T_{\text{vp}} = T_s + T_e + (n-1)T_c $$
T_s:建立时间(如取指令)T_e:首元素通过时间(功能部件延迟)T_c:流水线时钟周期
2. 编队 (Convoy) 分析
- 编队定义:可并行执行的指令组(无冲突)。
- 总时间:
$$ T_{\text{all}} = \sum_{i=1}^{m} (T_{\text{start}}^{(i)} + n) \quad \text{(n} \leq \text{MVL)} $$
示例(5条指令分组):
| 编队 | 指令 | 冲突说明 |
|---|---|---|
| 编队1 | LV V1, Rx |
取数部件独占 |
| 编队2 | MULTSV V2,F0,V1 LV V3,Ry |
无冲突(不同功能部件) |
| 编队3 | ADDV V4,V2,V3 |
依赖前两条结果 |
| 编队4 | SV Ry, V4 |
存数部件独占 |
3. 关键指标
| 指标 | 定义 | 公式 |
|---|---|---|
| 峰值性能 $R_\infty$ | 向量长度→∞时的性能 | $R_\infty = \lim_{n\to\infty} \frac{\text{浮点操作数} \times f_c}{T}$ |
| 半性能长度 $n_{1/2}$ | 性能达峰值一半时的向量长度 | 解方程 $\frac{R_\infty}{2} = \frac{2n f_c}{T}$ |
| 临界长度 $n_v$ | 向量模式快于标量模式的最小长度 | $T_{\text{标量}} > T_{\text{向量}}$ |
计算示例(DAXPY,f_c=200MHz):
- $R_\infty = 100 \text{ MFLOPS}$ → $n_{1/2} = 13$
- $T_{\text{标量}} = 59n$, $T_{\text{向量}} = 64 + 3n$ → $n_v = 2$
六、实例分析
1. 经典向量机
| 机型 | 推出时间 | 特点 | 峰值性能 |
|---|---|---|---|
| Cray-1 | 1976 | 首台ECL超级计算机,12.5ns周期 | 100 MFLOPS |
| Cray Y-MP | 1988 | 8处理机,共享寄存器,6ns周期 | 2.67 GFLOPS |
| NEC SX-X/44 | 1991 | 4处理机,每机4组流水线,2.9ns周期 | 22 GFLOPS |
| 富岳 (Fugaku) | 2020 | Armv8+SVE指令集,7,630,848核 | 442 PetaFLOPS |
2. 现代应用
- GPU向量化:NVIDIA H100使用寄存器-寄存器结构,通过3D堆叠(X100)和系统级优化(网络+软件)实现差异化竞争力。
- 关键洞察:技术壁垒源于全价值链掌控(硬件+软件+生态),非单点突破。
向量处理器
https://blog.xiaoaojianghu.fun/posts/bf12c427.html