单目与双目模板参数说明
Vector intrinsic接口在Vector计算单元执行,源操作数和目的操作数均通过Unified Buffer(UB)来进行存储。Vector计算单元每个迭代会从UB中取出8个datablock(每个datablock数据块内部地址连续,长度32Byte,合计256Byte)进行计算,并写入对应的8个datablock中。
下图展示了一个基本向量计算的行为模式。
- Repeat:通过Repeat来配置迭代次数,从而控制指令的多次迭代执行。如上图Repeat设置为2,矢量计算单元会进行2个迭代的计算,可计算出2 * 8(每个迭代8个datablock) * 32Byte(每个datablock32Byte) = 512Byte的结果。由于硬件限制,Repeat不能超过255,如果Repeat设置为0,则指令视为NOP指令。
- RepeatStride:代表每次迭代之间的起始间隔,上图srcRepeatStride设置为0,表示每个迭代都从同一个地址读取数据。dstRepeatStride均设置为16,即两次迭代的目的地址起始地址间隔为16 * 32Byte。如果dstRepeatStride/srcRepeatStride设置为1,表示下一个迭代比上一个迭代间隔1个block,即两次迭代的起始地址间隔 1 * 32Byte。
- BlockStride:代表每个Repeat计算中读取的8个block的间隔,如上图中srcBlockStride设置为2,则表示连续读取的两个block的起始地址间隔为2个block(即64Byte),而dstBlockStride设置为1,则运算结果的8个block连续存放。
根据计算所需的源操作数的个数可分为表1 单目运算参数说明表和表2 双目运算参数说明。
参数名 |
说明 |
取值范围 |
单位 |
---|---|---|---|
dst |
目的操作数起始地址 |
/ |
/ |
src |
源操作数起始地址 |
/ |
/ |
repeat |
指令迭代次数 |
[0, 2^8-1] |
/ |
dstBlockStride |
同一次执行,目的操作数不同block间地址步长。例如,当dstBlockStride为3,每个dst block的起始地址间隔为2个block(64B)。 |
[0, 2^16-1] |
32B |
srcBlockStride |
同一次执行,源操作数不同block间地址步长。 |
[0, 2^16-1] |
32B |
dstRepeatStride |
相邻两次执行,目的操作数相同block地址步长。0表示两次迭代的所有对应块指向相同的地址。 |
[0, 2^12-1] |
32B |
srcRepeatStride |
相邻两次执行,源操作数相同block地址步长。 |
[0, 2^12-1] |
32B |
参数名 |
说明 |
取值范围 |
单位 |
---|---|---|---|
dst |
目的操作数起始地址 |
/ |
/ |
src0 |
源操作数0起始地址 |
/ |
/ |
src1 |
源操作数1起始地址 |
/ |
/ |
repeat |
指令迭代次数 |
[0, 2^8-1] |
/ |
dstBlockStride |
同一次执行,目的操作数不同block间地址步长。例如,当dstBlockStride为3,每个dst block的起始地址间隔为2个block(64B)。 |
[0, 2^8-1] |
32B |
src0BlockStride |
同一次执行,源操作数0不同block间地址步长。 |
[0, 2^8-1] |
32B |
src1BlockStride |
同一次执行,源操作数1不同block间地址步长。 |
[0, 2^8-1] |
32B |
dstRepeatStride |
相邻两次执行,目的操作数相同block地址步长。0表示两次迭代的所有对应块指向相同的地址。 |
[0, 2^8-1] |
32B |
src0RepeatStride |
相邻两次执行,源操作数0相同block地址步长。 |
[0, 2^8-1] |
32B |
src1RepeatStride |
相邻两次执行,源操作数1相同block地址步长。 |
[0, 2^8-1] |
32B |