1 向量处理机相对标量处理机的优势
向量处理机的实质是用一条指令(向量指令)发起对整个向量中的所有元素的访存操作并流水化处理这些元素(因为他们需要进行的操作相同),从而减少指令获取和解码的带宽
对于向量A=[1,2,3]
用
A+A
代替循环
for i in len(A):
Ai+Ai
减少了很多显式指令的获取和解码,同时后者每次+都要访问一次主存得到向量的一个元素,而向量指令访存操作是为向量中的所有元素发起的,相对于访问 cache 而言更高的访问主存的延迟被均摊了
2 向量的处理方式和对应的处理机结构
对于只包含一个运算符的向量计算(如:A+B) 纵向和横向方式没有区别
对于包含多个运算符的向量计算(如:A*(B+C)) 纵向明显比横向有优势,如减少数据相关
例如计算 A*(B-C)
1 横向 - 在标量处理机中使用
//以元素为单位 整体计算A*(B-C)
for i in len(A):
bi-ci->qi
ai*qi->di
//每次循环都存在数据相关
2 纵向 - 在向量处理机中使用 存储器存储器结构
//先计算B-C(只有一个运算符,纵向和横向没区别,相当于以元素为单位整体计算B-C)
for i in len(B):
qi <-bi-ci
//再计算A*Q
for i in len(A):
ai*qi->di
-----表示成向量指令就是---------
B-C->Q
A*Q->D
//由于先算出整体q,避免了数据相关
3 纵横向 - 在向量处理机中使用 寄存器寄存器结构
int 分段数 =2;
for k in 分段数:
for m in len(B)/分段数:
i = m+k*len(B)/分段数
qi <-bi-ci
for n in len(A)/分段数:
i = n+k*len(B)/分段数
ai*qi->di
3 提高向量处理机性能的常用技术
- 设置多个功能部件
- 采用链接技术,加快一串指令的执行速度(实质相当于变纵向为横向)
- 循环开采(分段)
- 多处理机
链接使用条件:
- 没有功能部件冲突和寄存器冲突
- 链接只能发生在上一条指令的结果送入向量寄存器的那个周期
- 前向链接了好几个结果时,这些结果的送入寄存器的时刻必须相同