开发者
资源
[object Object][object Object][object Object]undefined
[object Object]

数据格式转换,一般用于将NCHW格式转换成NC1HWC0格式。特别的,也可以用于二维矩阵数据块的转置。本接口单次Repeat内可处理512Byte的数据(16个DataBlock),根据数据类型不同,支持不同shape的矩阵转置(比如数据类型为half时,单次Repeat可完成16*16大小的矩阵转置),同时还可以支持多次Repeat操作。

单次repeat内转换规则如下:

  • 当输入数据类型位宽为16位时,每个DataBlock中包含16个数,指令内部会循环16次,每次循环都会分别从指定的16个DataBlock中的对应位置取值,组成一个新的DataBlock单元放入目的地址中。如下图所示,图中的srcList[0]-srcList[15]代表源操作数的16个DataBlock。

  • 当数据类型位宽为32位时,每个DataBlock包含8个数,指令内部会循环8次,每次循环都会分别从指定的16个DataBlock中的对应位置取值,组成2个新的DataBlock放入目的地址中。如下图所示:

-当数据类型位宽为8位时,每个DataBlock包含32个数,指令内部会循环16次,每次循环都会分别从指定的16个DataBlock中的对应位置取值,组成半个DataBlock放入目的地址中,读取和存放是在DataBlock的高半部还是低半部由参数srcHighHalf和dstHighHalf决定。如下图所示:

基于以上的转换规则,使用该接口进行NC1HWC0格式转换或者矩阵转置。NC1HWC0格式转换相对复杂,这里给出其具体的转换方法:

NCHW格式转换成NC1HWC0格式时,如果是数据类型的位宽为32位或者16位,则C0=16;如果数据类型的位宽为8位,则C0=32。下图以C0=16为例进行介绍:

[object Object]
[object Object]
[object Object][object Object]undefined
[object Object]

[object Object]

PIPE_TYPE_V

[object Object]
  • 操作数地址对齐约束请参考
  • 操作数地址重叠约束请参考
  • 进行NCHW格式到NC1HWC0格式的转换时,一般用法是将src/dst中的每个元素配置为每个HW平面的起点。
  • 为了性能更优,数据类型位宽为8位时建议先固定dst_high_half/src_high_half,再HW方向Repeat后,再改变dst_high_half/src_high_half。
[object Object]
[object Object]