当前位置: 首页 > news >正文

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),仅供参考

http://www.zskr.cn/news/1428565.html

相关文章:

  • LLC设计指南(四)第四章 :终于讲到 LLC 的灵魂——为什么 MOS 能实现 ZVS?
  • vue使用笔记、import、export等
  • 3分钟上手:浏览器中免费解锁12种加密音乐格式的完整指南
  • 武汉卖黄金别瞎找!2026年5月三大黄金回收平台实测+避坑指南,这家才是真靠谱 - 资讯纵览
  • 5个技巧:如何用COMET框架实现专业级机器翻译质量评估
  • 2026天津家庭教育指导师报名入口:中山优才教育指南 - 当下教育培训干货
  • ChatGPT营销实战指南:从内容创作到策略辅助的AI效率革命
  • 相机标定三大坐标系新手入门指南
  • 2026证件照制作工具推荐|免费在线、手机软件保姆级教程,手把手教你3步做出合格证件照 - AI测评专家
  • SeaQwen2-0.5B性能评测:HellaSwag和ARC意大利语基准测试结果分析
  • 2026想报考生物医学科学专业在广东有哪个医学学校值得推荐 - 品牌2025
  • 【小白友好教程】2026 最新 OpenClaw 安装步骤 全程可视化操作(包含安装包)
  • 无锡GEO优化公司技术实力排名TOP3:制造业专属服务商深度测评(2026年5月最新) - 商业新知
  • D2RML终极指南:一键解锁暗黑2重制版多开新境界
  • 2026手机拍证件照方法保姆级教程:规范要求一文讲透,手把手教你在家拍 - AI测评专家
  • 爷青回!用三台电脑和家人在Win10上重温《龙之崛起》联机,保姆级避坑指南
  • 北京发电机租赁企业实力梳理 综合运营情况分析 - 资讯纵览
  • 数据工程学习路径全解析:从零到精通的实战指南
  • Docker分布式部署与GB28181/RTSP全协议汇聚:基于源码交付的异构边缘计算AI视频管理平台架构解析
  • 完整指南:如何高效使用Python光学计算库进行光子设计与电磁模拟
  • 郑州市航空港区防水补漏|维小达 专业不拆除补漏、室内防水、屋面防水、厨卫漏水维修一站式服务 - 维小达科技
  • 如何用一款工具彻底改变你的游戏资源编辑体验?
  • 深入Linux内核:图解sendmsg/recvmsg如何玩转分散/聚集I/O与辅助数据
  • 2026报考护理学专业在广东有哪些医学学校值得推荐 - 品牌2025
  • 为什么选择korean_PP-OCRv5_mobile_rec_onnx?移动端韩语识别的革命性突破 [特殊字符]
  • Unreal Engine 5 VRM导入完整指南:深度解析VRM4U插件
  • PyBaMM电池建模框架深度解析:从架构重构到性能优化的工程实践
  • Qwopus3.5-9B-v3震撼发布:87.8% HumanEval通过率的推理优化大模型详解
  • 2026 成都吉修匠修缮|卫生间阳台屋顶地下室免砸砖漏水专业维修 - 吉修匠
  • 3步学会用JPEXS免费Flash反编译器:新手也能轻松提取Flash资源