昇腾AI算子开发套件F32通道拆分

📅 2026/7/16 12:36:53 👁️ 阅读次数 📝 编程学习
昇腾AI算子开发套件F32通道拆分

F32 Channel Split

【免费下载链接】asc-devkit本项目是CANN 推出的昇腾AI处理器专用的算子程序开发语言,原生支持C和C++标准规范,主要由类库和语言扩展层构成,提供多层级API,满足多维场景算子开发诉求。项目地址: https://gitcode.com/cann/asc-devkit

F32 Channel Split是矩阵计算结果搬出过程中的通道拆分能力。当源类型和目的类型均为float、目的格式为NZ,且CopyL0C2GMTrait::enableChannelSplitCopyL0C2UBTrait::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),仅供参考