向量指令的类型有哪些?
向量是一组标量数据元素的集合,所有元素类型相似,存储在内存中。向量元素是有序的,相邻元素之间具有固定的地址增量,称为步长。
向量处理器是一组硬件资源的集合,例如向量寄存器、功能流水线、处理单元和寄存器计数器,用于执行向量运算。
当算术或逻辑运算用于向量时,就会出现向量处理。它与标量处理不同,标量处理操作一个或一对数据。从标量代码到向量代码的转换称为向量化。
向量指令的类型
存在各种类型的向量指令,如下所示:
**向量-向量指令** - 从指定的向量寄存器中提取一个或两个向量操作数,通过功能流水线单元引入,并将结果存储到另一个向量寄存器中。这些指令由以下两个映射定义:
f1 : vi → vj
f2: vj x vk → vi
**示例** - $V\:=\sin(v_{2})$ 和 v3 = v1 + v2 分别对应映射 f1 和 f2,其中对于 i = 1, 2, 3,V 为向量寄存器。
**向量-标量指令** - 如图所示,它显示了一个向量-标量指令,对应于以下映射:
f3: s x vi → vj
一个例子是标量积 s x v1 = v2,其中 V 的元素分别乘以标量 s 以产生长度相等的向量 v2。
**向量-内存指令** - 这对应于向量加载或向量存储元素,在向量寄存器 (V) 和内存 (M) 之间,如下所示:
f4: M → V 向量加载
f5: V → M 向量存储
**向量归约指令** - 这些指令对应于以下映射:
f6: vi → sj
f7: vi x vj → sk
**收集和散射指令** - 这些指令使用两个向量寄存器来随机收集或散射内存中的向量元素,对应于以下映射:
a: M → v1 x v0 收集
fa: v1 x v0 → M 散射
**收集**是一种操作,它使用自身被索引的索引来从内存中获取稀疏向量的非零元素。
**散射**则相反,将向量存储到稀疏向量中,其非零项被索引。向量寄存器包含数据,向量寄存器用作索引,分别从随机内存位置收集或散射数据。
**掩码指令** - 在掩码指令中,它使用掩码向量来分别将向量包装或扩展到更短或更长的索引向量,相当于以下映射:
f10: v0 x vm → v1