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

CANN/ops-tensor StreamK矩阵乘后处理块

Block Epilogue StreamK【免费下载链接】ops-tensorops-tensor 是 CANN Compute Architecture for Neural Networks算子库中提供张量类计算的基础算子库采用模块化设计支持灵活的算子开发和管理。项目地址: https://gitcode.com/cann/ops-tensor代码位置功能说明StreamK 矩阵乘后处理 Block运行在 AIV 核。从 workspace 读取 AIC 计算的中间结果执行 K 轴切分累加Add、类型转换Cast、ReLU 激活并输出到 GM。继承自Block Epilogue 基础框架特殊约束AIV 核专用仅运行在 AIVVector核与 AICCube核协同工作AIC 核执行矩阵乘计算结果输出到 workspaceAIV 核从 workspace 读取中间结果执行后处理Workspace 必需必须提供 workspace 用于存储 AIC 计算的中间结果workspace 数据类型WorkspaceType通常为 float大小tailMNTileNum × skKTileNum × BLOCK_BASE_M × BLOCK_BASE_N × sizeof(WorkspaceType)输出类型支持两种输出类型float → float无需 Cast直接输出float → half/bfloat16执行 Cast 转换后输出ReLU 支持float 输出支持 ReLU非 bfloat16_thalf 输出支持 ReLUbfloat16_t 输出不支持 ReLU硬件限制L0C2Out 模式支持两种 Fixpipe 输出模式ON_THE_FLYCompact 模式紧凑布局ND_FIXPIPE_1_2Normal 模式stride 对齐到 32BAIV 并行度SK 模式aivMte2Num_ GetTaskRation()多个 AIV 并行处理一个 AICDP 模式aivMte2Num_ BLOCK_CUBE单个 AIV 处理数据对齐burstLen对齐到 32BBLOCK_SIZEsrcGapworkspace 中 K 轴切分之间的间隔dstGapGM 输出中 N 轴的间隔n_ - curNL1InAiv特殊静态常量常量说明BLOCK_BASE_MBlock 基础 M 维度256BLOCK_BASE_NBlock 基础 N 维度256NUM_TWO数值常量2MAIN_WINDOW主窗口大小4UB2GM_SRCGAP_UNITUB2GM srcGap 对齐单位32特殊类型别名类型说明WorkspaceTypeWorkspace 数据类型模板参数OutType输出数据类型模板参数DispatchPolicy调度策略模板参数特殊数据结构Argumentsstruct Arguments { GM_ADDR cGmAddr{nullptr}; // C 矩阵 GM 地址 GM_ADDR workspaceGmAddr{nullptr}; // Workspace GM 地址 };Paramsusing Params Arguments;AivParamsstruct AivParams { uint64_t indexParams 0; // AIV 处理的 tile 索引 uint64_t mCntIndex 0; // M 轴 tile 索引 uint64_t nCntIndex 0; // N 轴 tile 索引 uint64_t kCntIndex 0; // K 轴切分索引 uint64_t curML1InAiv 0; // 当前 tile M 维度 uint64_t curNL1InAiv 0; // 当前 tile N 维度 uint64_t curAlignedNInAiv 0; // 对齐后的 N 维度ND_FIXPIPE_1_2 模式 };CopyGm2UbParamsstruct CopyGm2UbParams { uint64_t offsetWorkspaceGM 0; // workspace 起始偏移 uint64_t kCnt 0; // K 轴切分数量 uint64_t mBurstOri 0; // 原始 M burst 数量 uint64_t mBurst 0; // 当前 AIV 处理的 M burst 数量 uint64_t burstLen 0; // 每次 burst 的数据长度 uint64_t srcGap 0; // workspace 中 K 切分之间的间隔 };CopyUb2GmParamsstruct CopyUb2GmParams { uint64_t offsetCGm 0; // GM 输出偏移 uint64_t mLength 0; // M 维度长度 uint64_t burstLen 0; // burst 长度N 维度 uint64_t dstGap 0; // GM 输出 N 轴间隔 uint64_t srcGap 0; // UB 中 N 轴间隔 };特殊成员方法构造函数__aicore__ inline BlockEpilogueStreamK()功能构造 BlockEpilogueStreamK 对象。析构函数__aicore__ inline ~BlockEpilogueStreamK()功能析构 BlockEpilogueStreamK 对象。Init函数__aicore__ inline void Init( Params const params, // 参数cGmAddr, workspaceGmAddr BlockShape blockShapeInAiv, // 问题规模 (m, n, k) BlockShape tileL1ShapeInAiv, // L1 tile 形状 (mL1, nL1, kL1) BlockCoord coordInAiv, // tile 坐标 (mCnt, nCnt, kCnt) uint64_t usedCoreNum, // 使用的核数 bool checkIsSkScene) // 是否为 SK 模式功能初始化 BlockEpilogueStreamK 组件。 参数说明 | 参数 | 类型 | 说明 | |------|------|------| | params | Params | 包含 cGmAddr 和 workspaceGmAddr | | blockShapeInAiv | BlockShape | 问题规模(m, n, k)| | tileL1ShapeInAiv | BlockShape | L1 tile 形状(mL1, nL1, kL1)| | coordInAiv | BlockCoord | tile 坐标(mCnt, nCnt, kCnt)| | usedCoreNum | uint64_t | 使用的核数 | | checkIsSkScene | bool | true SK 模式false DP 模式 |执行流程设置问题规模m_,n_,mL1_,nL1_设置 tile 坐标mCnt_,nCnt_,kCnt_设置 AIV 并行度aivMte2Num_设置 GM buffercGlobal_,workspaceGlobal_ICache 预加载2 个 cache lineDP 模式同步设置并等待MTE3_MTE2标志Run函数__aicore__ inline void Run()功能执行 StreamK 后处理。 执行流程更新索引UpdateAivBasicIndex()更新 AIV tile 索引更新块参数UpdateAivBasicBlock()更新当前 tile 形状AIV 并行循环按aivMte2Num_循环更新参数UpdateAivParams(index)搬运 workspace → UBDataCopyPadfloat等待 MTE2 完成WaitFlagMTE2_VK 轴切分累加循环执行AddReLU 激活可选Relu类型转换可选Castfloat → half/bfloat16等待 V 完成WaitFlagV_MTE3搬运 UB → GMDataCopyPadOutTypeoperator函数__aicore__ inline void operator()()功能执行后处理调用Run()。UpdateAivBasicIndex函数__aicore__ inline void UpdateAivBasicIndex()功能更新 AIV tile 索引mCntIndex, nCntIndex, kCntIndex。 算法说明计算newBlockIdxGetBlockIdx() / (GetTaskRation() * kCnt_)计算kCntIndexGetBlockIdx() % (GetTaskRation() * kCnt_)计算cGmIndex基于 DPSK 混合策略的索引扫描窗口计算mainWindow min(4, mCnt_)Z 型扫描偶数行正向奇数行反向UpdateAivBasicBlock函数__aicore__ inline void UpdateAivBasicBlock()功能更新当前 tile 形状curML1InAiv, curNL1InAiv, curAlignedNInAiv。 算法说明curML1InAiv尾块使用剩余尺寸否则使用mL1_curNL1InAiv尾块使用剩余尺寸否则使用nL1_curAlignedNInAivND_FIXPIPE_1_2 模式对齐到 32BUpdateAivParams函数__aicore__ inline void UpdateAivParams(uint64_t index)功能更新 AIV 数据搬运参数copyGm2UbParams, copyUb2GmParams。 算法说明mBurstBaseCeilAlign(curML1InAiv / (kCnt_ * GetTaskRation()), 32 / curAlignedNInAiv)mBurstCntCeilDiv(curML1InAiv, mBurstBase)mBurstTailcurML1InAiv - (mBurstCnt - 1) * mBurstBaseoffsetWorkspaceGM(indexParams * kCnt_ * BLOCK_BASE_M * BLOCK_BASE_N) (kCntIndex * mBurstBase mBurst * index) * curAlignedNInAivoffsetCGmnCntIndex * nL1_ mCntIndex * mL1_ * n_ (kCntIndex * mBurstBase mBurst * index) * n_burstLenCeilAlign(mBurst * curAlignedNInAiv, 32)srcGapBLOCK_BASE_M * BLOCK_BASE_N - burstLendstGapn_ - curNL1InAiv事件同步事件用途MTE3_MTE2DP 模式下 AIC 与 AIV 同步MTE2_Vworkspace → UB 完成同步V_MTE3UB → GM 完成同步说明DP 模式下需要等待 AIC 完成写入 GMSK 模式下直接从 workspace 读取。调用示例组件组装using WorkspaceType float; using OutType half; using DispatchPolicy Blaze::Gemm::MatmulMultiBlockWithStreamKBlaze::Gemm::MatMulL0C2Out::ON_THE_FLY; using BlockEpilogue Blaze::Gemm::Block::BlockEpilogueStreamK WorkspaceType, OutType, DispatchPolicy;参数准备using Params typename BlockEpilogue::Params; Params params { cGmAddr, // C 矩阵 GM 地址 workspaceGmAddr // Workspace GM 地址 };组件初始化BlockEpilogue blockEpilogue; BlockShape blockShape{m, n, k}; BlockShape tileL1Shape{mL1, nL1, kL1}; BlockCoord coord{mCnt, nCnt, kCnt}; uint64_t usedCoreNum 8; bool checkIsSkScene true; // SK 模式 blockEpilogue.Init(params, blockShape, tileL1Shape, coord, usedCoreNum, checkIsSkScene);组件执行blockEpilogue(); // 或 blockEpilogue.Run();数据流存储层次Workspace (float) → UB → Add 汇聚 → Cast → ReLU → GM (OutType)执行流程UpdateAivBasicIndex (更新 tile 索引) ↓ UpdateAivBasicBlock (更新 tile 形状) ↓ AIV 并行循环aivMte2Num_ 次 ↓ UpdateAivParams (更新搬运参数) ↓ DataCopyPad: Workspace → UB (float) ↓ WaitFlagMTE2_V ↓ Add 循环K 轴切分累加 ↓ ReLU可选 ↓ Cast可选float → half/bfloat16 ↓ WaitFlagV_MTE3 ↓ DataCopyPad: UB → GM (OutType)Workspace 布局offsetWorkspaceGM indexParams * kCnt_ * BLOCK_BASE_M * BLOCK_BASE_N (kCntIndex * mBurstBase mBurst * index) * curAlignedNInAiv说明每个 tile 的 K 轴切分结果按顺序存储在 workspace 中间隔为BLOCK_BASE_M * BLOCK_BASE_N。GM 输出布局offsetCGm nCntIndex * nL1_ mCntIndex * mL1_ * n_ (kCntIndex * mBurstBase mBurst * index) * n_说明按 Z 型扫描顺序输出到 GM。性能优化建议AIV 并行度配置SK 模式aivMte2Num_ GetTaskRation()多 AIV 并行处理一个 AICDP 模式aivMte2Num_ BLOCK_CUBE单 AIV 处理建议SK 模式下增加 AIV 数量提升并行度K 轴切分累加累加循环for (i 1; i kCnt; i) { Add(ub, ub, ub[i * burstLen], burstLen); }首次 K 切分数据在ub[0]后续切分在ub[burstLen]开始类型转换优化float → half使用Cast(ubDst, ubSrc, RoundMode::CAST_RINT, burstLen)ReLU 位置float 输出在 Cast 前half 输出在 Cast 后L0C2Out 模式选择ON_THE_FLYCompact 模式srcGap计算alignedN - actualNND_FIXPIPE_1_2Normal 模式curAlignedNInAiv对齐到 32B数据对齐burstLen对齐到 32BsrcGap确保 K 轴切分数据正确间隔dstGap确保 GM 输出 N 轴正确间隔适用场景StreamK KernelAIC AIV 双核协同K 轴切分汇聚多个 K 切分结果累加类型转换float → half/bfloat16ReLU 激活可选 ReLU 后处理【免费下载链接】ops-tensorops-tensor 是 CANN Compute Architecture for Neural Networks算子库中提供张量类计算的基础算子库采用模块化设计支持灵活的算子开发和管理。项目地址: https://gitcode.com/cann/ops-tensor创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关文章:

