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

矩阵乘输出的Channel拆分,又称ChannelSplit。指当Matmul计算结果C矩阵的格式为时,C矩阵采用分形存储,关于NZ格式的详细内容请参考。当C矩阵的物理排布格式为NZ、数据类型为float时,默认情况下,每个分形内部包含16*16个元素,即分形的大小为16*16。ChannelSplit的功能为将此场景下C矩阵的每个16*16的分形切分为16*8的分形,使得C矩阵按照16*8的分形进行存储。

由于1个float类型数据的大小为4字节,16*8的分形在内轴满足32字节对齐,内轴上的数据量与一条NPU矢量计算指令处理的数据单元一致,这便于后续的其它计算。ChannelSplit功能默认不启用,用户需通过设置中的isEnableChannelSplit参数为true来开启此功能。

图 1 ChannelSplit功能示意图[object Object][object Object]

[object Object]

对于NZ格式、float类型的C矩阵,需要按16*8的分形存储时,使用该功能。

[object Object]

开启ChannelSplit功能需满足:

  • C矩阵的数据排布格式为CubeFormat::NZ。
  • C矩阵的数据类型为float。
  • C矩阵的内存逻辑位置为Global Memory。
  • 矩阵乘结果CO1数据类型为float。
[object Object]

完整的算子样例请参考

[object Object]