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

Ascend C UnitFlag特性说明

# UnitFlag

【免费下载链接】asc-devkit本项目是CANN 推出的昇腾AI处理器专用的算子程序开发语言,原生支持C和C++标准规范,主要由类库和语言扩展层构成,提供多层级API,满足多维场景算子开发诉求。项目地址: https://gitcode.com/cann/asc-devkit

特性说明:

unitFlag的核心功能体现为:Mmad和FixPipe接口引入了单元标志(unit-flag)机制,通过以内存块为粒度实现精细化的数据同步,从而有效降低同步延迟,提升系统整体性能。当UnitFlag开关打开后,对于L0C Buffer中的每个内存块(512B),提供一个单元标志位,用于指示该块是否可读或可写。

Mmad和Fixpipe接口设置unitFlag值为2/3后,系统会启动单元标志位。

当mmadParams.unitFlag == 2(0b10),开启unitFlag功能,在硬件执行完指令后,不改变单元标志位;

  • 对于写操作(Mmad接口),如果单元标志位0,则硬件直接写入L0C Buffer;否则,如果单元标志位为1,则写操作会等待直到单元标志变为0;执行完成后将单元标志位保持为0;
  • 对于读操作(Fixpipe接口),如果单元标志位1,则硬件直接读取L0C Buffer;否则,如果单元标志位为0,则读操作为等待直到单元标志变为1;执行完成后将单元标志位保持为1;

当mmadParams.unitFlag == 3(0b11),开启unitFlag功能,在硬件执行完指令后,改变单元标志位;

  • 对于写操作(Mmad接口),如果单元标志位0,则硬件直接写入L0C Buffer;否则,如果单元标志位为1,则写操作会等待直到单元标志变为0;执行完成后将单元标志位设置成1;
  • 对于读操作(Fixpipe接口),如果单元标志位1,则硬件直接读取L0C Buffer;否则,如果单元标志位为0,则读操作为等待直到单元标志变为1;执行完成后将单元标志位设置成0;

根据上述特性,如果用户在进行A矩阵[128, 1024]、B矩阵为[1024, 128]的矩阵乘计算时,需要沿着K轴进行迭代循环,假设每次迭代K长度为128,则需要迭代8次,此时8次Mmad对应1次Fixpipe操作;

  • 前7次Mmad的unitFlag都设置成2,写入后将单元标记位始终为0,保证后续Mmad可以写入L0C Buffer;
  • 最后1次Mmad设置成3,写入后将单元标志位设置成1,保证Fixpipe可以读取L0C Buffer;
  • Fixpipe的unitFlag设置为3,读取后将单元标记位设置为0,保证后续Mmad接口可以顺利写入L0C Buffer数据;

如果用户需要单次Mmad的结果分多次搬出时,譬如Mmad计算结果的L0C Buffer为M(128) x N(256),沿N轴分两次搬出;这样一次Mmad会对应两次Fixpipe;

  • Mmad的时候需要设置unitFlag = 3,保证Fixpipe可以读取L0C Buffer数据;
  • 每一次Fixpipe的unitFlag都设置为3,读取后将单元标记位设置为0,保证后续其他Mmad接口在复用这块L0C Buffer地址时可以顺利写入数据;

当开启unitFlag后,Mmad和Fixpipe会对同一块分形的L0C Buffer进行读写操作,因此Mmad计算和Fixpipe保持一致的读写顺序,有助于获得更优的性能表现。

在调用Mmad接口时,需要通过**SetMMColumnMajor/SetMMRowMajor**接口设置Mmad的计算方向。当Fixpipe开启了NZ2ND或ChannelMerge等layout变换时,需将Mmad的计算方向设置为N方向优先,即调用SetMMRowMajor();反之,若未使用这些特性,则应将计算方向设置为M方向优先,即调用SetMMColumnMajor()。

图1Mmad和Fixpipe同时沿M方向写/读