CANN/ops-tensor StreamK矩阵乘后处理块

Block Epilogue StreamK 【免费下载链接】ops-tensor ops-tensor 是 CANN (Compute Architecture for Neural Networks)算子库中提供张量类计算的基础算子库,采用模块化设计,支持灵活的算子开发和管理。 项目地址: https://gitc…...

2026年盘点最好的5款许可优化工具

你有没有遇到过这种情况:研发部门天天喊许可证不够用,采购那边一年几百万的软件授权费还在往上涨,结果你一查,发现有人开着一个几万块的CAD软件,人已经去开了一个小时的会。钱就这么白白烧掉了。我今年专门把这行摸了一…...

为什么angular-dragdrop是AngularJS开发者的必备工具?

为什么angular-dragdrop是AngularJS开发者的必备工具? 【免费下载链接】angular-dragdrop Implementing jQueryUI Drag and Drop functionality in AngularJS (with Animation) is easier than ever 项目地址: https://gitcode.com/gh_mirrors/an/angular-dragdro…...

这五家软件许可优化的公司,我直接说结论。

你要是搞工程设计软件的(CAD、SolidWorks、CATIA这些),在国内,闭眼找。 你要是啥软件都有一大堆,不差钱人也多,上OptiCore(优化内核)。 你要是全在云上跑、主用微软全家桶&#xf…...

