CANN/catlass动态优化数据搬运模板

CopyGmToL1DynamicOptimized

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

代码位置

[TOC]

功能说明

CopyGmToL1DynamicOptimized 是非 TLA 风格的 GM 到 L1 数据搬运模板。与 CopyGmToL1 相比,该模板在运行时根据数据块形状动态选择最优搬运策略:

  • 当矩阵行数/列数较少(≤16)时,使用逐行/逐列的 strided DataCopy 接口,避免 Nd2Nz 指令开销
  • 当矩阵规模较大时,回退到 Nd2Nz 指令进行高效搬运

对于 zN → zN 和 nZ → nZ 等格式保持不变的场景,直接继承自 CopyGmToL1 对应偏特化。

支持 Arch::AtlasA2Arch::Ascend950 两种架构。

模板原型

template <
    class ArchTag,          // 架构标签
    class GmType,           // GM 上操作数的 Gemm 类型
    class L1Type = void     // L1 上操作数的 Gemm 类型(默认 void)
>
struct CopyGmToL1DynamicOptimized

模板参数说明

参数说明
ArchTag架构标签,可选 Arch::AtlasA2Arch::Ascend950
GmTypeGM 上源操作数的 Gemm 类型
L1TypeL1 上目的操作数的 Gemm 类型,默认为 void

偏特化实现

AtlasA2 偏特化

GmType目的 Layout实现方式
GemmType<Element, RowMajor>zN自主实现,动态选择策略
GemmType<Element, ColumnMajor>nZ自主实现,动态选择策略
GemmType<Element, zN>zN继承自 CopyGmToL1<AtlasA2, GmType<Element, zN>>
GemmType<Element, nZ>nZ继承自 CopyGmToL1<AtlasA2, GmType<Element, nZ>>
GemmType<Element, PaddingRowMajor>zN继承自 CopyGmToL1<AtlasA2, GmType<Element, PaddingRowMajor>>
GemmType<Element, PaddingColumnMajor>nZ继承自 CopyGmToL1<AtlasA2, GmType<Element, PaddingColumnMajor>>

Ascend950 偏特化

GmType目的 Layout实现方式
GemmType<Element, RowMajor>zN自主实现,动态选择策略
GemmType<Element, ColumnMajor>nZ自主实现,动态选择策略
GemmType<Element, zN>zN继承自 CopyGmToL1<Ascend950, GmType<Element, zN>>
GemmType<Element, nZ>nZ继承自 CopyGmToL1<Ascend950, GmType<Element, nZ>>

调用接口

所有偏特化使用统一的调用接口:

void operator()(
    AscendC::LocalTensor<Element> const &dstTensor,   // 目的操作数 LocalTensor
    AscendC::GlobalTensor<Element> const &srcTensor,  // 源操作数 GlobalTensor
    LayoutDst const &layoutDst,                       // 目的操作数 layout
    LayoutSrc const &layoutSrc                        // 源操作数 layout
)
参数说明
dstTensor目的 L1 LocalTensor
srcTensor源 GM GlobalTensor
layoutDst目的操作数的 layout 描述
layoutSrc源操作数的 layout 描述

调用示例

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

using namespace Catlass::Gemm::Tile;

using LayoutTagSrc = layout::RowMajor;
using LayoutTagDst = layout::zN;
using ElementDst = half;

// 定义 GM 上的 Gemm 类型
using GmType = Gemm::GemmType<ElementDst, LayoutTagSrc>;
// 定义 L1 上的 Gemm 类型
using L1Type = Gemm::GemmType<ElementDst, LayoutTagDst, AscendC::TPosition::A1>;

uint32_t row = 256;
uint32_t col = 256;

// 构造 layout
auto layoutSrc = LayoutTagSrc::MakeLayout<ElementDst>(row, col);
auto layoutDst = LayoutTagDst::MakeLayout<ElementDst>(row, col);

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

// 实例化 CopyGmToL1DynamicOptimized
// 内部会根据 row/col 自动选择 Nd2Nz 或 strided DataCopy
using CopyOp = CopyGmToL1DynamicOptimized<Arch::AtlasA2, GmType, L1Type>;
CopyOp copyOp;
copyOp(dstTensor, srcTensor, layoutDst, layoutSrc);

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

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

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

抵扣说明:

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

余额充值