news 2026/6/15 20:06:26

Qwen3 + NPU 仿真实战 二. MAC 单元设计

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Qwen3 + NPU 仿真实战 二. MAC 单元设计

Qwen3 + NPU 仿真实战

第二节:单个 MAC 单元设计(16×16 阵列,支持 INT8/BF16)


1. MAC 单元在 LLM 推理中的作用

Qwen3 推理的主要计算量来自矩阵乘法(MatMul/Linear),涵盖 QKV 投影、Attention Score 计算、MLP 等线性算子。NPX6 的 MAC 阵列用于加速这些乘累加运算。

1.1 Feature Map 与 Coefficient 在 LLM 中的对应

NPU 术语LLM 对应说明
Feature Map (FM)激活值输入 hidden states、Q/K/V 向量
Coefficient (CF)权重Wq、Wk、Wv、Wo、gate/up/down_proj

以 Qwen3 0.6B 的 Q 投影为例(hidden_size=1024):FM 形状为 [batch, seq_len, hidden_size],CF(Wq)形状为 [hidden_size, hidden_size],即 [batch, seq_len, 1024] × [1024, 1024]。


2. 16×16 MAC 阵列结构

2.1 阵列维度参数

参数含义
ISIZE16通道向量化维度
VSIZE8空间向量化维度
单元 MAC 数256ISIZE × ISIZE

BF16 浮点模式下,阵列内 256 路乘法并行产生乘积,并对每个输出通道的 16 个乘积求和,形成 16 个输出通道的部分和。

注意:阵列的物理维度由ISIZE决定,与mpy_cfg_t选择的 INT8/BF16/FP16 模式无关;不同数据格式复用同一 16×16 乘法阵列。

Slice 级吞吐差异:单个 Slice 在 INT8(i_8b8b_e)模式下每周期提供 4096 个 8b×8b MAC;在 BF16/FP16(f_bfloat16_e/f_fp16_e)模式下每周期等效 1024 个 16b×16b MAC,吞吐约为 INT8 的 1/4。
原因:INT8 模式下每个乘法单元每周期产生两路 8b×8b 乘积(even/odd),而 BF16/FP16 模式下只产生一路尾数乘积且 Feature Map 为双宽输入需要两周期供数,因此 Slice 级有效并行度为 1/4。


3. BF16 数据格式

3.1 BF16 格式定义

BF16: [sign:1][exponent:8][fraction:7] = 16 bits
字段位宽说明
sign1 bit符号位
exponent8 bits指数,与 FP32 相同
fraction7 bits尾数 (隐含前导 1)

3.2 BF16 优势

以下为 BF16 的通用特性(IEEE bfloat16 标准),用于解释本节为何选 BF16 浮点模式作为示例,不属于 RTL 直接定义的参数。

  • 8 位指数提供与 FP32 相同的动态范围
  • 相比 FP32,权重存储占用理论上减半

4. MAC 单元流水线

4.1 流水线阶段

阶段模块功能
Stage 0输入寄存级(lane 内)FM/CF 输入与控制信号寄存
Stage 1npu_conv_mpy_mul16×16 BF16 乘法与最大指数提取
Stage 2npu_conv_mpy_sum乘积按最大指数对齐并部分求和
Stage 3npu_conv_mpy_sn最终求和(生成 lo/hi 部分和)
Stage 4npu_conv_mpy_norm浮点归一化与舍入
Stage 5npu_conv_mpy_acc32 位累加器更新

4.2 BF16 乘法器设计

每个 BF16 乘法器包含:

  • 11×11 位尾数乘法器 (含隐含 1)
  • 8 位指数加法器
  • 符号异或逻辑

4.3 求和与归一化

浮点模式下:mul 阶段生成乘积并找最大指数(maxexp);sum 阶段按 maxexp 对齐并部分求和;sn 阶段做最终求和;norm 阶段归一化后送入累加器。


5. 配置模式

模式编码Feature MapCoefficient
f_bfloat16_e7’b0100000BF16BF16
f_fp16_e7’b1000000FP16FP16
i_8b8b_e7’b0000001INT8INT8