城市综合管廊远程监控与智慧运维系统方案

某新区城市建设综合管廊,涵盖电力、燃气、供排水、通信等多种生命线,部署有风机、排水泵、电动阀门、气体传感器、温湿度传感器、液位传感器等设备,核心控制器为西门子PLC(S7协议),负责采集管廊内气体浓度、…...

使用Taotoken后我的API调用延迟与用量清晰可见

🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 使用Taotoken后我的API调用延迟与用量清晰可见 作为一名频繁调用各类大语言模型的独立开发者,管理多个API密钥、追踪不…...

Android屏幕共享技术方案如何实现跨设备实时传输?AndroidScreenShare项目深度解析

Android屏幕共享技术方案如何实现跨设备实时传输?AndroidScreenShare项目深度解析 【免费下载链接】AndroidScreenShare Android 屏幕共享, 共享你的屏幕和音频到另一台手机 Share your screen and voice to other phone 项目地址: https://gitcode.com/gh_mirro…...

独立开发者如何利用Taotoken构建多模型备用方案

🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 独立开发者如何利用Taotoken构建多模型备用方案 对于独立开发者而言,项目的技术栈选择与成本控制至关重要。在集成大模…...

不用命令行!OpenClaw 2.7.5 Win11 专属部署,双击直达本地 AI 助手

