【并行与分布式计算】第四章数据级并行:向量体系结构和GPU

目录

SPMD运行在SISD(或MIMD)上

SIMD器件

向量体系结构和GPU

向量的计算方式

向量体系结构

向量体系结构的性能优化


SPMD运行在SISD(或MIMD)上

运行在SISD上:单核单线程,把MD拆为多个SD,串行执行。缺点:串行执行十分消耗时间。

运行在MIMD上:多核多线程,把SP的I重复多次,变为MIMD,并行执行。缺点:I重复时取指、译码等操作冗余,产生额外开销。

SIMD器件

更多的ALU(在一次流水能处理更多数据),

更少的Fetch和Decode(更少的器件,更低的能耗和时间开销)

更多的寄存器(一次存储更多数据,减少存储器访问延迟)

向量体系结构和GPU

向量体系结构:流水线深而ALU宽度窄,单次指令流水后可以处理更多数据,掩盖不必要的流水时间。

GPU:流水线比较简单,直接对更多数据进行并行计算,同一时刻处理更多数据。

向量的计算方式

e.g.

计算D=A*(B+C),其中A,B,C均为N维向量

横向计算:无法写成向量指令,数据相关N次,功能切换2N次

纵向计算:可以写成向量指令K=B+C,D=A*K,数据相关1次,功能切换1次

纵横分组计算:N为向量长度,S为组数,n为每组的长度,r为余数;N=S*n+r,一共需要S+1组。每组中数据相关1次,功能切换2次,总共的数据相关为S+1次,功能切换为2(S+1)次。

向量体系结构

特点:(1)向量体系结构应当具有很大的顺序寄存器堆 ,可加载更多向量元素以支持纵向计算(2) 向量体系结构从内存中收集散落的数据,将其放入寄存器堆中,并对寄存器堆中的数据们进行操作,然后将这些结果放回内存(一次传输一组数据,LD/ST流水化) (3)一条指令能够对一个向量的数据进行操作,也就对向量中诸多独立数据元素进行了操作(纵向计算,功能单元流水化)

相关概念循环间相关--对一个循环来说,如果各轮迭代之间存在相关性,则称为循环间相关,否则为循环间无关;可向量化--针对一组Mips指令描述的循环,如果满足循环间无关,则循环称为可向量化的,编译器可为其生成向量指令;指令编队--由一组不包含结构冒险的向量指令组成,一个编队中的所有向量指令在硬件条件允许时可以并行执行。

向量体系结构的性能优化

多车道技术:增加功能单元(ALU)的数量提升向量的计算速度。

链接技术:当两条指令出现“写后读”相关时,若它们不存在功能部件冲突和向量寄存器(源或目的) 冲突,就有可能把它们所用的功能部件头尾相接,形成一个链接(长)流水线,进行流水处理。

编队技术:只要不是前后具有相关性的就可以编到同一个编队里。

分段开采技术:当向量的长度N大于向量寄存器的长度n时,必须把长向量N分成长度固定为n的段,然后循环分段处理,每一次循环只处理一个向量段。

你可能感兴趣的:(并行与分布式计算,大数据)