news 2026/5/9 18:36:57

CANN/catlass Block调度策略说明

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
CANN/catlass Block调度策略说明

Block Dispatch Policies说明

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

DispatchPolicy是BlockMmad的一个重要模板参数,各个DispatchPolicy定义在include/catlass/gemm/dispatch_policy中。本文档对下列四个DispatchPolicy的功能、参数以及使用的example进行简单介绍。

  • MmadAtlasA2Pingpong
  • MmadAtlasA2Preload
  • MmadAtlasA2PreloadAsync
  • MmadAtlasA2PreloadAsyncWithCallback

MmadAtlasA2Pingpong

功能:在A2架构上,在L1和L0A/B设置Pingpong Buffer的缓冲区机制。

参数说明:

  • STAGES:多buffer场景的buffer片数。
  • ENABLE_UINT_FLAG:用于表示是否启用uintflag优化,启用Mmad运算与L0C结果拷贝到全局内存的细粒度并行。

示例代码:

struct MmadAtlasA2Pingpong { static constexpr uint32_t STAGES = 2; static constexpr bool ENABLE_UINT_FLAG = true; };

当前使用该DispatchPolicy的examples有00_basic_matmul01_batched_matmul03_matmul_add04_padding_matmul09_split_matmul

MmadAtlasA2Preload

功能:在A2架构上采用L1和L0A/B Buffer的pingpong机制,同时支持shufflek策略与block间的预加载。

参数说明:

  • STAGES:多buffer场景的buffer片数。
  • ENABLE_UINT_FLAG:用于表示是否启用uintflag优化,启用Mmad运算与L0C结果拷贝到全局内存的细粒度并行。
  • ENABLE_SHUFFLE_K:用于表示是否启用shufflek策略。

示例代码:

struct MmadAtlasA2Preload { static constexpr uint32_t STAGES = 2; static constexpr bool ENABLE_UINT_FLAG = true; static constexpr bool ENABLE_SHUFFLE_K = true; };

当前使用该DispatchPolicy的examples有06_optimized_matmul

MmadAtlasA2PreloadAsync

功能:在A2架构上采用L1 Buffer和L0A/L0B/L0C Buffer上的nBuffer,同时支持shufflek策略、block间的预加载以及group间的预加载。

参数说明:

  • PRELOAD_STAGES:用于表示经过PRELOAD_STAGES次GM到L1的数据读取后,启动L1到L0的数据搬运和Mmad计算,取值要求小于L1_STAGES。
  • L1_STAGES:用于表示L1开缓冲片数量,需要满足L1TileShape的(M*K*矩阵A元素数据类型字节数+K*N*矩阵B元素数据类型字节数)<=L1大小。
  • L0A_STAGES:用于表示L0A开的buffer数量,需要满足L0TileShape的M*K*矩阵A元素数据类型字节数<=L0A大小。
  • L0B_STAGES:用于表示L0B开的buffer数量,需要满足L0TileShape的K*N*矩阵B元素数据类型字节数<=L0B大小。
  • L0C_STAGES:用于表示L0C开的buffer数量,需要满足L0TileShape的M*N*Mmad计算数据类型字节数<=L0C大小。
  • ENABLE_UINT_FLAG:用于表示是否启用uintflag优化,启用Mmad运算与L0C结果拷贝到全局内存的细粒度并行。
  • ENABLE_SHUFFLE_K:用于表示是否启用shufflek策略。

示例代码:

struct MmadAtlasA2PreloadAsync { static constexpr uint32_t PRELOAD_STAGES = 1; static constexpr uint32_t L1_STAGES = 2; static constexpr uint32_t L0A_STAGES = 2; static constexpr uint32_t L0B_STAGES = 2; static constexpr uint32_t L0C_STAGES = 1; static constexpr bool ENABLE_UINT_FLAG = false; static constexpr bool ENABLE_SHUFFLE_K = true; };

当前使用该DispatchPolicy的examples有02_grouped_matmul_slice_m05_grouped_matmul_slice_k11_grouped_matmul_slice_k_per_token_dequant

MmadAtlasA2PreloadAsyncWithCallback

功能:在A2架构上采用L1 Buffer和L0A/L0B/L0C Buffer上的nBuffer,同时支持ShuffleK策略、Block间的预加载以及group间的预加载。同时支持用户将aic和aiv之间的同步命令以callback的形式传入Block层,由Block层决定调用的时机。