前言 本教程专为Windows用户设计,提供可视化部署方案。通过专用部署包实现全程图形化操作,彻底告别命令行和手动配置环境。即使是零基础用户也能轻松完成部署,快速搭建专属数字员工系统,显著提升工作效率。教程完美适配Windows 1…...

10个Tunasync配置技巧:从基础到高级应用

10个Tunasync配置技巧:从基础到高级应用 【免费下载链接】tunasync Mirror job management tool. 项目地址: https://gitcode.com/gh_mirrors/tu/tunasync Tunasync 是一款强大的镜像作业管理工具,能够帮助用户轻松配置和管理各种镜像同步任务。…...

Moonlight安卓端阿西西版社区贡献指南:如何提交PR与功能建议

Moonlight安卓端阿西西版社区贡献指南:如何提交PR与功能建议 【免费下载链接】moonlight-android Moonlight安卓端 阿西西修改版 项目地址: https://gitcode.com/gh_mirrors/moo/moonlight-android Moonlight安卓端阿西西版是一款基于官方Moonlight安卓端进行…...

CANNBot Triton-Ascend Amin归约原子操作优化案例

【免费下载链接】cannbot-skills CANNBot 是面向 CANN 开发的用于提升开发效率的系列智能体,本仓库为其提供可复用的 Skills 模块。 项目地址: https://gitcode.com/cann/cannbot-skills name: triton-ascend-case-reduction-amin-atomic description: "…...

5分钟快速搭建Windows RTMP流媒体服务器:新手完整指南

5分钟快速搭建Windows RTMP流媒体服务器:新手完整指南 【免费下载链接】nginx-rtmp-win32 Nginx-rtmp-module Windows builds. 项目地址: https://gitcode.com/gh_mirrors/ng/nginx-rtmp-win32 想要在Windows系统上搭建自己的直播服务器吗?nginx…...

终于有人说清楚经营分析会怎么开了!一篇看懂经营分析会全流程

各位老板有没有想过,为什么你的经营分析会越开越多?有的企业月月开、周周开,甚至恨不得天天开。会一多,人就麻木了,翻来覆去讲同样的数据、追同样的问题,真正该花时间去解决的业务卡点,反而没人…...

在Taotoken模型广场根据任务需求与预算快速选型实践

🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 在Taotoken模型广场根据任务需求与预算快速选型实践 面对众多大模型,如何为自己的项目选择一个既满足需求又符合预算的…...

7天职场内耗清零打卡计划

7天职场内耗清零打卡计划(极简好坚持)每天 3 件小事,不累不费脑,7 天稳住心态第一天:断胡思乱想别人随口一句话,当场听完就翻篇,绝不反复琢磨上班只盯自己手头事,不偷看别人忙不忙、…...

口碑最好的AI论文工具推荐(从文献整理到论文成稿全流程)适合全体毕业生

论文选题没思路、文献检索耗时长、开题报告写不出、初稿逻辑混乱、查重反复修改、答辩PPT难打磨?面对论文写作的重重难关,作为学术新手、应届生或本科硕士毕业生,你是否也感到力不从心?论文流程复杂、环节繁多、上手门槛高&#x…...

slambook-en学习路线图:从初学者到专家的10个关键步骤