![Mmad和Fixpipe同时沿M方向写-读](https://raw.gitcode.com/cann/asc-devkit/raw/1cd1d1192e01ae4a8684cd07552c35e13e5c4bdf/docs/zh/api/figures/mmad_unitflag.png "Mmad和Fixpipe同时沿M方向写-读"?utm_source=gitcode_repo_files)

特性约束:

  • Mmad和Fixpipe接口均提供了unitFlag参数来控制该功能的启用,需确保两者同步开启,才能正常生效。
  • 当希望控制同一块L0C Buffer内存空间能持续只被多条Mmad或多条Fixpipe指令操作时,需将对应的前n-1条指令的unitFlag值设置为2,维持被操作内存空间的持续占用状态,最后一条指令设置为3,解除被占用状态。
  • 当启用unitFlag功能后,建议Mmad的计算数据量与Fixpipe搬出的数据量保持一致。若Mmad计算了大块数据(M × N = 128 × 128),但Fixpipe只搬出了其中一部分数据(M × N = 64 × 64),则可能会导致执行异常,可以通过SetFixPipeConfig()接口重置L0C Buffer的状态,详细操作方式见下方示例。

沿K轴迭代循环使用示例片段:

// 调用kRound次Mmad for (auto kIndex = 0; kIndex < kRound; ++kIndex) { if (kIndex != kRound - 1) { // 前kRound-1次迭代设置为2,保证Mmad在K迭代循环中可以一直写入L0C Buffer mmadParams.unitFlag = 2; } else { // 最后一次迭代设置为3,将单元标志位设成1,保证Fixpipe可以读L0C Buffer mmadParams.unitFlag = 3; } AscendC::Mmad(c, a, b, mmadParams); if ((m / ALIGN_NUM) * (n / ALIGN_NUM) < LIMIT_MNSIZE) { AscendC::PipeBarrier<PIPE_M>(); } } // Fixpipe一次搬出 // Fixpipe的unitFlag设置为3,读取后将单元标记位设置为0,保证后续Mmad接口可以顺利写入L0C Buffer数据 fixpipeParams.unitFlag = 3; AscendC::Fixpipe(cGM, c, fixpipeParams);

开启与不开启unitFlag功能的完整示例:UnitFlag示例

表1性能示例说明(以输入数据类型half为例,无业务实测表示忽略指令的前后序操作,只考虑单指令性能,包含带宽延迟等开销)

MNKUnitFlagLOOP_COUNTMmad理论值(cycle)Mmad无业务实测值(cycle)
128256512Enable841564209
128256512Disable841564225
128128512Enable821082172
128128512Disable821082172

【免费下载链接】asc-devkit本项目是CANN 推出的昇腾AI处理器专用的算子程序开发语言,原生支持C和C++标准规范,主要由类库和语言扩展层构成,提供多层级API,满足多维场景算子开发诉求。项目地址: https://gitcode.com/cann/asc-devkit

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

http://www.jsqmd.com/news/1202836/

相关文章:

  • 用ChatGPT做读书笔记,效率提升300%?实测17种场景下的精准提示词+错误避坑清单(含认知科学验证数据)
  • 资深电源工程师的十大核心特征与实战经验
  • BLDC电机核心技术解析与控制系统设计
  • 大模型GEO内容更新频率:3个节奏规律提收录权重,零成本提30%引用率附更新计划表 - 曌选科技官方账号
  • 2026 武汉奢侈品回收实测|楚河汉街 500 平连锁实体店全流程体验,闲置名包变现不踩坑完整攻略 - 微城市网络
  • 解锁手机App的隐藏入口:常用URL Scheme深度解析与应用
  • RabbitMQ VirtualHost 的权限隔离与多租户实战
  • 2026年7月苹果云手机个人用户排行榜:一个人用,怎么选不踩坑? - 米諾
  • 企业级项目管理软件选型指南:本地部署与信创合规实战
  • 2026年7月最新亨得利官方服务项目及价格查询|全部地址及热线电话权威信息公示 - 亨得利官方博客
  • 2026年7月广州戴尔笔记本维修服务指南|故障初检、方案确认与交付|地址电话核对|7月16日资料更新 - 数码品牌推荐
  • C/C++指针编程全解析:从基础到高级应用与内存管理
  • ngx_http_range_body_filter
  • OpenWireless证书管理指南:自签名SSL证书配置与安全
  • CANN/asc-devkit asc_copy寄存器复制函数
  • 2026 SCI论文辅导机构横评:6家医理工合规平台深度实测! - 小艾学姐
  • 2026年 镇江船用控制变压器厂家:稳定可靠的船舶电气核心供应商 - 品牌发掘
  • C++未来十年三大演进支柱:高效、安全、并发
  • 出轨修复咨询哪家靠谱:谋仕心理资质齐全 - 晴光转树
  • Operator 配额管理详解
  • Kubernetes Dashboard 不想裸奔?Headlamp 本地管理集群,用 cpolar 临时给同事看只读面板
  • 2026 年当下,泉州比较好的衬胶钢管源头厂家哪家靠谱,揭秘!这个工业材料如何悄悄改变你的成本结构 - 领域鉴赏官
  • 服装店线上退换货方便吗?四个平台售后规则对比指南 - Chencen
  • 2026年7月广州机械革命笔记本到店维修指南|高性能机型登记和门店资料卡|地址电话核对|7月16日资料更新 - 品牌售后
  • 靠谱的软件开发团队 - 米諾
  • 四轴飞行器运动控制原理与PLC实现方案
  • 2026年工业过滤器十大品牌榜单:袋式/自清洗/烛式/篮式/精密过滤器厂家深度解析与选购指南 - 甄选服务推荐
  • 【Autosar从入门到精通到进阶实战篇】52 运行时断言与在线监控:让状态机在MCU上学会“自我诊断”
  • Excel-条件合并同类项:TEXTJOIN与IF函数实战(非求和,仅文本聚合)
  • 三星换电池品牌哪个质量好:质酷精密电芯 - MXyuyu