# 第四章:向量处理机

标量处理机:指只有标量数据表示和标量指令系统的处理机
向量处理机:同时具有标量数据表示和向量数据表示,以及标量指令系统与向量指令系统的处理机

# 4.1 向量处理方式

向量指令集的优点:精简表示能力强可扩展
向量平衡点:为了使向量硬件设备和标量硬件设备利用率相等,一个程序中向量代码所占的百分比(与运算速度比相符);必须与用户程序的向量化程度相匹配
向量数据表示方式:

  1. 等间距向量表示法: A+(L-1)f ,f 是间距
  2. 带位移量的向量表示法:每个向量可以带有位移 f,通过控制向量实现可变增量;能够表示稀疏向量
  3. 稀疏向量表示法:通过压缩存储 + 压缩位向量表示
    向量处理方式: D[i] = A[i] * (B[i] + C[i])
  4. 横向处理方式:按行的方式逐个分量进行处理,每次 T(1)=B(1)+C(1); D(1)=A(1)×T(1) ,存在大量数据相关,不适合向量处理机
  5. 纵向处理方式:按列的方式逐个分量进行处理,先算完 T(1)=B(1)+C(1) ,后 D(1)=A(1)×T(1) ,适合向量处理机实现
  6. 纵横向处理方式,分级按列的方式逐个分量进行处理;组内采用纵向处理方式,组间采用横向处理方式

# 4.2 向量处理机的结构

系统结构设计者所面临的主要问题是如何设计出一个能满足运算器带宽要求的存储器系统,从而能够维持连续的数据流:

  1. 存储器 - 存储器型结构纵向处理方式采用,利用几个独立的存储器模块来支持两对独立的数据并发访问
    运算部件的输入和输出端都直接(或经过缓冲器)与存储器相联,运算的中间结果也送回存储器;
    由 8 个三端口存储器组成的存储器系统的,1 个存储周期占 2 个处理机周期,则满足流水线所需的带宽至少是单个存储器模块的 6 倍(同个时钟周期有 4 个读两个写操作),A 和 B 向量错开两位存储
    访问冲突问题:采用交叉访问方式,一个由 n 个存储体构成的主存储器,它的速度实际上并不能提高 n 倍,其根本原因是存在有访问冲突
    解决方案:对一维数组,把存储体的个数 n 选为质数;对二维数组,错位存储
    在运算流水线的输入端和输出端增加操作数可变缓冲器和写结果可变缓冲器,以缓解争用存储器的现象
  2. 寄存器-寄存器结构:分组处理方式采用,构造一个具有所要求带宽的高速寄存器,实现高速寄存器与主寄存器之间的快速数据交换
    把存储器 - 存储器结构中的缓冲改为向量寄存器,运算部件需要的操作数从向量寄存器中读取,运算的中间结果也写回向量寄存器
    CLAY-1 结构:把存储器 - 存储器结构中的缓冲改为向量寄存器,运算部件需要的操作数从向量寄存器中读取,运算的中间结果也写回向量寄存器

    S/A 寄存器快于 T/B 寄存器,没有一个流水功能部件直接与主存相连;每个向量寄存器 Vi 都有连到 6 个向量功能部件的单独总线

# 4.3 提高向量处理机性能的常用技术

  1. 设置多个功能部件,使它们并行工作;
  2. 采用链接技术,加快一串向量指令的执行,解决向量流水线冲突;
    两条向量指令占用功能流水线和向量寄存器的四种情况:指令不相关功能部件冲突源寄存器冲突结果寄存器冲突
    具有先写后读相关的两条指令,可以把功能部件链接起来进行流水处理,结果寄存器作为后继指令的操作数寄存器,把流水线定向的思想引入到向量执行过程的结果

    其中,把向量数据元素送往向量功能部件以及把结果存入向量寄存器都需要一拍时间 (c, d, f, g, i, j, l),从存储器中把数据送入访存功能部件也需要一拍时间 (a),通过时间 + 完成时间
    一条指令如果链接,两个操作数所依赖的先行的两条指令产生运算结果的时间必须相等,即要求有关功能部件的通过时间相等
  3. 向量的长度大于向量寄存器的长度时,使用分段开采技术
  4. 需要条件执行,设置屏蔽向量( vgt vA, f0 设置向量 A 大于零的位),只执行非屏蔽操作
  5. 采用多处理机系统

# 4.4 向量处理机的性能评价

  • 一条向量指令的处理时间 Tvp=Ts+Te+(n1)TcT_{vp}=T_{s}+T_e+(n-1)T_cTsT_s 建立时间,TeT_e 第一对元素通过时间,TcT_c 时钟周期时间)
    不考虑TsT_s,令Tstart=e1T_{start}=e-1,即从一条向量指令开始执行到还差一个时钟周期就产生第一个结果所需的时钟周期数,可称之为该向量指令启动时间,Tvp=(Tstart+n)TcT_{vp}=(T_{start}+n)T_c
    把能在同一个时钟周期内一起开始执行的几条向量指令称为一个编队,同一个编队指令之间一定不存在流水向量功能部件的冲突和数据的冲突,向量指令序列的总的执行时间为各编队的执行时间的和(如果可以链接,则要考虑一个编队中的向量链接)
    Tstart=Σi=1mTstartiT_{start}=\Sigma_{i=1}^{m} T_{start}^{i},为所有组总的启动时间,则Tall=(Tstart+mn)TcT_{all}=(T_{start}+mn)T_cmm 为编队数
    分段开采时,设向量长度nn,向量寄存器长度MVLMVL,引入额外的处理操作TloopT_{loop}[nMVL]=p[\frac{n}{MVL}]=p,余数为qq,则Tall=p×(Tstart+Tloop)+mnT_{all}= p \times (T_{start}+T_{loop}) + mn
    基准时间Tchime=Tallmn1T_{chime}=\frac{T_{all}}{mn} \approx 1,已知基准时间可以近似得到\frac{T_{all}}
  • 向量处理机的峰值性能RR_∞,表示当向量长度为无穷大时,向量处理机的最高性能

    R=limn向量指令序列中浮点运算次数×时钟频率向量指令序列执行所需的时钟周期数R_∞=\lim_{n→∞}\frac{向量指令序列中浮点运算次数\times时钟频率}{向量指令序列执行所需的时钟周期数}

  • 半性能向量长度n1/2n_{1/2},指向量处理机的性能为其最大性能(RR_∞)的一半时所需的向量长度
  • 向量长度临界值nvn_v,向量方式的处理速度优于标量串行方式处理速度时所需的最小向量长度