news 2026/5/30 16:02:13

CANN/catlass L1到L0A数据搬运模块

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
CANN/catlass L1到L0A数据搬运模块

Copy L1 To L0A 模块概述

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

代码位置

[TOC]

概述

copy_l1_to_l0a模块提供将 A 矩阵 tile 块从 L1(Local Memory,A1 Buffer)搬运到 L0A(A2 Buffer)的模板类,支持多种数据排布格式(layout)转换。根据架构不同,实现分为两套:

  • AtlasA2(ARCH 2201):atlasa2/copy_l1_to_l0a.hpp
  • Ascend950(ARCH 3510):ascend950/copy_l1_to_l0a.hpp

模块包含非 TLA 风格(直接操作LocalTensor)和TLA 风格(通过tla::Tensor封装)两套 API。

API 清单

组件名风格适用硬件说明
CopyL1ToL0A非 TLAAtlasA2 / Ascend950基础 L1→L0A 搬运模板,支持多种 layout 转换
TileCopyTlaTLAAtlasA2 / Ascend950TLA 风格 L1→L0A 搬运,通过 tla::Tensor 封装简化调用
TileCopySparseTlaTLAAtlasA2Sparse GEMM L1→L0A 搬运,zN→zZ LoadData3D v2

说明:该模块通常不直接使用,而是作为 TileCopy 的成员类型(CopyL1ToL0A),由 blockMmad 自动管理。仅在需要自定义 kernel 模板组装时显式声明。

适用硬件型号说明

硬件型号架构标识ARCH 宏支持的非 TLA 模板支持的 TLA 模板
Atlas A2Arch::AtlasA2CATLASS_ARCH == 2201CopyL1ToL0ATileCopyTla
Ascend 950Arch::Ascend950CATLASS_ARCH == 3510CopyL1ToL0ATileCopyTla

架构差异

特性AtlasA2Ascend950
目标 L0A layoutzZzN
基础搬运指令LoadData2DLoadData2DParamsV2
l0Batch 批量搬运不支持支持(operator()重载)
MX Scale 浮点量化不支持支持(operator()重载)
Vector layout不支持支持

接口调用示例

非 TLA 风格(CopyL1ToL0A)

#include "catlass/gemm/tile/copy_l1_to_l0a.hpp" using namespace Catlass::Gemm::Tile; using Element = half; using L1Type = Gemm::GemmType<Element, layout::zN, AscendC::TPosition::A1>; using L0Type = Gemm::GemmType<Element, layout::zZ, AscendC::TPosition::A2>; uint32_t row = 256; uint32_t col = 256; // 构造 L1 上的 zN layout 和 L0A 上的 zZ layout auto layoutSrc = layout::zN::MakeLayout<Element>(row, col); auto layoutDst = layout::zZ::MakeLayout<Element>(row, col); AscendC::LocalTensor<Element> srcL1Tensor; AscendC::LocalTensor<Element> dstL0ATensor; // 实例化并调用 using CopyOp = CopyL1ToL0A<Arch::AtlasA2, L1Type, L0Type>; CopyOp copyOp; copyOp(dstL0ATensor, srcL1Tensor, layoutDst, layoutSrc);

TLA 风格(TileCopyTla)

#include "catlass/gemm/tile/copy_l1_to_l0a.hpp" #include "tla/tensor.hpp" using namespace Catlass::Gemm::Tile; const uint32_t M = 256; const uint32_t K = 256; // 通过 tla::MakeLayout 创建 Layout auto layoutSrc = tla::MakeLayout<half, layout::zN>(M, K); auto layoutDst = tla::MakeLayout<half, layout::zZ>(M, K); // 通过 tla::MakeTensor 构造 TLA Tensor AscendC::LocalTensor<half> srcL1Tensor; AscendC::LocalTensor<half> dstL0ATensor; auto srcTensor = tla::MakeTensor(srcL1Tensor, layoutSrc, Arch::PositionL1{}); auto dstTensor = tla::MakeTensor(dstL0ATensor, layoutDst, Arch::PositionL0A{}); // 实例化并调用(SFINAE 根据 src/dst layout trait 自动匹配偏特化) TileCopyTla<Arch::AtlasA2, decltype(srcTensor), decltype(dstTensor)> copyOp; copyOp(dstTensor, srcTensor);

TLA 风格 - 转置搬运(AtlasA2)

auto layoutSrc = tla::MakeLayout<half, layout::nZ>(M, K); auto layoutDst = tla::MakeLayout<half, layout::zZ>(M, K); auto srcTensor = tla::MakeTensor(srcL1Tensor, layoutSrc, Arch::PositionL1{}); auto dstTensor = tla::MakeTensor(dstL0ATensor, layoutDst, Arch::PositionL0A{}); // isnZ<LayoutSrc> && iszZ<LayoutDst> → 自动匹配转置偏特化 TileCopyTla<Arch::AtlasA2, decltype(srcTensor), decltype(dstTensor)> copyOp; copyOp(dstTensor, srcTensor);

TLA 风格 - Ascend950 基础搬运

