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

CATLASS L1到L0A拷贝API

CopyL1ToL0A

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

代码位置

[TOC]

功能说明

CopyL1ToL0A模板负责将 A 矩阵的 tile 块从 L1(Local Memory,A1 Buffer)搬运到 L0A(A2 Buffer),支持多种数据排布格式(layout)转换。

根据源 layout 和目标 layout 的不同,内部会选择合适的硬件搬运指令:

  • zN → zZ:Nd 转置拷贝,ifTranspose = false
  • nZ → zZ:转置拷贝(Transpose A),ifTranspose = true,对于 int8_t 使用LoadDataWithTranspose
  • NDC1HWC0 → zZ:卷积专用路径,使用LoadData3Dv2

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

模板原型

template < class ArchTag, // 架构标签:Arch::AtlasA2 或 Arch::Ascend950 class L1Type, // L1 数据描述:Gemm::GemmType<Element, Layout, AscendC::TPosition::A1> class L0Type = void // L0A 数据描述:Gemm::GemmType<Element, Layout, AscendC::TPosition::A2>(可省略,自动推导) > struct CopyL1ToL0A { static_assert(DEPENDENT_FALSE<ArchTag>, "Unsupported copy l1 to l0, can not find the specialization."); };
  • ArchTag:架构标签,Arch::AtlasA2Arch::Ascend950
  • L1Type:L1 上 A 矩阵的数据类型,封装了 Element、Layout、TPosition
  • L0Type:L0A 上 A 矩阵的数据类型,默认为void,大多数偏特化会自动推导

偏特化实现

AtlasA2

源 Layout目标 Layout元素类型说明
zNzZ任意基础 Nd 拷贝,使用 LoadData2D
zNzZfloatfloat 专用,使用 LoadData3D 路径
nZzZ任意(非 int8_t)转置拷贝,使用 LoadData2D(ifTranspose=true)
nZzZint8_t转置拷贝,使用 LoadDataWithTranspose
nZzZfloat转置拷贝,使用 LoadData3D(含 SetFmatrix 对齐)
nNzZ任意nN 转 zZ 拷贝,使用 LoadData2D
nNzZfloatfloat 专用,使用 LoadData2dTranspose
NDC1HWC0zZ任意卷积专用,使用 LoadData3Dv2

Ascend950

源 Layout目标 Layout元素类型说明
zNzN任意基础 Nd 拷贝,使用 LoadData2DParamsV2
nZzN非 B8/B4(int8_t/float8_e4m3_t/float8_e5m2_t/float4 等)转置拷贝,使用 LoadData2DParamsV2
nZzNB8/B4(int8_t/float8_e4m3_t/float8_e5m2_t/float4 等)转置拷贝,根据 L0M 对齐情况选择单次或分步 LoadData

注意:Ascend950 的L0Type目标 layout 均为 zN(非 zZ),与 AtlasA2 不同。

调用接口

基础接口(所有偏特化通用)

void operator()( AscendC::LocalTensor<Element> dstTensor, // L0A 目标 tensor AscendC::LocalTensor<Element> srcTensor, // L1 源 tensor LayoutDst layoutDst, // L0A 数据 layout LayoutSrc layoutSrc // L1 数据 layout );

卷积接口(NDC1HWC0 偏特化)

void operator()( AscendC::LocalTensor<Element> dstTensor, AscendC::LocalTensor<Element> srcTensor, LayoutDst layoutDst, LayoutSrc layoutSrc, uint32_t kStartPt, uint32_t mStartPt, uint32_t l1H, uint32_t l1W, uint8_t* padList );

该偏特化通过静态工厂方法构造实例:

static CopyL1ToL0A MakeCopyL1ToL0A( uint32_t strideW = 0, uint32_t strideH = 0, uint32_t filterW = 0, uint32_t filterH = 0, uint32_t dilationFilterW = 0, uint32_t dilationFilterH = 0 );

调用示例

基础 zN → zZ 搬运(AtlasA2,非 TLA)

#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);

nZ → zZ 转置搬运(AtlasA2,非 TLA)

using L1Type = Gemm::GemmType<half, layout::nZ, AscendC::TPosition::A1>; using L0Type = Gemm::GemmType<half, layout::zZ, AscendC::TPosition::A2>; auto layoutSrc = layout::nZ::MakeLayout<half>(row, col); auto layoutDst = layout::zZ::MakeLayout<half>(row, col); using CopyOp = CopyL1ToL0A<Arch::AtlasA2, L1Type, L0Type>; CopyOp copyOp; copyOp(dstL0ATensor, srcL1Tensor, layoutDst, layoutSrc);

zN → zN 搬运(Ascend950,非 TLA)

using L1Type = Gemm::GemmType<half, layout::zN, AscendC::TPosition::A1>; auto layoutSrc = layout::zN::MakeLayout<half>(row, col); auto layoutDst = layout::zN::MakeLayout<half>(row, col); // Ascend950 的 L0Type 可省略,自动推导对应 layout using CopyOp = CopyL1ToL0A<Arch::Ascend950, L1Type>; CopyOp copyOp; copyOp(dstL0ATensor, srcL1Tensor, layoutDst, layoutSrc);

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

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

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

相关文章:

  • ESP32车载LED显示屏DIY:从硬件设计到无线控制全解析
  • Arduino GSM通信实战:SIM900A AT指令驱动短信与电话
  • 2026广州装修公司口碑榜十大靠谱装企避坑指南含零增项质保 - 资讯纵览
  • 终极指南:如何在Windows上实现macOS风格的三指拖拽功能
  • 保姆级避坑指南:在Ubuntu 18.04上搞定LeGO-LOAM与KITTI数据集(从源码到轨迹评估)
  • 2026本地实测|重庆高奢包包怎么卖?主流门店全对比 - 奢侈品回收测评
  • 辽宁工业场景防爆监控系统技术解析与可靠供应商选型
  • 离散制造数智化服务商自研WMS全系列方案 - 奔跑123
  • 2026年AI论文软件盘点:12款神器助你高效完成去痕改写、润色和过检
  • 如何快速上手CUBOX-SOLAR-DPO-v0.2-openmind:从安装到首次文本生成的完整指南
  • 2026在线证件照换底色工具推荐:免费工具手把手教程 - AI测评专家
  • Warcraft Helper:让经典魔兽争霸3在现代电脑上完美运行的终极方案
  • CANN/catlass 卷积瓦片拷贝
  • D3KeyHelper:如何高效使用暗黑3技能连点器提升游戏体验
  • AI 编程工具面试题(Claude Code、Codex 等)基础篇(一)
  • Merkle树性能优化与工程实践
  • 终极指南:深度掌握AMD Ryzen SMU调试工具的专业实战技巧
  • d2s-editor:暗黑破坏神2存档编辑器的技术实现与创新实践
  • CANN/catlass L1到L0A数据搬运模块
  • 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