资讯详情

PTO-ISA 中的 TMATMUL_MX HiF4:Ascend A6(dav-920r1)Cube 矩阵乘流水线与 Ea/Eb/Ec 三级缩放实战解析

发布时间:2026/9/20 7:46:21

500+
企业客户服务经验
120+
行业领域内容覆盖
3000+
原创页面设计沉淀
98%
客户满意度

PTO-ISA 中的 TMATMUL_MX HiF4:Ascend A6(dav-920r1)Cube 矩阵乘流水线与 Ea/Eb/Ec 三级缩放实战解析

人工智能指令集算子库CANNAscend【免费下载链接】pto-isaParallel Tile Operation (PTO) is a virtual instruction set architecture designed by Ascend CANN, focusing on tile-level operations. This repository offers high-performance, cross-platform tile operations across Ascend platforms.项目地址https://gitcode.com/cann/pto-isa点击查看免费下载导读本文围绕 PTO-ISA 虚拟指令集中的TMATMUL_MX指令聚焦其hifloat4x2_tHiF44-bit重载在 Ascend A6dav-920r1架构上的 Cube 矩阵乘实现。文章以 TMATMUL_MX_HIF4.md 为骨架结合仓库中 A6 指令头文件与 ST 测试用例完整讲解 HiF4 数据与 Ea/Eb/Ec 三级缩放因子的内存布局、TLOAD → TEXTRACT → TMATMUL_MX → TSTORE四级流水线、L0C 容量约束下的 N 分块策略以及如何通过gen_data.py生成数据并跑通端到端用例。读完本文你将掌握在 PTO-ISA 上编写与验证 HiF4 Cube 矩阵乘内核的核心方法与底层原理。HiF4 是什么TMATMUL_MX 的 hifloat4x2_t 重载TMATMUL_MX是 PTO-ISA 中面向 Cube 单元的 MXMicroscaling矩阵乘指令。当左右操作数都声明为hifloat4x2_t类型时该指令执行HiF4HiFloat4矩阵乘A、B 两个操作数都是 4-bit 压缩数据且各自携带三级 HiF4 缩放因子Ea / Eb / Ec。计算在 L0C 中以FP32累加结果通常通过 FIXPIPE 转换为 BF16 后经TSTORE写回 GM。这是 A6dav-920r1上的 HiF4 矩阵乘流水线GM (BF16) ──TLOAD──▶ L1 ──TEXTRACT──▶ L0A/L0B L0AMX/L0BMX ──TMATMUL_MX──▶ L0C (FP32) ──TSTORE──▶ GM (BF16)其中TLOAD加载 HiF4 数据GM→L1同时加载缩放字节GM→L1使用HIF4_A_ZZ/HIF4_B_NN布局。数据搬运使用copy_gm_to_cbuf_multi_nd2nz完成 ND→NZ 分形转换其实现位于 TLoad.hpp。TEXTRACT把数据从 L1 搬到 L0A/L0B走load_c_buf_to_ca_s4的 s4 路径因为 HiF4 是 4-bit 打包类型把缩放因子从 L1 搬到 L0AMX/L0BMX。在 TExtract.hpp 中hifloat4x2_t被显式纳入 fp4 类类型判断isFp4Type并针对TileType::ScaleLeft/ScaleRight分别派发到TExtractToAmx/TExtractToBmx。TMATMUL_MXCube 单元执行mad_mx携带hifloat4x2_t类型标记三级 Ea/Eb/Ec 缩放应用在指令内部完成。TSTOREFIXPIPE 将 FP32 结果转成 BF16 并写回 GM。HiF4 标准可参考 TQUANT_HIF4.mdHiF4 量化与 Ea/Eb/Ec 的生成规则CCE 侧的实现在 TQuant.hpp、TMatmul.hpp、TLoad.hpp、TExtract.hpp。指令级实现约束CheckMadMxValid 与支持的数据类型组合TMATMUL_MX的合法性由模板校验函数CheckMadMxValid强制定义在 TMatmul.hpp。与 HiF4 相关的关键约束包括支持的类型组合A6 架构下才有 HiF4 分支A/B 均为hifloat4x2_tisSupportedHif4Combo或 A 为float8_e4m3_t/half/bfloat16_t且 B 为hifloat4x2_tisSupportedFp8Hif4Combo/isSupportedFp16Hif4Combo/isSupportedBf16Hif4Combo。非 A6 架构下这些组合恒为false编译期即被排除。累加器类型必须为floatstatic_assert(std::is_same_vCType, float, ...)保证 L0C 累加精度。K 维度约束TileLeft::Cols必须是 64 的倍数BASEK 64对 FP4/HiF4 数据类型aMatrixCol还必须是偶数。分形布局约束Left 为ColMajor RowMajor SFractalRight 为RowMajor ColMajor SFractalAcc 为ColMajor RowMajor SFractal不满足则编译失败。L0C 容量约束Rows × Cols × sizeof(float) PTO_L0C_SIZE_BYTES。PTO_L0C_SIZE_BYTES在 buffer_limits.hpp 中按架构定义A5 与 A6 均为 256 KBKIRINX90/A2A3 为 128 KBKIRIN9030 为 64 KBKIRINDEV0000 跟随 CBUF 大小。HiF4 用例的 L0C 假设正是 256 KB见下节。Ea/Eb/Ec 三级缩放64 字节补丁的内存布局每个 HiF4 缩放补丁覆盖一个 M 或 N 分形 × 一个 K 组64 个元素补丁大小为64 字节内部结构如下字节 0..31: [Ea(g0), Eb(g0), Ea(g1), Eb(g1), ... × 16 组] (EaEb 半区) 字节 32..63: [Ec_lo(g0), Ec_hi(g0), ... × 16 组] (Ec 半区)Ea8-bit e6m2 指数每个 64 元素组一个。Eb8-bit 打包每个 8 元素子组一个全部 8 位保留。Ec16-bit 打包每个 4 元素子组一个。从量化算法理解三级缩放gen_data.py 中的hif4_quantize第 227-257 行给出了三级缩放的完整生成逻辑可以帮助理解每个缩放因子的物理含义对 BF16 源数据按 64 元素组取绝对值最大值得到ma经bf16_to_e6m2量化成 Eae6m2 指数偏置 48指数范围 -48~15尾数 2 bit即docs/isa/TQUANT_HIF4.md描述的 e6m2 格式对每个 8 元素子组求mb与 Ea 的倒数相乘后eb_bits (mb * ea_rec 4.0)得到 1-bit Eb大于等于 4 时 Eb1反比缩放因子取 0.5对每个 4 元素子组求mc依次乘上 Ea、Eb 的倒数后ec_bits (mc * ... 2.0)得到 1-bit Ec最终每个元素的有效缩放为scale ea_rec × eb_rec × ec_rec数据按fp4_codes (sign 3) | e1m2_mantissa打包成 HiF4 nibble。也就是说HiF4 是在传统每 32 元素一个 e8m0 缩放MX 标准之上的三级金字塔缩放Ea 给出 64 组量级Eb/Ec 各用 1 bit 做 2 倍步进的二次、三次修正从而在 4-bit 尾数下获得远高于普通 fp4-MX 的动态范围。补丁在 GM 上的排布HIF4_A_ZZ 与 HIF4_B_NNgen_data.py的_build_hif4_scale_patch_layout第 312-325 行按row_fractals × k_groups组织补丁每个补丁内部是2 × 16 × 2的视图前半区按[Ea(g), Eb(g)]交错排列 16 个组后半区按[Ec_lo(g), Ec_hi(g)]排列。A 侧使用HIF4_A_ZZ布局BaseShape2D/TileShape2D 定义B 侧使用HIF4_B_NN布局同文件第 1009-1040 行附近两个 Layout 枚举定义于 type.hpp并由convert_x1/x2_scale_format负责 M/N 轴按 16 对齐补零block_size16。为什么 Eb 能保留全部 8 位pstu vstas 取代 DS_B8CCE 侧的 TQuant 实现TQuant.hpp在存储 Eb 时使用pstu谓词 → 对齐寄存器vstas对齐 → UB的组合pstu以输出频率把 1-bit 谓词打包进对齐寄存器再由vstas刷入 UB。这避免了旧方案DS_B8降采样把 Eb 的 b4–b7 丢弃的问题从而保证 8 个 Eb 位全部保留、缩放精度不损失。L0C 容量与 N 分块当 M×N×4 超过 256 KB 时L0C 为 256 KBFP32 累加时每个元素占 4 字节。当M × N × 4 256 KB时内核按 N 方向分块。测试内核 tmatmul_mx_kernel.cpp 中RunMxHif4ABImpl给出了精确实现constexpr uint64_t L0C_SIZE_BYTES 256u * 1024u; constexpr int tileNRaw static_castint(L0C_SIZE_BYTES) / (M * 4); constexpr int tileNCapped (tileNRaw N) ? tileNRaw : N; constexpr int tileN CeilAlignint(tileNCapped, 64); constexpr int nTiles (N tileN - 1) / tileN; static_assert(M * tileN * 4 static_castint(L0C_SIZE_BYTES), tiled accumulator exceeds L0C);即tileN floor(L0C_SIZE / (M × 4))并向下取整到 64TEXTRACT 列对齐要求。分块循环MxRunTiledMatmul第 104-141 行遵循以下原则A 侧只加载/提取一次A 的数据与缩放TileMatA/TileScaleA在循环前由MxSetupLoadExtractA一次性完成 TLOAD TEXTRACT跨 N 分块共享每次迭代通过TEXTRACT(bl0, bMatTile, 0, j * tileN)提取tileN宽的 B 列切片数据 缩放执行TMATMUL_MX输出通过GlobalTensor的StridevalidM*validN, ..., validN, 1步幅描述以TSTORE将M × tileN块写入 GM 的out j * tileN偏移处行步幅为 N分块之间用set_flag/wait_flagPIPE_FIX → PIPE_MTE1保证上一块存储完成后才开始下一块提取。代码注释指出分块场景的 L0C 容量前提tileNRaw L0C_SIZE_BYTES / (M*4)nTiles ceil(N / tileN)。以 512×128×512 用例为例M512, N512tileNRaw 256KB/(512×4) 128tileN 128nTiles 4每次在 L0C 中驻留 512×128×4B 256 KB 的 FP32 累加块正好占满 L0C。累加器 dtypeL0C 恒为 FP32无论 A/B 是 e1m2、e2m1、e4m3、fp16/bf16 还是 HiF4TMATMUL_MX的累加器类型始终是float4 字节由 TMatmul.hpp 中的编译期断言强制static_assert( (isFp4 || isFp8 || ... || isHif4) std::is_same_vCType, float, TMatmulMX:No supported data type combination.); ... constexpr size_t accBytes Rows * Cols * sizeof(CType); static_assert(accBytes PTO_L0C_SIZE_BYTES, TMatmulMX:accumulator (Rows*Cols*sizeof(out)) exceeds L0C capacity.);这也是上节 N 分块公式中“每个元素占 4 字节”的来源。测试代码中用TileAccfloat, M, N, validM, validN如RunMxHif4ABImpl中的AccTile TileAccfloat, M, tileN, validM, tileN与之对应。端到端验证ST 测试用例与数据生成用例清单与覆盖文档列出的两组核心用例在测试工程中均有对应实现测试用例形状M×K×N用途tmatmul_mx_hif4case 18-26128×128×128、128×256×128、256×128×128、64×64×64、256×256×256、128×512×128、512×128×512、128×128×256、256×128×512HiF4 Cube 矩阵乘端到端tmatmul_mx_e1m2case 1/2e1m2×e1m2128×128×128 等e1m2 MX 参考用例相同流水线普通 MX 缩放此外测试还覆盖了混合精度组合e4m3×hif4case 12/13/35、fp16×hif4case 14/15/34、bf16×hif4case 16/17/29以及 GEMV 形态1×256×64case 27-29。这些用例注册于 main.cpp 的CASE宏如case_mmad_mx_hif4hif4_128x128x128形状配置见同文件第 59-94 行的CFG宏与CaseConfig。数据与 golden 生成gen_data.py 是数据生成脚本要点如下输入数据用np.random.default_rng(100 case_id)生成 BF16 矩阵并按 64 元素组叠加 0.5~10.0 的随机量级make_bf16_matrix以覆盖三级缩放的动态范围HiF4 量化输出三份文件a_data.bin/b_data.binfp4 nibble 打包的 0.5 B/元素数据、a_scale.bin/b_scale.bin按HIF4_A_ZZ/HIF4_B_NN布局的缩放字节、golden_out.bin用a_deq b_deq在 host 上反量化后计算的 BF16 参考结果运行方式python3 gen_data.py生成全部 35 个用例或python3 gen_data.py --case 18只生成单个用例host 端字节数计算aScaleBytes/bScaleBytesmain.cpp 第 120-130 行与gen_data.py的 M/N 轴 16 对齐逻辑一致HiF4 缩放的 GM 缓冲比原始M*K/32元素数更大因为分形布局把 MA 侧/NB 侧补零到 16 的倍数再按每 64 元素组 × 4 字节组织。用例装配与比对流程main.cpp 的RunCase第 190-229 行演示了完整的 host 侧流程aclInit→aclrtSetDevice(0)→aclrtCreateStream初始化 ACL 环境读取a_data.bin、a_scale.bin、b_data.bin、b_scale.bin经aclrtMemcpyH2D 上传调用TmatmulMxA6::LaunchcaseId拉起内核kernel 侧实现见 tmatmul_mx_kernel.cpp 的LAUNCH_HIF4AB宏case 18-26 对应RunMxHif4ABMatmulM,K,NaclrtSynchronizeStream同步后 D2H 取回output.bin解析为 BF16 值与golden_out.bin逐元素比较容差 0.03ResultCmpfloat(goldenVals, outVals, 0.03f)。该测试用例通过 tests/npu/a6/src/st/testcase/CMakeLists.txt 注册进ALL_TESTCASES列表构建时对 kernel 使用--cce-aicore-archdav-920r1-cube编译第 49-59 行的pto_cube_st函数host 侧通过RUN_MODE区分simruntime_camodel 仿真与npu真实 runtime两种运行模式。手工示例编写一个 HiF4 矩阵乘内核的关键代码模式从RunMxHif4ABImpl可以提炼出编写 HiF4 矩阵乘内核的固定套路// 1. Tile 声明数据 缩放分别声明 using TileMatA TileTileType::Mat, hifloat4x2_t, M, K, BLayout::ColMajor, validM, validK, SLayout::RowMajor, TileConfig::fractalABSize; using TileScaleA TileTileType::Mat, uint8_t, M, scaleKCols, BLayout::RowMajor, validM, scaleKCols, SLayout::RowMajor, 32; // scaleKCols (validK / 64) * HIF4_COL_LENHIF4_COL_LEN 4见 include/pto/common/constants.hpp:45 // 2. GM 侧数据用 ND 步幅缩放用 MX/HiF4 专用 Layout using GlobalScaleA GlobalTensoruint8_t, TileShape2Duint8_t, M, scaleK, Layout::HIF4_A_ZZ, BaseShape2Duint8_t, M, scaleK, Layout::HIF4_A_ZZ; using GlobalScaleB GlobalTensoruint8_t, TileShape2Duint8_t, scaleK, N, Layout::HIF4_B_NN, BaseShape2Duint8_t, scaleK, N, Layout::HIF4_B_NN; // 3. L0 侧TileLeft/TileRight TileLeftScale/TileRightScale using LeftScaleTile TileLeftScaleuint8_t, M, scaleKCols, validM, scaleKCols; using RightScaleTile TileRightScaleuint8_t, scaleKCols, tileN, scaleKCols, tileN; using AccTile TileAccfloat, M, tileN, validM, tileN; // 4. 缩放 L0 地址紧邻数据 L0 的高半区 TASSIGN(al0, L0A_BUF0); TASSIGN(aScaleL0, GetScaleAddr(al0.data())); // 5. 计算 TMATMUL_MX(cTile, al0, aScaleL0, bl0, bScaleL0);其中GetScaleAddr用于获取数据 L0 地址对应的缩放 L0AMX/L0BMX 地址scaleKCols说明 HiF4 缩放是按“64 元素组 × 4 字节”组织的对比普通 MX 的每 32 元素 1 字节 e8m0HiF4 每组缩放体积更大。总结TMATMUL_MX的 HiF4 重载把 4-bit 打包数据与 Ea/Eb/Ec 三级缩放搬上 A6dav-920r1Cube 流水线其要点可概括为流水线TLOAD → TEXTRACT → TMATMUL_MX → TSTORE缩放数据与主数据并行搬运L0AMX/L0BMX 独立于 L0A/L0B缩放布局每 64 元素组一个 64 字节补丁前 32 字节为 Ea/Eb 交错、后 32 字节为 EcA 侧HIF4_A_ZZ、B 侧HIF4_B_NN分形布局M/N 轴按 16 对齐精度设计L0C 恒为 FP324 B/元素CheckMadMxValid在编译期强制类型组合、K 对齐64 的倍数、分形布局与 256 KB 容量上限大 shape 处理M×N×4 256 KB时按 N 分块tileN floor(256KB/(M×4))并对齐到 64A 侧只加载一次验证闭环gen_data.py生成量化数据与 BF16 goldenST 用例以 0.03 容差比对覆盖 9 组 HiF4×HiF4 shape、多组混合精度组合与 GEMV 形态。如需深入可继续阅读 TQUANT_HIF4.mdHiF4 量化标准、TQUANT_DN.md数据归一化以及 PTO-Virtual-ISA-Manual.md 中关于 L0/L1 内存模型与 Cube 流水线的整体描述。赞分享人工智能指令集算子库CANNAscend【免费下载链接】pto-isaParallel Tile Operation (PTO) is a virtual instruction set architecture designed by Ascend CANN, focusing on tile-level operations. This repository offers high-performance, cross-platform tile operations across Ascend platforms.项目地址https://gitcode.com/cann/pto-isa点击查看免费下载相关推荐TMATMUL_MX HiF4 深度解析Ascend PTO 上基于 HiFloat4 三级缩放因子的 Cube 矩阵乘TMATMUL_MX HiF4 深度解析Ascend PTO 上基于 HiFloat4 三级缩放因子的 Cube 矩阵乘 本指南聚焦 CANN pto isa人工智能指令集算子库CANNAscendTMATMUL_MX 指令详解PTO 混合精度/量化矩阵乘法的 Tile 级实现与编程指南TMATMUL_MX 指令详解PTO 混合精度/量化矩阵乘法的 Tile 级实现与编程指南 导读 TMATMUL_MX 是 Ascend CANN PTO人工智能指令集算子库CANNAscendCANN PTO-ISA TMATMUL 指令详解Tile 级矩阵乘法GEMM的语义、约束与编程实战CANN PTO ISA TMATMUL 指令详解Tile 级矩阵乘法GEMM的语义、约束与编程实战 导读 TMATMUL 是 CANN PTO ISA人工智能指令集算子库CANNAscend创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
热门专题