// Ascend950 目标 layout 为 zN auto layoutSrc = tla::MakeLayout<half, layout::zN>(M, K); auto layoutDst = tla::MakeLayout<half, layout::zN>(M, K); auto srcTensor = tla::MakeTensor(srcL1Tensor, layoutSrc, Arch::PositionL1{}); auto dstTensor = tla::MakeTensor(dstL0ATensor, layoutDst, Arch::PositionL0A{}); // Ascend950: zN L1 → zN L0A TileCopyTla<Arch::Ascend950, decltype(srcTensor), decltype(dstTensor)> copyOp; copyOp(dstTensor, srcTensor);

TLA 风格 - Ascend950 l0Batch 批量搬运

uint32_t l0Batch = 4; // l0Batch 重载:多 batch 连续搬运 copyOp(dstTensor, srcTensor, l0Batch);

TLA 风格 - Ascend950 MX Scale 搬运

using ElementSrc = float8_e4m3_t; using ElementDst = AscendC::mx_fp8_e4m3_t; using ElementMxScale = float8_e8m0_t; // MX Scale 的 K 方向维度:每 MX_SCALE_GROUP_NUM(32)个元素共享一个 scale 值 const uint32_t mxScaleK = CeilDiv<MX_SCALE_GROUP_NUM>(K); // 源数据 layout(L1 zN) auto layoutSrc = tla::MakeLayout<ElementSrc, layout::zN>(M, K); auto srcTensor = tla::MakeTensor(srcL1Tensor, layoutSrc, Arch::PositionL1{}); // 目标数据 layout(L0A zN,元素类型为 mx_fp8) auto layoutDst = tla::MakeLayout<ElementDst, layout::zN>(M, K); auto dstTensor = tla::MakeTensor(dstL0ATensor, layoutDst, Arch::PositionL0A{}); // MX Scale layout(L1 zZ,使用 MakeMxScaleLayout 构造) auto layoutScaleL1 = tla::MakeMxScaleLayout<ElementMxScale, layout::zZ, false>(M, mxScaleK); AscendC::LocalTensor<ElementMxScale> scaleL1Tensor; auto scaleTensor = tla::MakeTensor(scaleL1Tensor, layoutScaleL1, Arch::PositionL1{}); // MX Scale 重载:L1 zN 源数据 + L1 zZ scale → L0A zN mx 数据 TileCopyTla<Arch::Ascend950, decltype(srcTensor), decltype(dstTensor)> copyOp; copyOp(dstTensor, srcTensor, scaleTensor);

模板选择指南

场景推荐模板
通用矩阵乘 tile L1→L0A 搬运CopyL1ToL0A(非 TLA)或TileCopyTla(TLA)
转置搬运(nZ → zZ / nZ → zN)CopyL1ToL0ATileCopyTla(自动匹配)
Ascend950 多 batch 搬运TileCopyTla(l0Batch 重载)
Ascend950 MX 浮点量化TileCopyTla(MX Scale 重载)
卷积场景 NDC1HWC0 搬运CopyL1ToL0A(非 TLA,NDC1HWC0 偏特化)
已使用 TLA 编程范式TileCopyTla(统一风格)

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

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

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/30 16:01:01

HLS Downloader:如何在浏览器中安全高效地下载HLS流媒体视频

HLS Downloader&#xff1a;如何在浏览器中安全高效地下载HLS流媒体视频 【免费下载链接】hls-downloader Web Extension for sniffing and downloading HTTP Live streams (HLS) 项目地址: https://gitcode.com/gh_mirrors/hl/hls-downloader 你是否曾遇到过这样的情况…

作者头像 李华
网站建设 2026/5/30 16:00:59

智能风扇控制:如何让你的Intel Mac保持凉爽运行

智能风扇控制&#xff1a;如何让你的Intel Mac保持凉爽运行 【免费下载链接】smcFanControl Control the fans of every Intel Mac to make it run cooler 项目地址: https://gitcode.com/gh_mirrors/smc/smcFanControl 你是否曾经在使用MacBook时感觉它变得异常烫手&am…

作者头像 李华
网站建设 2026/5/30 15:59:14

相机标定三大坐标系新手入门指南

在计算机视觉的开发过程中&#xff0c;很多人往往沉迷于调通各种炫酷的算法模型&#xff0c;却忽略了最基础也最关键的一环&#xff1a;相机标定。你是否遇到过这样的情况&#xff1a;代码逻辑完美无缺&#xff0c;但测量出的物体尺寸总是偏差几毫米&#xff1f;或者在尝试将图…

作者头像 李华
网站建设 2026/5/30 15:58:08

CANNBot MrgSort API指南

MrgSort API 使用指南 【免费下载链接】cannbot-skills CANNBot 是面向 CANN 开发的用于提升开发效率的系列智能体&#xff0c;本仓库为其提供可复用的 Skills 模块。 项目地址: https://gitcode.com/cann/cannbot-skills 适用场景&#xff1a;使用排序/归并 API&#xf…

作者头像 李华