F32 Channel Split
【免费下载链接】asc-devkit本项目是CANN 推出的昇腾AI处理器专用的算子程序开发语言,原生支持C和C++标准规范,主要由类库和语言扩展层构成,提供多层级API,满足多维场景算子开发诉求。项目地址: https://gitcode.com/cann/asc-devkit
F32 Channel Split是矩阵计算结果搬出过程中的通道拆分能力。当源类型和目的类型均为float、目的格式为NZ,且CopyL0C2GMTrait::enableChannelSplit或CopyL0C2UBTrait::enableChannelSplit设置为true时,硬件会将16×16的分形矩阵拆分为两个独立的16×8小Z分形矩阵。
启用该能力后,目的NZ输出的C0按8处理,N方向大小必须为8的倍数。如下图所示,当源操作数shape为[64, 32]时,搬出结果会被拆分为16个独立的16×8分形矩阵。当源操作数shape为[64, 24]时,搬出结果会被拆分为3列16×8分形矩阵。
图1F32 Channel Split示意图1
图2F32 Channel Split示意图2
调用形式
using namespace AscendC::Te; auto l0c = MakeTensor(MakeMemPtr(l0cAddr), MakeFrameLayout<NZLayoutPtn, 16>(m, n)); auto gm = MakeTensor(MakeMemPtr(gmAddr), MakeFrameLayout<NZLayoutPtn, float>(m, n)); constexpr CopyL0C2GMTrait l0c2gmTrait = { RoundMode::DEFAULT, false, true }; struct CopyL0C2GMTraitCustom { using TraitType = CopyL0C2GMTrait; static constexpr const TraitType value = l0c2gmTrait; }; FixpipeParams params; auto atom = MakeCopy(CopyL0C2GM{}, CopyL0C2GMTraitCustom{}).with(params); Copy(atom, gm, l0c);约束说明
- F32 Channel Split仅支持源类型和目的类型均为
float,目的格式为NZ。 - 启用F32 Channel Split时,不能同时使能
unitFlag,N方向大小必须为8的倍数。
【免费下载链接】asc-devkit本项目是CANN 推出的昇腾AI处理器专用的算子程序开发语言,原生支持C和C++标准规范,主要由类库和语言扩展层构成,提供多层级API,满足多维场景算子开发诉求。项目地址: https://gitcode.com/cann/asc-devkit
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考