CANN/catlass卷积GM到L1数据搬运

CopyGmToL1

【免费下载链接】catlass 本项目是CANN的算子模板库,提供NPU上高性能矩阵乘及其相关融合类算子模板样例。 【免费下载链接】catlass 项目地址: https://gitcode.com/cann/catlass

代码位置

[TOC]

功能说明

CopyGmToL1 实现 Conv 场景下从 GM 到 L1 的权重/特征图数据搬运(非 TLA 风格),支持 Fmap(特征图)和 Filter(卷积核)两类搬运。

  • 适用范围:AtlasA2
  • 风格:非 TLA

模板原型

template <class ArchTag, class GmType, class L1Type = void>
struct CopyGmToL1;
模板参数说明
ArchTag架构标签
GmTypeGemm::GemmType<Element, LayoutTag>,含 Element 和 Layout
L1TypeL1 数据类型,默认 void(自动推导)

偏特化实现

偏特化GmType说明
Fmap-AGemmType<Element, NC1HWC0>NC1HWC0→NC1HWC0,逐 Cin1 搬运
Filter-BGemmType<Element, CI1KHKWCOCI0>CI1KHKWCOCI0→CI1KHKWCOCI0,含 Cout 对齐

调用接口

void operator()(
    AscendC::LocalTensor<Element> dstTensor,    // L1 目的
    AscendC::GlobalTensor<Element> srcTensor,   // GM 源
    LayoutDst const &layoutDst,
    LayoutSrc const &layoutSrc
)

调用示例

Fmap(NC1HWC0)

#include "catlass/conv/tile/copy_gm_to_l1.hpp"

using namespace Catlass::Conv::Tile;

constexpr uint32_t Cin1 = 4, Hi = 28, Wi = 28, C0 = 16;

using Element = half;
using LayoutTagSrc = layout::NC1HWC0;
using LayoutTagDst = layout::NC1HWC0;

using GmType = Gemm::GemmType<Element, LayoutTagSrc>;

auto layoutSrc = LayoutTagSrc::MakeLayout<Element>(1, Cin1, Hi, Wi, C0);
auto layoutDst = LayoutTagDst::MakeLayout<Element>(1, Cin1, Hi, Wi, C0);

AscendC::GlobalTensor<Element> srcTensor;
AscendC::LocalTensor<Element> dstTensor;

using CopyOp = CopyGmToL1<Arch::AtlasA2, GmType>;
CopyOp copyOp;
copyOp(dstTensor, srcTensor, layoutDst, layoutSrc);

【免费下载链接】catlass 本项目是CANN的算子模板库,提供NPU上高性能矩阵乘及其相关融合类算子模板样例。 【免费下载链接】catlass 项目地址: https://gitcode.com/cann/catlass

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值