继续阅读更多专题内容

围绕企业服务、数字化转型与官网运营的常青话题,持续输出深度内容

企业官网建设指南 企业托管服务模式 财税政策与解读 企业数字化转型 官网SEO与获客 网站安全与运维
配套服务

读完这篇文章,了解更多服务

从整站搭建到SEO布局,17项核心服务助您打造高转化的企业官网

01

企业托管整站搭建

从信息架构到栏目预留,搭建可生长的企业站点骨架,每个页面独立原创设计。...

了解详情
02

规整可信网页设计

雪地靴温暖风原创设计,金属铜线条贯穿全页,拒绝通用模板与AI流水线。...

了解详情
03

企业服务SEO布局

关键词体系与语义化结构,从建站源头为搜索排名而生。...

了解详情
04

业务预约咨询表单

多场景表单与线索收集体系,把访问流量转化为可追踪的销售线索。...

了解详情
05

企业服务站点运维

安全巡检、数据备份与内容更新支持,全年守护网站稳定运行。...

了解详情
06

全终端商务适配

电脑、平板、手机一致呈现,移动端体验与转化同样出色。...

了解详情
需要专业建议?

让专业顾问为您解读行业趋势

关于企业官网建设、SEO获客与数字化转型的任何疑问,欢迎一对一咨询我们的专业顾问。