slambook-en学习路线图:从初学者到专家的10个关键步骤 【免费下载链接】slambook-en The English version of 14 lectures on visual SLAM. 项目地址: https://gitcode.com/gh_mirrors/sl/slambook-en 想要掌握视觉SLAM技术但不知从何开始?&#…...

毕业论文难写?2026年AI写作辅助网站排行榜权威发布,轻松定稿不是梦!

写论文效率低、熬夜赶稿、查重不过关?别慌!2026 年最新 AI 论文写作工具合集来了,覆盖选题、大纲、初稿、润色、降重、格式、文献引用全流程,帮你精准匹配最适合的学术助手,彻底告别论文内耗!🏆…...

利用Taotoken模型广场为AIGC应用选择性价比最优的文本生成模型

🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 利用Taotoken模型广场为AIGC应用选择性价比最优的文本生成模型 对于AIGC应用开发者而言,文本生成模型的选择直接影响着…...

10分钟终极指南:使用Chronos时间序列预测模型快速上手

10分钟终极指南:使用Chronos时间序列预测模型快速上手 【免费下载链接】chronos-forecasting Chronos: Pretrained Models for Time Series Forecasting 项目地址: https://gitcode.com/GitHub_Trending/ch/chronos-forecasting 想要在几分钟内完成专业级的时…...

Wannakey终极指南:免费恢复WannaCry加密文件的专业内存密钥恢复工具

Wannakey终极指南:免费恢复WannaCry加密文件的专业内存密钥恢复工具 【免费下载链接】wannakey Wannacry in-memory key recovery 项目地址: https://gitcode.com/gh_mirrors/wa/wannakey Wannakey是一款专为恢复WannaCry勒索软件加密文件而设计的免费开源工…...

如何快速掌握UESave:3个高效编辑游戏存档的秘诀

如何快速掌握UESave:3个高效编辑游戏存档的秘诀 【免费下载链接】uesave Rust library and CLI to read and write Unreal Engine save files 项目地址: https://gitcode.com/gh_mirrors/ue/uesave 你是否曾因游戏存档损坏而失去珍贵的游戏进度?是…...

HTML到DOCX格式转换的技术实现与解决方案

HTML到DOCX格式转换的技术实现与解决方案 【免费下载链接】html-to-docx HTML to DOCX converter 项目地址: https://gitcode.com/gh_mirrors/ht/html-to-docx 在Web应用开发和企业文档处理流程中,HTML内容与Office文档格式之间的转换一直是一个技术难点。传…...

如何让老旧Windows系统重新获得安全更新:Legacy Update完整解决方案

如何让老旧Windows系统重新获得安全更新:Legacy Update完整解决方案 【免费下载链接】LegacyUpdate Get back online, activate, and install updates on your legacy Windows PC 项目地址: https://gitcode.com/gh_mirrors/le/LegacyUpdate 还在为Windows X…...

抓包科普小知识

1、什么是抓包 抓包就是将网络传输发送与接收的数据包进行截获、重发、编辑、转存等操作,通过抓包可以: 分析网络问思路就是设置一个中间人进程负责抓包,每次目标进程之间的会话都先与中间人进程通信,再进行转发。业务分析分析网…...

Ladybug终极指南:专业气象数据分析与可视化工具

Ladybug终极指南:专业气象数据分析与可视化工具 【免费下载链接】ladybug 🐞 Core ladybug library for weather data analysis and visualization 项目地址: https://gitcode.com/gh_mirrors/lad/ladybug Ladybug是一个功能强大的Python库&#…...

缺失数据可视化图表开发实战|Highcharts创建人员出生统计面积图表示例

完整可运行代码<!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>面积图 - 男孩姓名出生人数</t…...

Rufus系统兼容性架构升级:Windows 7支持终止的技术决策分析

Rufus系统兼容性架构升级&#xff1a;Windows 7支持终止的技术决策分析 【免费下载链接】rufus The Reliable USB Formatting Utility 项目地址: https://gitcode.com/GitHub_Trending/ru/rufus Rufus作为业界领先的USB启动盘制作工具&#xff0c;在v4.5版本中做出了终止…...

11 极物科技 JetLinks MQTT 直连设备功能调用完整流程与 Python 实现

1. 前言 JetLinks作为开源的IoT物联网平台&#xff0c;提供了完善的设备接入、物模型管理、功能调用等核心能力&#xff0c;其中MQTT协议是设备与平台直连的主流方式。本次测试以继电器设备为核心测试载体&#xff0c;继电器具备明确的“通/断”二元状态&#xff0c;且状态变更…...