向量计算机从内存中聚集读出数据并将其放入向量寄存器中,执行单元会在向量寄存器上高效计算,然后将计算结果从向量寄存器分散写会内存中
注:索引取数(vldx)和存数(vstx)通常称为聚集(gather)和分散(scatter);执行单元是处理器中的硬件模块,负责执行指令集架构中定义的各种操作
啥是动态类型?向量计算指令所操作的数据的类型和位宽是动态变化的
如何实现数据的类型和位宽动态变化?vsetdcfg指令可以设置向量寄存器类型(数据类型+位宽),见图
向量寄存器和x/f寄存器有啥不一样?1个x/f寄存器就是存了1个数,1个向量寄存器存的数有vl个
向量操作的并行度怎么衡量?每个时钟周期计算多少位的操作+每个向量寄存器元素多少个
注:在执行指令之前,需要先在向量寄存器中设置数据类型和位宽
一维数组:处理顺序存放在内存的一维数组;取数通过vld指令提供的起始地址,将内存地址连续的数据读入向量寄存器;向量寄存器关联的数据类型决定数据大小、向量长度寄存器vl决定需要读出的数据元素数量;vld/vst
多维数组:行优先/列优先方式存放;两个源寄存器,提供起始地址和步长(字节);vlds/vsts
稀疏数组:两个源寄存器,一个向量寄存器,一个标量寄存器,提供稀疏数组中非零元素的字节索引和稀疏数组的起始地址;
例子:
setvl:将向量长度寄存器(vl)和目的寄存器设为源操作数和最大向量长度(mvl)的较小值
vselect:vselect v0, v1, v2 若v2的前四个元素为2 0 4 8,则该指令将用v1的第2个元素写入v0的第0个元素,用v1的第0个元素写入v0的第1个元素,用v1的第4个元素写入v0的第2个元素,用v1的第8个元素写入v0的第3个元素
vmerge:vmerge, vp0 vdest, vsrc1, vsrc2 若vp0的前四个元素为0 0 1 1,vsrc1的前四个元素为1 2 3 4,vsrc2的前四个元素为5 6 7 8,则该指令执行后,vdest的前四个元素为1 2 6 7
vextract:vextract v0, v1, a0 若vl为128,a0为32,则指令执行后,v0的第1个元素到第96个元素是v1的第33个元素到第128个元素