第6章 向量处理机 包仲贤 兰州兰州理工大学计算机与通信学院 2019年2月16日星期六 计算机系统结构 第六章 向量处理机
6.1 向量数据表示方式 6.2 向量处理机的结构 6.3 向量处理方式 6.4 向量处理机的关键技术 6.5 向量处理机实例 第6章 向量处理机 6.1 向量数据表示方式 6.2 向量处理机的结构 6.3 向量处理方式 6.4 向量处理机的关键技术 6.5 向量处理机实例
具有向量数据表示和向量指令系统的处理机 向量处理机是解决数值计算问题的一种高性能计算机 向量处理机属大型或巨型机,也可以用微机加一台向量协处理器组成 向量处理机一般都采用流水线结构,通常有有多条并行工作的流水线 必须把要解决的问题转化为向量运算,才能发挥向量处理机的效率
6.1 向量数据表示方式 6.1.1 从标量到向量 6.1.2 等间距向量表示法 6.1.3 带位移量的向量表示法 6.1.4 稀疏向量表示法
在标量处理机上用10多条指令,其中有8条指令要循环1000次。 采用多寄存器结构的两地址指令编写程序 存储器采用字节编址方式,字长为32位 6.1.1 从标量到向量 例6.1:一个简单的C语言程序如下: for (i = 10; i <= 1010; i++) c[i] = a[i] + b[i+5] ; 在向量处理机上, 可以只用一条指令: C(10:1010)=A(10:1010) + B(15 :1015) 一条向量指令可处理N个或N对操作数 在标量处理机上用10多条指令,其中有8条指令要循环1000次。 采用多寄存器结构的两地址指令编写程序 存储器采用字节编址方式,字长为32位
LOOP: LOAD R4,A(R3) ;读A向量的一个元素 在一般标量处理机中需要如下指令序列来实现(A、B、C分别是向量a、b、c在内存中的起始地址): START: LOAD R0, ST ;读循环初值10 LOAD R1, ED ;读循环终值1010 LOAD R2, L ;读内存地址增量4 MOVE R3, R2 MUL R3, R0 ;计算向量偏移量, ;初始值为40 LOOP: LOAD R4,A(R3) ;读A向量的一个元素
STORE R4, C(R3) ;写C向量的一个元素 ADD R3, R2 ;改变向量偏移量 INC R0 ;循环次数增1 LOAD R5, B(R3) ;读B向量的一个元素 ADD R4, R5 ;加一个元素 STORE R4, C(R3) ;写C向量的一个元素 ADD R3, R2 ;改变向量偏移量 INC R0 ;循环次数增1 CMP R0, R1 ;循环是否结束 BLE LOOP ;循环未结束转LOOP, ;否则继续 HALT ;停机 ST: 10 ;循环初值 ED: 1010 ;循环终值 L: 4 ;内存地址增量
6.1.2 等间距向量表示法 三个参数表示一个等间距向量: 向量起始地址:A 向量长度:L 向量间距:f
例如:我国研制的银河向量机,有8个向量寄存器V0~V7,每个向量寄存器由64个64位的寄存器组成,存储器字长64位,采用字节编址方式,则连续向量的间距为 f=8。向量指令采用三地址形式: 例如:Vi Vj OP Vk,向量长度(VL)= 50,则实际完成的运算是: V3,00~V3,49与V5,00~V5,49分别相加, 结果放在V1,00~V1,49中。
6.1.3 带位移量的向量表示法 用三个参数表示一个向量: 向量基地址:A 向量长度:L 向量位移量:f 向量有效长度:L-f 向量起始地址:A+f 优点:每个向量可以带有位移,能够通过控制向量实现可变增量。 能够表示稀疏向量。
带位移量的向量表示法
6.1.4 稀疏向量表示法 定义:0元素很多,非0元素很少的向量称为稀疏向量 采用压缩方法存储稀疏向量可以节省存储空间。 可以还原之后进行运算,也可以用压缩方法直接进行运算
存储器-存储器结构 多个独立的存储器模块并行工作 处理机结构简单 6.2 向量处理机的结构 主要采用两种方法: 存储器-存储器结构 多个独立的存储器模块并行工作 处理机结构简单 对存储系统的访问速度要求很高 寄存器-寄存器结构 运算通过向量寄存器进行 需要大量高速寄存器 对存储系统访问速度的要求降低
1. 存储器-存储器结构 向量处理机中有多个高速流水线运算部件, 存储器的访问速度是关键 采用多个存储体交叉和并行访问来提高存 储器速度 例如:CRAY-1有64个存储体,每个处理机访问4个存储体 STAR-100采用32个存储体交叉,每个存储体并行读出8个64位数据 我国研制的YH-1向量计算机有37个存储体
操作数缓冲栈 流水线 主存 储器 运算 部件 写结果缓冲栈 操作数缓冲栈和写结果缓冲栈主要用于解决访问存储器冲突。虽然采用质数个存储体能消除访问存储器的冲突,但是,数据经过多次运算之后,在存储体中分布必然发生改变 主要优缺点: 硬件结构简单, 造价低;速度相对较低 主存 储器 操作数缓冲栈 流水线 运算 部件 写结果缓冲栈
2. 寄存器-寄存器结构 把存储器-存储器结构中的缓冲栈改为向量 寄存器 运算部件需要的操作数从向量寄存器中读取, 运算的中间结果也写到向量寄存器中。 向量寄存器与标量寄存器的主要差别是: 一个向量寄存器能够保存一个向量, 连续访问一个向量的各个分量。 需要有标量寄存器和地址寄存器等。
采用寄存器-寄存器结构的主要优点: 降低主存储器的流量 例如:采用寄存器-寄存器结构的CRAY-1与采用存储器-存储器结构的STAR-100比较, 运算速度高3倍多, 而主存流量低2.5倍。
主存 储器 8MB 64个 个体 8个向量寄存器 8×64×64 12个 流水 线结 构的 运算 部件 缓冲寄存器 64×64 标量寄存器 8×64 缓冲寄存器 64×24 地址寄存器 8×24 指令缓冲寄存器 256×16 CRAY-1向量处理机结构
6.3 向量处理方式 有三种处理方式: 横向处理方式,又称为水平处理方式,横向加工方式等。向量计算是按行的方式从左至右横向地进行。 纵向处理方式,又称为垂直处理方式,纵向加工方式等。向量计算是按列的方式自上而下纵向地进行。 纵横处理方式,又称为分组处理方式,纵横向加工方式等。横向处理和纵向处理相结合的方式。
要根据向量运算的特点和向量处理机的类型选择向量的处理方式。 以一个简单的C语言编写的程序为例,说明向量的三种处理方式的工作原理。 for (i = 1;i <= n;i++) y[i] = a[i] ×( b[i] + c[i] );
1. 横向处理方式 也称为水平处理方式,横向加工方式等 逐个分量进行处理:假设中间结果为T(I) 计算第1个分量: T(1) =B(1)+C(1) Y(1) =A(1)×T(1) 计算第2个分量: T(2) =B(2)+C(2) Y(2) =A(2)×T(2) …… 计算最后一个分量: T(N) =B(N)+C(N) Y(N)=A(N)×T(N)
存在两个问题: 在计算向量的每个分量时,都发生写读数据相关。流水线效率低 如果采用多功能流水线,必须频繁进行流水线切换 横向处理方式对向量处理机不适合 即使在标量处理机中,也经常通过编译器进行指令流调度。
2. 纵向处理方式 也称为垂直处理方式,纵向加工方式等 T(1) = B(1) + C(1) T(2) = B(2) + C(2) …… T(n) = B(n) + C(n) Y(1) = A(1)×T(1) Y(2) = A(2)×T(2) …… Y(N) = A(N) ×T(N)
采用向量指令只需要2条: VADD B, C, T VMUL A, T, Y 这种处理方式适用于向量处理机 数据相关不影响流水线连续工作。 不同的运算操作只需要切换1次。 这种处理方式适用于存储器-存储器结构
3. 纵横处理方式 用于寄存器-寄存器结构的向量处理机中,向量寄存器的长度是有限的。 当向量长度N大于向量寄存器长度n时,需要分组处理。 分组方法:N=K·n+r 其中:r为余数, 共分K+1组。 组内采用纵向处理方式,组间采用横向处理方式。因此,也称为分组处理方式,纵横向 加工方式等。
运算过程为: 第1组:. T(1, n) = B(1, n) + C(1, n) 运算过程为: 第1组: T(1, n) = B(1, n) + C(1, n) Y(1, n) = A(1, n)×T(1, n) 第2组: T(n+1, 2n) = B(n+1, 2n)+C(n+1, 2n) Y(n+1, 2n) = A(n+1, 2n)×T(n+1, 2n) …… 最后第k+1组: T(kn+1, N) = B(kn+1, N) + C(kn+1, N) Y(kn+1, N) = A(kn+1, N) + T(kn+1, N)
每组用两条向量指令, 每组发生相关两次, 其中组内发生数据相关一次, 组间切换时发生相关一次。 主要优点: 减少访问主存储器的次数 例如:中间变量T不写入主存储器
6.4 向量处理机的关键技术 6.4.1 向量与标量性能的平衡 实际的应用问题中通常既有向量计算又有标 量计算,而且两类计算有一定的比例 向量平衡点(vector balance point):为了使向 量硬件设备和标量硬件设备的利用率相等, 一个程序中向量代码所占的百分比。 关键问题是:希望向量硬件和标量硬件都能 够充分利用,不要空闲。
例如:一个系统的向量运算速度为90Mfolps, 是向量运算,10%是标量运算。则向量平衡 点为0.9。硬件利用率最高。 向量处理机的向量平衡点必须与用户程序的 向量化程度相匹配。 IBM向量计算机的设计思想与上述方法不同, 它维持较低的向量与标量比例,定在3~5的 范围之间。这种做法能够适应通用应用问题 对标量和向量处理要求。
几种超级计算机的向量性能和标量性能 机器型号 向量性能 Mflops 标量性能 Mflops 向量平衡点 Cray IS 85.0 9.8 0.90 Cray 2S 151.5 11.2 0.93 Cray X-MP 143.3 13.1 0.92 Cray Y-MP 201.6 17.0 0.92 Hitachi S820 737.3 17.8 0.98 NEC SX2 424.2 9.5 0.98 Fujitsu VP400 207.1 6.6 0.97
6.4.2 向量链接技术 向量指令的类型 以CRAY-1向量处理机为例, 有四类指令,两种指令格式: (1) 向量与向量操作:ViVj OP Vk (2) 向量与标量操作:Vi Sj OP Vk (3) 向量取:Vi存储器 (4) 向量存:存储器 Vi
一种向量处理机的指令格式
V0 V1+V2 V0 V1+V2 V3 V4 × V5 V3 V0 × V4 (a)不相关的指令 (b)写读数据相关 向量运算中的相关和冲突 向量运算中的数据相关和功能部件冲突: 采用顺序发射顺序完成方式 (1)写读数据相关。 (2)读读数据相关,或向量寄存器冲突。 (3)运算部件冲突。 V0 V1+V2 V0 V1+V2 V3 V4 × V5 V3 V0 × V4 (a)不相关的指令 (b)写读数据相关
当前一条指令的结果寄存器可以作为后继指令的操作数寄存器时,多条有数据相关的向量指令并行执行,这种技术称为两条流水线的链接技术。 V0 V1+V2 V0 V1+V2 V3 V4+V5 V3 V1 × V4 (c)功能部件冲突 (d)读读数据相关 向量链接技术(chaining) 当前一条指令的结果寄存器可以作为后继指令的操作数寄存器时,多条有数据相关的向量指令并行执行,这种技术称为两条流水线的链接技术。
例如:有如下3条向量指令: 1: V3 A 2: V2 V0+V1 3: V4 V2×V3 第1、2条指令没有数据相关和功能部件冲突,可以同时开始执行。 第3条指令与第1、2条指令均存在写读数据相关,可以链接执行。
浮点加 1 2 3 4 5 6 浮点乘 1 2 3 4 5 6 7 Mem V0 V1 V2 V3 V4 1 2 3 4 5 6
执行的时间为: [(1+6+1)+N-1]+[(1+6+1)+N-1]+[(1+7+1)+N-1] = 3N+22 拍 三种执行方式比较: (1) 如果向量长度为N,三条指令采用串行方法 执行的时间为: [(1+6+1)+N-1]+[(1+6+1)+N-1]+[(1+7+1)+N-1] = 3N+22 拍 (2) 如果前两条指令并行执行,第三条指令串行 执行,则执行时间为: [(1+6+1)+N-1]+[(1+7+1)+N-1] = 2N+15 拍 (3) 如果采用链接技术,则执行时间为: (1+6+1)+(1+7+1)+(N-1)=17+N-1 = N+16 拍
实现链接的条件: (1)没有向量寄存器冲突和运算部件冲突。 (2)只有第一个结果送入向量寄存器的那一个 周期可以链接。 (3)先行的两条指令产生运算结果的时间必须 相等。 (4)两条向量指令的向量长度必须相等。
6.4.3 向量循环开采技术 当向量的长度大于向量寄存器的长度时,必须把长向量分成长度固定的段,采用循环结构处理这个长向量,这种技术称为向量循环开采技术,也称为向量分段开采技术。 例6.2:A和B为长度N的向量。 for (i=1; i<N; i++) a[i]=5*b(i)+c; 当向量长度N为64或更小时,计算A数组的7条指令序列是:
1:S15.0 在标量寄存器内设置常数 2:S2C 将常数C装入标量寄存器 3:VLN 在VL寄存器内设置向量长度 4:VoB 将B向量读入向量寄存器 5:V1S1 Vo B数组的每个分量乘常数 6:V2S2+V1 C和5 B(x)相加 7:AV2 将结果向量存入A数组 当N超过64时,要采用向量循环开采技术。 在进入循环前,把N除以64,确定循环次数。 如果有余数,则在第一次循环中首先计算。
第4条到第7条指令组成循环 1:S15.0 在标量寄存器内设置常数 2:S2C 将常数C装入标量寄存器 3:VLN 在VL寄存器内设置向量长度 for (i=0; i>=N/64; i++) { 4:VoB 将B向量读入向量寄存器 5:V1S1 Vo B数组的每个分量乘常数 6:V2S2+V1 C和5 B(x)相加 7:AV2 将结果向量存入A数组 }
6.4.4 向量递归技术 向量指令一般为3地址,但递归运算用两地址。 用递归向量技术求和: V0V0+V1 C0和C1分别是与向量寄存器V0和V1相关的分量计数器。初始时,计数器C0和C1都置成0,V00中的初始值也置成0。 浮点加法流水线的延迟时间为8个周期。 假定向量长度为64,只作一个向量循环。 在开始的8个周期,计数器C0一直为0,在此之后,每个周期期加1。C1每个周期加1。
第1次加法 第2次加法 第8次加法 V00=V00+V10=0+V10 V01=V00+V11=0+V11 …… V056=V048+V156=V10+V18+V116+V124+V132+V140+V148+V156 V063=V055+V163=V17+V115+V123+V131+V139+V147+V155+V163 经过8次运算,得到8个结果,分别是8个数的和 第1次加法 第2次加法 第8次加法
6.5 向量处理机实例 6.5.1 典型向量处理机 6.5.2 CRAY Y-MP向量处理机 6.5.3 向量协处理器
6.5.1 典型的向量处理机 向量处理机主要出自美国和日本。 美国著名的向量计算机公司有: CRAY CDC TI等 日本公司有: NEC Fujitsu Hitachi等
典型向量处理机 美国和日本制造的向量处理机 机器型号 配置 特点 Cray IS 有10条流水线的 单处理机,12.5 ns,COS/CF7 2.1 第一台基于ECL 的超级计算机, 1976年问世 Cray 2S/4-256 256M字存储器 的4台处理机, 4.lns, COS或 UNIX/CF77 3.0 16K字的本地存 储器,移植了 UNIXV, 1985问世
机器型号 配置 特点 Cray X-MP 416 16M字存储器的 4台处理机,128 M字SSD, 8.5ns, COS CF77 5.0 使用共享寄存器 组用于IPC, 1983年问世 Cray Y-MP 832 128M字存储器的 8台处理机, 6ns, CF77 5.0 X-MP的改进 型, 1988年问世 Cray Y-MP C-90 每台处理机2条 向量流水线, 16 台处理机, 4.2ns, Unicos/CF77 5.0 最大的Cray机器 1991年问世
机器型号 配置 特点 CDC Cyber 205 有4条流水线的 单处理机, 20ns, 虚拟OS/FTN200 存储器到存储器 系统结构, 1982年问世 ETA 10E 单处理机, 10.5ns, ETAV/FTN 200 Cyber 205的后 继型号, 1985年问世 NEC SX-X/44 每台处理机4组 流水线, 4台处理 机, 2.9ns, F77SX, 22Gflops 1991年问世
5条流水线的单 处理机和双标量 处理机, 3.2ns, MSP. EX /F77 EX/VP 机器型号 配置 特点 Fujitsu VP2600/10 5条流水线的单 处理机和双标量 处理机, 3.2ns, MSP. EX /F77 EX/VP 使用可重构微 向量寄存器和 屏蔽, 1991年问世 Hitachi 820/80 512MB存储器, 18条流水线的单 处理机,4ns, FORT77/HAP V23-OC 64个通道,最大 传输速率 288MB/S, 1988年问世
6.5.2 CRAY Y-MP向量处理机 由1至8个处理机组成,共享中央存储器、I/O子系统、处理机通信子系统和实时钟。 中央存储器由256个交叉访问的存储体组成。每个处理机对4个存储器端口交叉访问。 CPU的时钟周期为6ns。 每个CPU由14个功能部件组成,分为向量、标量、地址和控制四个子系统。 使用了大量地址寄存器、标量寄存器、向量寄存器、中间寄存器和临时寄存器。 可以实现功能流水线灵活的链接。 I/O子系统支持三类通道,传输速率分别为6兆字节/秒,100兆字节/秒和1G字节/秒。
6.5.3 向量协处理器 以中小型机或微机作主机,向量处理部件作为外围设备,加速向量的处理速度。 向量协处理器是为中小型用户设计的,解决科学计算中大量向量处理任务的一种装置。 FPS-164是最典型的向量协处理器,美国浮点系统公司生产。每个向量处理器有两个乘加部件,两组向量寄存器,两组标量寄存器。向量寄存器有2组4个2K个操作数,每个操作数4个字节。 各向量处理器同步地运算,但它们处理的数据各不相同。 向量操作可以和标量处理器中的标量操作同时进行
FPS-164向量协处理器的结构
本章重点: 1.向量的表示方法 2.向量运算中的相关性与向量链接技术 3.向量循环和递归技术