单目与双目模板参数说明
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(每个 datablock 32Byte) = 512Byte的结果。由于硬件限制,Repeat 不能超过255,如果 Repeat 设置为0,则接口视为 NOP 接口。
- RepeatStride:代表每次迭代之间的起始间隔,上图 srcRepeatStride 设置为0,表示每个迭代都从同一个地址读取数据。dstRepeatStride 均设置为16,即两次迭代的目的地址起始地址间隔为16 * 32Byte。如果接口一次迭代处理8个 block,将 dstRepeatStride/srcRepeatStride 设置为8,表示下一个迭代比上一个迭代间隔8个 block,两次迭代的起始地址间隔 8 * 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 |
参数表中的Stride均指代相邻两个首地址间的步长。