README.md

Blaze 架构概述

简介

Blaze (Basic Linear Algebra optimiZed Engine) 是一个高性能矩阵乘库,专为华为 Ascend NPU 平台优化。采用分层架构设计,提供灵活的组件组装能力,支持多种矩阵乘场景(Basic、StreamK、MX 量化)。

整体架构

+-----------------------------------------------------------------------+
|                          Application Layer                             |
|                     (User Code / Solution / Tiling)                    |
+-----------------------------------------------------------------------+
|  +--------------------------------------------------------------+      |
|  |                         Kernel Layer                         |      |
|  |  +------------------+  +-------------+  +-------------+      |      |
|  |  |KernelMatmulBasic |  |KernelStreamK|  |KernelQbmmMx |      |      |
|  |  |                  |  |             |  |             |      |      |
|  |  |+-----------------+  +-------------+  +-------------+      |      |
|  +--------------------------------------------------------------+      |
|
|        |                 |                 |                           |
|        V                 V                 V                           |
|  +--------------------------------------------------------------+      |
|  |                       Block Layer                             |     |
|  |  +-------------+  +-------------+  +-------------+            |     |
|  |  | Scheduler   |  |    Mmad     |  |  Epilogue   |            |     |
|  |  +-------------+  +-------------+  +-------------+            |     |
|  +--------------------------------------------------------------+      |
|                              |                                         |
|                              V                                         |
|  +--------------------------------------------------------------+      |
|  |                        Tile Layer                             |     |
|  |  +-------------+  +-------------+  +-------------+            |     |
|  |  | PadMxKL1    |  | CopyScale   |  | TileMmadMX  |            |     |
|  |  +-------------+  +-------------+  +-------------+            |     |
|  +--------------------------------------------------------------+      |
|                              |                                         |
|                              V                                         |
|  +--------------------------------------------------------------+      |
|  |                       Utils Layer                             |     |
|  |  +-------------+  +-------------+  +-------------+            |     |
|  |  | CommonUtils |  | LayoutUtils |  |  Constant   |            |     |
|  |  +-------------+  +-------------+  +-------------+            |     |
|  +--------------------------------------------------------------+      |
+-----------------------------------------------------------------------+
                                |
                                V
+-----------------------------------------------------------------------+
|                         Hardware Layer                                 |
|  +-----------+  +-----------+  +-----------+  +-----------+            |
|  |    GM     |  |    L1     |  |  L0A/L0B  |  |    L0C    |            |
|  +-----------+  +-----------+  +-----------+  +-----------+            |
|                              |                                         |
|                              V                                         |
|  +--------------------------------------------------------+            |
|  |                     Compute Units                      |            |
|  |  +----------+  +----------+  +----------+              |            |
|  |  |   AIC    |  |   AIV    |  |   Mmad   |              |            |
|  |  +----------+  +----------+  +----------+              |            |
|  +--------------------------------------------------------+            |
+-----------------------------------------------------------------------+

层级详解

Kernel Layer(Kernel 层)

职责:整体计算流程编排,GM Tensor 创建,多 Block 并行调度。

详细文档:Kernel 层 API

Block Layer(Block 层)

职责:单个 Block 的矩阵乘计算、任务调度、后处理。

详细文档:Block 层 API | Epilogue 层 API

Tile Layer(Tile 层)

职责:底层辅助组件,数据对齐、Scale 搬运、Trait 定义。

详细文档:Tile 层 API

Policy Layer(策略层)

职责:调度策略、配置模式定义。

详细文档:Policy 层

Utils Layer(工具层)

职责:公共工具函数、布局判断、常量定义。

详细文档:Utils 层

数据流示意图

Basic Kernel 数据流

┌───────────────────────────────────────────────────────────────┐
│                      GM (A, B, Bias)                          │
└────────────────────────────┬──────────────────────────────────┘
                             │ GM→L1 (BlockScheduler 调度)
                             ▼
┌───────────────────────────────────────────────────────────────┐
│                       L1 (双缓冲)                              │
│               A0|A1  B0|B1  Bias0|Bias1                       │
└────────────────────────────┬──────────────────────────────────┘
                             │ L1→L0 (BlockMmad 迭代)
                             ▼
┌───────────────────────────────────────────────────────────────┐
│                   L0A/L0B (双缓冲)                             │
│                     A_L0  B_L0                                │
└────────────────────────────┬──────────────────────────────────┘
                             │ Mmad 计算
                             ▼