参数说明:

  • PRELOAD_STAGES:用于表示经过PRELOAD_STAGES次GM到L1的数据读取后,启动L1到L0的数据搬运和Mmad计算,取值要求小于L1_STAGES。
  • L1_STAGES:用于表示L1开的buffer数量,需要满足L1TileShape的(M*K*矩阵A元素数据类型字节数+K*N*矩阵B元素数据类型字节数)<=L1大小。
  • L0A_STAGES:用于表示L0A开的buffer数量,需要满足L0TileShape的M*K*矩阵A元素数据类型字节数<=L0A大小。
  • L0B_STAGES:用于表示L0B开的buffer数量,需要满足L0TileShape的K*N*矩阵B元素数据类型字节数<=L0B大小。
  • L0C_STAGES:用于表示L0C开的buffer数量,需要满足L0TileShape的M*N*Mmad计算数据类型字节数<=L0C大小。
  • ENABLE_UINT_FLAG:用于表示是否启用uintflag优化,启用Mmad运算与L0C结果拷贝到全局内存的细粒度并行。
  • ENABLE_SHUFFLE_K:用于表示是否启用shufflek策略。

示例代码:

struct MmadAtlasA2PreloadAsyncWithCallback { static constexpr uint32_t PRELOAD_STAGES = 1; static constexpr uint32_t L1_STAGES = 2; static constexpr uint32_t L0A_STAGES = 2; static constexpr uint32_t L0B_STAGES = 2; static constexpr uint32_t L0C_STAGES = 1; static constexpr bool ENABLE_UINT_FLAG = false; static constexpr bool ENABLE_SHUFFLE_K = true; };

当前使用该DispatchPolicy的examples有10_grouped_matmul_slice_m_per_token_dequant12_quant_matmul

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

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

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

GPT-4架构深度解析:从多模态融合到协同推理的工程实现

1. 项目概述&#xff1a;从“黑盒”到“白盒”的认知跃迁当GPT-4横空出世时&#xff0c;整个行业感受到的是一种近乎“降维打击”的震撼。它不再是一个单纯的文本生成器&#xff0c;而是一个能看懂图表、理解代码、进行复杂逻辑推演&#xff0c;甚至能跨学科整合知识的“准通用…

作者头像 李华
网站建设 2026/5/9 18:33:06

操作条件反射与NARS融合:构建自适应AGI学习框架

1. 项目概述&#xff1a;从“刺激-反应”到“思考-适应”的智能跃迁 最近和几位做认知科学和强化学习的朋友聊天&#xff0c;大家不约而同地提到了一个共同的瓶颈&#xff1a;我们训练出的AI模型&#xff0c;无论是大语言模型还是专用智能体&#xff0c;其“学习”过程本质上依…

作者头像 李华
网站建设 2026/5/9 18:32:39

用ChatGPT生成IRT数据:当大语言模型遇见心理测量学

1. 项目概述&#xff1a;当经典测量理论遇上生成式AI在心理测量学、教育评估和问卷设计领域&#xff0c;项目反应理论&#xff08;Item Response Theory, IRT&#xff09;一直扮演着核心角色。它超越了经典测量理论&#xff0c;能够基于被试者的潜在特质&#xff08;如能力、态…

作者头像 李华
网站建设 2026/5/9 18:32:39

Illustrator脚本开发入门:从零写一个‘日期+序列’的防伪码生成器

Illustrator脚本开发实战&#xff1a;构建智能防伪码生成器 在印刷品防伪、会员卡制作、票据管理等场景中&#xff0c;带有日期和序列号的唯一标识符是刚需。传统手动操作不仅效率低下&#xff0c;还容易出错。作为前端开发者或设计师&#xff0c;掌握Illustrator脚本开发能力&…

作者头像 李华
网站建设 2026/5/9 18:31:09

统计容忍区间在机器学习中的应用与实现

1. 统计容忍区间在机器学习中的基础解析在数据分析与机器学习实践中&#xff0c;我们经常需要确定数据的合理波动范围。想象一下&#xff0c;你是一名质量检测工程师&#xff0c;需要判断生产线上的产品尺寸是否处于正常范围&#xff1b;或者你是一名风控分析师&#xff0c;需要…

作者头像 李华
网站建设 2026/5/9 18:31:05

转导学习:原理、算法与应用实践

1. 什么是转导学习&#xff1f;转导学习&#xff08;Transductive Learning&#xff09;是机器学习中一种介于监督学习和无监督学习之间的学习范式。与传统的归纳学习&#xff08;Inductive Learning&#xff09;不同&#xff0c;转导学习的核心思想是&#xff1a;我们不需要构…

作者头像 李华