BF16 浮点模式下,阵列部分和进入 32 位累加器(acc_t/ixacc_t),由npu_conv_mpy_acc执行浮点累加实现跨周期累加。


6. 与 Qwen3 推理的映射

6.1 分块策略

以 Q 投影(hidden_size=1024,对应权重矩阵 1024 × 1024)为例:

  1. 每次加载 16 个输入通道到 FM 寄存器
  2. 每次加载 16×16 权重块到 CF 寄存器
  3. MAC 阵列并行计算 256 个乘积并形成 16 个部分和
  4. 沿 K 维分块累加 64 次(1024/16),得到该 16 个输出通道块的最终结果
  5. 沿输出通道维重复 64 个块,覆盖全部 1024 个输出通道

6.2 计算效率

单个 16×16 MAC 单元每周期并行产生 256 个 BF16 乘积,并输出 16 个部分和。


7. 总结

NPX6 的 16×16 MAC 单元承担 Qwen3 推理中 MatMul/Linear 的主要计算:

  • 阵列结构:16×16 BF16 乘法器,每周期并行产生 256 个乘积、输出 16 个部分和
  • 数据映射:FM 对应激活值,CF 对应权重
  • 流水线:5 级计算流水(mul/sum/sn/norm/acc),前端含输入寄存级
  • 精度:BF16 格式平衡精度与效率
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/15 14:19:55

关于 RocketMQ 事务消息的正确打开方式 → 你学废了吗

知识回顾 本文不讲什么是 RocketMQ ,不讲它的实现原理,只想和大家探讨下它的事务消息的正确使用方式 再探讨之前,先带大家回顾下知识点 事务消息的设计原理 RocketMQ 在 4.3.0 版中已经支持分布式事务消息,采用 2PC 的思想实现事务…

作者头像 李华
网站建设 2026/6/14 21:00:52

【数据结构】建堆操作:向上调整与向下调整的数学推导与性能对比

🏠 个人主页: EXtreme35 📚 个人专栏: 专栏名称专栏主题简述《C语言》C语言基础、语法解析与实战应用《数据结构》线性表、树、图等核心数据结构详解《题解思维》算法思路、解题技巧与高效编程实践目录引言I. 堆操作的时间复杂度分析1. 堆的基本性质与…

作者头像 李华
网站建设 2026/6/15 19:22:06

运维转网安选赛道:放弃渗透测试执念,安全运维才是你的舒适区!

提到运维转行网安,很多人第一反应是 “学渗透测试,当黑客”—— 但渗透测试需要大量 “攻击技术” 的学习(如漏洞利用、Payload 构造、社会工程学),且对编程能力、逆向思维要求较高,很多运维从业者学了半年…

作者头像 李华
网站建设 2026/6/15 19:58:44

39、深入探索Shell的可移植性问题与扩展特性

深入探索Shell的可移植性问题与扩展特性 1. TMOUT变量对select语句的影响 TMOUT(超时)变量会对select语句产生影响。在select循环之前,将TMOUT设置为n秒,如果在这段时间内没有输入,select语句就会退出。 2. 扩展测试工具 ksh引入了由 [[ 和 ]] 界定的扩展测试工具…

作者头像 李华
网站建设 2026/6/15 19:36:57

42、Unix 安全脚本与手册编写全解析

Unix 安全脚本与手册编写全解析 1. 安全脚本基础 在 Unix 系统中,保障脚本安全是维护系统稳定的关键一环。首先来了解下受限 shell 的相关知识。受限 shell 能禁用一些潜在危险操作,不过要设置一个可用且正确受限的环境并非易事。在设置时,需确保 $PATH 目录下没有其他 …

作者头像 李华
网站建设 2026/6/15 19:14:31

五、操作符(C语言)

1、算数操作符(1)加(2)减-(3)乘*(4)除/A 整数的除法7/2B 浮点型的除法7.0/2 7/2.0 7.0/2.0(5)取模%int a 7 % 2; //输出1 //%的前后必须为整数2、移位操作符…

作者头像 李华