┌───────────────────────────────────────────────────────────────┐
│                          L0C                                  │
│                      C 结果 (float)                           │
└────────────────────────────┬──────────────────────────────────┘
                             │ Fixpipe (L0C→GM)
                             ▼
┌───────────────────────────────────────────────────────────────┐
│                       GM (C 输出)                             │
└───────────────────────────────────────────────────────────────┘

组件组装示意图

┌───────────────────────────────────────────────────────────────┐
│                    Kernel 组装示例                             │
├───────────────────────────────────────────────────────────────┤
│ // 定义数据类型和布局                                           │
│ using AType = half;                                            │
│ using BType = half;                                            │
│ using LayoutA = AscendC::Te::NZLayoutPtn;                      │
│ using LayoutB = AscendC::Te::NZLayoutPtn;                      │
│                                                                │
│ // 定义 ProblemShape                                           │
│ using ProblemShape = Shape<int64_t, int64_t, int64_t, int64_t>;│
│                                                                │
│ // 组装 BlockScheduler                                         │
│ using BlockScheduler = BlockSchedulerMatmulBasic<...>;         │
│                                                                │
│ // 组装 BlockMmad                                              │
│ using BlockMmad = BlockMmad<                                   │
│     DispatchPolicy, AType, LayoutA,                            │
│     BType, LayoutB, CType, LayoutC, BiasType, LayoutBias>;     │
│                                                                │
│ // 组装 BlockEpilogue                                          │
│ using BlockEpilogue = BlockEpilogueEmpty;                      │
│                                                                │
│ // 组装 Kernel                                                 │
│ using Kernel = KernelMatmulBasic<                              │
│     ProblemShape, BlockMmad, BlockEpilogue, BlockScheduler>;   │
└───────────────────────────────────────────────────────────────┘

目录结构

blaze/
├── include/blaze/
│   ├── epilogue/            # Epilogue 层组件
│   │   ├── block_epilogue_empty.h
│   │   └── block_epilogue_matmul_streamk.h
|   └── gemm/
│       ├── kernel/              # Kernel 层组件
│       │   ├── kernel_matmul_basic.h
│       │   ├── kernel_matmul_streamk.h
│       │   ├── kernel_qbmm_mx.h
│       │   └── kernel_qbmm_mx_without_batch.h
│       │
│       ├── block/               # Block 层组件
│       │   ├── block_mmad.h          # BlockMmad 基类
│       │   ├── block_mmad_matmul_basic.h    # Matmul Basic BlockMmad
│       │   ├── block_mmad_matmul_streamk.h  # Matmul StreamK BlockMmad
│       │   ├── block_mmad_qbmm_mx.h         # Qbmm MX BlockMmad
│       │   ├── block_scheduler_matmul_basic.h
│       │   ├── block_scheduler_matmul_streamk.h
│       │   └── block_scheduler_qbmm.h
│       │
│       ├── tile/                # Tile 层组件
│       │   ├── tile_mmad_mx.h
│       │   ├── pad_mx_kl1.h
│       │   ├── copy_scale_l1_to_l0a.h
│       │   └── copy_scale_l1_to_l0b.h
│       │
│       ├── policy/              # Policy 层
│       │   └── dispatch_policy.h
│       │
│       └── utils/               # Utils 层
│       ├── common_utils.h
│       ├── layout_utils.h
│       └── quant_batch_matmul_constant.h
│
└── docs/API/                # API 文档
    ├── README.md            # 本文档
    ├── epilogue/            # Epilogue 层文档
    |   └── block/                # Block 层文档
    └── gemm/                # Gemm 层文档
        ├── kernel/              # Kernel 层文档
        ├── block/               # Block 层文档
        └── tile/                # Tile 层文档

快速开始

1. 查看架构图

了解 Blaze 分层设计和数据流 → 本文档

2. 选择 Kernel 类型

根据场景选择 Basic、StreamK 或 MX → Kernel 层 API

3. 组装 Block 组件

选择 BlockScheduler、BlockMmad、BlockEpilogue → Block 层 API

4. 了解底层组件

Tile 层辅助组件 → Tile 层 API

5. 配置策略

调度策略和配置 → Policy 层

版本信息

  • 平台:华为 Ascend NPU(3510 架构)
  • 编译器:ASC_DEVKIT_MAJOR >= 9
  • 量化格式:MxFP4(fp4x2_e2m1_t, fp4x2_e1m2_t)、MxFP8(fp8_e5m2_t, fp8_e4m3fn_t)
  • Scale 格式:fp8_e8m0_t(E8M0 浮点)