scatter_vnchwconv
功能说明
这是将NCHW格式转换为NC1HWC0格式的接口。在此接口中,MASK 寄存器无效。
如果是b8数据,C0=32,如果是b32/b16数据,C0=16。
对于b32类型:在源向量中,从每个32B块中提取4B,然后将它们组合成新的块。
for (e=0; e<16; e=e+2)
for (k=0; k<8; k++)
dst[e][k] = src[k][e/2]
dst[e+1][k] = src[k+8][e/2]
for (e=0; e<16; e=e+2)
for (k=0; k<16; k++)
dst[e][k] = src[k][e]
对于b8类型,在源向量中,从每个32B块中提取1B,然后将它们组合成新的块,并且可以通过dstHighHalf与srcHighHalf参数指定是从地址的高半段取还是低半段取。
dstHighHalf = 0, srcHighHalf = 0:
for (e=0; e<16; e++)
for (k=0; k<16; k++)
dst[e][k].B = src[k][e].B
dstHighHalf = 1, srcHighHalf = 0
for (e=0; e<16; e++)
for (k=0; k<16; k++)
dst[e][k+16].B = src[k][e].B
dstHighHalf = 0, srcHighHalf = 1
for (e=0; e<16; e++)
for (k=0; k<16; k++)
dst[e][k].B = src[k][e+16].B
dstHighHalf = 1, srcHighHalf = 1
for (e=0; e<16; e++)
for (k=0; k<16; k++)
dst[e][k+16].B = src[k][e+16].B
该接口不支持MASK配置。
接口原型
// 相同接口的不同原型区别在于源地址和目的地址的数据类型不同 void scatter_vnchwconv_b32(ub_addr8_t dst, ub_addr8_t src, uint8_t repeat, uint16_t dstStride, uint16_t srcStride); void scatter_vnchwconv_b8(ub_addr8_t dst, ub_addr8_t src, uint8_t repeat, uint16_t dstStride, uint16_t srcStride, bool dstHighHalf, bool srcHighHalf); void scatter_vnchwconv_b16(ub_addr8_t dst, ub_addr8_t src, uint8_t repeat, uint16_t dstStride, uint16_t srcStride);
参数类型
参数名 |
说明 |
取值范围 |
单位 |
|---|---|---|---|
dst |
dst是目标向量地址寄存器VAd,VAd用于存储写入目标数据(NC1HWC0 格式)的UB地址信息。一次使用两个寄存器(VAd,VAd+1),共指向512B的UB地址。 |
/ |
/ |
src |
src是目标向量地址寄存器VAn,VAn用于读取目标数据(NCHW格式)的UB地址信息。一次使用两个寄存器(VAn,VAn+1),共指向512B的UB地址。 |
/ |
/ |
repeat |
迭代次数。 例如 repeat=3 时,例dst地址依次为 VAd[i]、VAd[i]+dstStride、VAd[i]+2*dstStride VA[n] 就是 VA第n个元素。 |
[0, 2^8-1] |
/ |
srcStride |
源地址的块级步长(对 VAn 和 VAn+1 生效)。 |
[0, 2^16-1] |
32B |
dstStride |
目标地址的块级步长(对 VAd 和 VAd+1 生效)。 |
[0, 2^16-1] |
32B |
dstHighHalf |
dstHighHalf = 0:将提取的数据存储到目标数据 32B 块的低半段(0~15 索引)。 dstHighHalf = 1:将提取的数据存储到目标数据 32B 块的高半段(16~31 索引)。 |
[0, 1] |
/ |
srcHighHalf |
srcHighHalf = 0:从源数据 32B 块的 低半段(0~15 索引)提取数据。 srcHighHalf = 1:从源数据 32B 块的 高半段(16~31 索引)提取数据。 |
[0,1] |
/ |
VA有VA0-VA7。VA0有128位,存储UB块的地址。VA0被分为8个块指针,每个指针指向一个32B的块,共256B。
(VAn,VAd)∈[VA0-VA7]
参数表中的Stride均指代相邻两个首地址间的步长。
流水类型
PIPE_V