本章介绍近存计算和存内计算的基本概念、分类体系和核心原理。通过简单的4×4矩阵示例,我们将直观展示PIM如何减少数据搬移,以及基本的能耗和性能模型。这些基础知识将为后续深入探讨各类PIM架构奠定基础。
PIM的概念并非新生事物,其演进历程反映了计算机体系结构的发展脉络:
1969年:Stone的逻辑增强存储器
1970s:专用数据库机器的黄金时代
1980s:VLSI时代的新尝试
1990s:与主流技术融合的尝试
1990s末期的其他尝试:
这些项目的共同特点:
2000s:多核时代的内存墙
处理器与内存性能差距的定量分析:
内存墙的根本原因:
性能差距的量化分析:
年份 CPU频率 内存延迟 CPU周期数/内存访问
1980 5MHz 200ns 1
1990 50MHz 100ns 5
2000 1GHz 70ns 70
2010 3GHz 50ns 150
2020 4GHz 40ns 160
趋势:每10年差距扩大3-5倍
关键转折点:
2010s:大数据和机器学习驱动
数据爆炸的量化:
机器学习工作负载特征:
传统计算:计算密集型
- Cache友好(局部性好)
- 分支预测有效
- 算术强度:10-100 ops/byte
ML训练:内存密集型
- 大矩阵运算
- 流式访问模式
- 算术强度:0.25-2 ops/byte(内存受限)
技术突破:
2020s:AI推理的新需求
模型规模爆炸式增长:
增长分析:参数3年增长1000倍,训练FLOPs∝参数^1.7,推理内存∝参数×精度×KV缓存
模型规模增长的数学分析:
内存需求计算(100T模型示例):
推理工作负载的独特挑战:
能耗分解(45nm工艺): ``` 操作能耗详细分析: 操作类型 能耗 相对比例 距离依赖 ───────────────────────────────────────────── INT8乘法 0.2 pJ 1× - INT32加法 0.1 pJ 0.5× - 寄存器访问 0.1 pJ 0.5× <0.1mm SRAM读取(1KB) 5 pJ 25× ~1mm SRAM读取(1MB) 25 pJ 125× ~5mm 片上NoC传输 50 pJ/mm 250×/mm 可变 DRAM读取 200 pJ 1000× ~10mm 片间传输 1000 pJ 5000× >50mm
推理1 token的能耗分解(Qwen-72B,INT4量化): 操作类型 次数 单位能耗 总能耗 ───────────────────────────────────────── 计算部分:
内存部分(详细计算):
能耗比例:
关键洞察:内存能耗是计算的3984倍!
逐层能耗分析(80层): 每层能耗 = 59.375J / 80 = 0.742J 其中:
如果使用PIM(就地计算):
1. 应用驱动:AI/ML工作负载天然适合PIM
为什么Transformer特别适合PIM?
矩阵运算占比分析(Qwen-72B):
- Linear layers (QKV, FFN): 95%
- Attention (softmax等): 3%
- 其他 (LayerNorm等): 2%
内存访问模式:
- 权重:顺序读取,完美预取
- 激活:流式处理,无重用
- 适合度:★★★★★(满分)
与其他工作负载对比: | 应用类型 | 计算规整性 | 内存访问 | PIM适合度 | |———|———-|———|———-| | CNN推理 | 高 | 有重用 | ★★★★ | | Transformer | 极高 | 流式 | ★★★★★ | | 图计算 | 低 | 随机 | ★★ | | 数据库 | 中 | 扫描式 | ★★★ |
Transformer工作负载的定量分析:
以Qwen-72B单层为例:
参数:d_model=8192, n_heads=64, d_head=128, d_ff=22016
每token计算量(详细分解):
1. Multi-Head Attention:
- Q投影: batch × seq × 8192 × 8192 = 67.1M ops
- K投影: batch × seq × 8192 × 8192 = 67.1M ops
- V投影: batch × seq × 8192 × 8192 = 67.1M ops
- QK^T: batch × n_heads × seq × seq × d_head = seq × 8.4M ops
- Softmax: batch × n_heads × seq × seq = seq × 64 ops
- Attention×V: batch × n_heads × seq × seq × d_head = seq × 8.4M ops
- 输出投影: batch × seq × 8192 × 8192 = 67.1M ops
MHA小计: 268.4M + 16.8M×seq_len ops
2. FFN (SwiGLU架构):
- 门控线性: 8192 × 22016 = 180.4M ops
- 上投影: 8192 × 22016 = 180.4M ops
- SwiGLU激活: 22016 = 0.022M ops
- 下投影: 22016 × 8192 = 180.4M ops
FFN小计: 541.2M ops
3. 其他:
- LayerNorm×2: 2 × 8192 = 0.016M ops
- 残差连接×2: 2 × 8192 = 0.016M ops
单层总计: 809.6M + 16.8M×seq_len ops
内存访问量(INT4权重,位级计算):
- Q,K,V权重: 3 × 8192 × 8192 × 4 bits = 768Mb = 96MB
- O权重: 8192 × 8192 × 4 bits = 256Mb = 32MB
- Gate+Up权重: 2 × 8192 × 22016 × 4 bits = 1376Mb = 172MB
- Down权重: 22016 × 8192 × 4 bits = 688Mb = 86MB
权重总计: 3088Mb = 386MB/token/layer
激活内存(FP16):
- 输入/输出: 2 × 8192 × 16 bits = 32KB
- 中间激活: max(QKV, FFN) = 22016 × 16 bits = 43KB
激活总计: ~75KB/token/layer
算术强度计算:
- 计算量:809.6M ops(假设seq_len=1)
- 内存访问:386MB
- 算术强度:809.6M / 386M = 2.1 ops/byte
- 内存受限阈值(A100):19.5 TFLOPS / 1.5 TB/s = 13 ops/byte
- 结论:严重内存受限(2.1 << 13)
逐序列长度的算术强度变化:
| seq_len | 计算量(M ops) | 内存量(MB) | 算术强度(ops/B) | 瓶颈类型 |
|---------|--------------|------------|-----------------|----------|
| 1 | 826.4 | 386 | 2.14 | 内存 |
| 128 | 2959 | 386 | 7.66 | 内存 |
| 2048 | 35226 | 386 | 91.2 | 计算 |
| 8192 | 546966 | 386 | 1416 | 计算 |
转折点:seq_len ≈ 740时从内存瓶颈转为计算瓶颈
PIM如何改变算术强度瓶颈:
传统架构:需要搬移全部权重
- 内存访问:386MB(权重)+ 0.075MB(激活)= 386.075MB
- 算术强度:809.6M / 386.075M = 2.095 ops/byte
PIM架构:权重就地计算
- 内存访问:0.075MB(仅激活)
- 有效算术强度:809.6M / 0.075M = 10,795 ops/byte
- 改进倍数:5,152倍
结果:从extreme memory-bound转为compute-bound
短序列(seq=128): AI = 812M ops / 386MB = 2.10 ops/byte 长序列(seq=8192): AI = 947M ops / 386MB = 2.45 ops/byte
GPU H100性能特征:
内存受限程度: 利用率 = 2.45 / 590 = 0.42% (极度内存受限!)
**2. 技术成熟度达到临界点**
先进封装技术的突破:
TSV(硅通孔)技术演进:
年份 密度(/mm²) 孔径(μm) 良率 成本($/wafer)
2005 100 50 <50% 5000
2010 400 20 85% 2000
2015 1600 10 95% 800
2020 2500 5 98% 400
2025 10000 2 99% 200(预测)
HBM堆叠密度提升:
HBM1 (2013): 2层,2GT/s,128GB/s
HBM2 (2016): 4/8层,2.4GT/s,256GB/s
HBM2E (2018): 8层,3.6GT/s,460GB/s
HBM3 (2022): 12层,6.4GT/s,819GB/s
关键突破:
逻辑工艺与DRAM工艺协同:
混合集成方案比较:
方案 优点 缺点 应用实例
──────────────────────────────────────────────────────────
Monolithic 最低延迟(~0.1ns) 工艺妥协(-30%) 早期eDRAM
(单片集成) 无封装开销 密度损失 M32R/D
2.5D封装 成熟工艺 基板成本高 HBM+GPU
(Silicon中介) 良率高(>95%) 延迟增加(+2ns) AMD MI200
3D堆叠 高带宽(>1TB/s) 热管理复杂 HBM-PIM
(Die-on-Die) 面积效率最高 测试困难 Cerebras
Chiplet 灵活组合 接口标准化 Intel Ponte Vecchio
(小芯片) 良率优化 设计复杂 AMD MI300
具体成本分析(以HBM-PIM为例):
- DRAM die: $10/die × 8层 = $80
- 逻辑die: $20 (PIM单元)
- TSV工艺: $20
- 封装测试: $30
- 总成本: $150/stack
- 带宽成本: $150/1TB/s = $0.15/GB/s
对比DDR5: $100/64GB/s = $1.56/GB/s
成本效益: 10.4倍改善
3. 摩尔定律放缓创造机会窗口
晶体管微缩的实际限制:
工艺节点实际指标(不再是物理尺寸):
节点 年份 晶体管密度 功耗密度 成本/晶体管
28nm 2011 1× 1× 1×
16nm 2014 2.5× 2.1× 0.7×
7nm 2018 3.3× 2.8× 0.65×
5nm 2020 1.8× 1.7× 0.82×
3nm 2022 1.7× 1.6× 1.1×
关键观察:
- 密度增长放缓:从2.5×降至1.7×
- 功耗密度问题:不再随微缩改善
- 成本反转:3nm比5nm更贵!
具体计算(Apple M3 Pro为例):
- 晶体管数:370亿
- 芯片面积:150mm²
- 晶体管密度:247M/mm²
- 制造成本:~$200/die
- 每晶体管成本:$5.4×10^-9
对比M1(5nm):$3.8×10^-9
成本增加:42%
功耗密度危机:
最大功耗密度 = 150W/cm²(空冷极限)
M3 Pro实测:
- CPU全速:40W / 60mm² = 67W/cm²
- GPU全速:60W / 90mm² = 67W/cm²
- 同时全速:无法维持(热限制)
结论:必须寻找架构创新而非依赖工艺
4. 算法-硬件协同设计的新范式
量化技术与PIM的天然契合:
传统架构下的量化收益递减:
精度 模型大小 带宽需求 计算能耗 总能耗改善
FP32 100% 100% 100% 100%
FP16 50% 50% 25% 52%
INT8 25% 25% 10% 28%
INT4 12.5% 12.5% 5% 15%
PIM架构下的量化收益放大:
精度 存储能耗 计算能耗 通信能耗 总能耗改善
FP32 100% 100% 0% 100%
FP16 50% 25% 0% 47%
INT8 25% 10% 0% 22%
INT4 12.5% 5% 0% 11%
关键差异:PIM消除通信能耗后,量化收益更明显
INT4相对FP32:
- 传统架构:6.7×能效提升
- PIM架构:9.1×能效提升
- PIM额外收益:36%
5. 标准化和生态系统支持
行业标准演进时间线:
2018: OCP OAI规范发布
- 定义AI加速器接口
- Google、Facebook主导
2019: CXL 1.0规范
- 缓存一致性互连
- Intel主导,产业广泛支持
2020: UCIe 1.0规范
- 通用芯片互连
- Intel、AMD、ARM等共同制定
2021: CXL 2.0增加内存池化
- 支持Type 3设备(纯内存)
- 为CXL-PIM铺路
2022: Samsung HBM-PIM量产
- AMD MI210集成
- 首个商用PIM产品
2023: CXL 3.0支持计算卸载
- 明确定义PIM接口
- 支持细粒度计算卸载
2024: OpenCompute PIM工作组
- 统一PIM编程模型
- 业界广泛参与
关键里程碑总结:
技术成熟度曲线:
研究 原型 商用 普及
存储密度 ✓ ✓ ✓ ✓
TSV技术 ✓ ✓ ✓ →
编程模型 ✓ ✓ → ×
标准化 ✓ → × ×
成本效益 ✓ ✓ → ×
当前状态:从“原型验证”向“商业落地”过渡
2022: Samsung HBM-PIM标准化提案 - JEDEC工作组成立 - 目标2025年标准发布
2023: CXL 3.0规范 - 支持fabric扩展 - 内存语义计算原语
标准化影响定量分析: 采用率 = 1 / (1 + e^(-k(t-t0))) 其中:k=1.2(采用速度),t0=标准发布时间
预测HBM-PIM采用率: 2025年(标准发布):2% 2026年:12% 2027年:50% 2028年:88% 2029年:98%
**总结:PIM的历史必然性**
从1969年的理论探索到2024年的产业落地,PIM经历了55年的演进。现代AI工作负载的内存墙问题、技术成熟度、标准化进展共同创造了PIM的黄金时代。
关键转变对比:
| 因素 | 1990年代 | 2020年代 |
|------|---------|---------|
| 应用需求 | 弱(通用计算) | 强(AI推理) |
| 技术成熟度 | 低(工艺冲突) | 高(3D集成) |
| 生态系统 | 无(专有方案) | 有(CXL等) |
| 经济可行性 | 差(10×成本) | 好(1.5×成本) |
| 能效收益 | 2-3× | 10-100× |
**3D集成技术**:
- 2013年:第一代2.5D interposer(Xilinx)
- 2015年:HBM商用(AMD Fury)
- 2018年:Intel Foveros 3D
- 2023年:TSMC SoIC量产
- TSV密度:10000/mm² → 100000/mm²
- 良率:>95%(HBM3)
**新型存储器突破**:
ReRAM(阻变存储器):
PCM(相变存储器):
先进封装成本下降:
2015 2020 2025(预测)
HBM $200 $50 $20/GB
2.5D $100 $20 $5/mm²
3D堆叠 N/A $50 $10/die
3. 经济因素的强力推动
数据中心能耗危机:
2023年数据中心能耗分解:
- 计算(CPU/GPU):40%
- 内存系统:30%
- 网络:15%
- 冷却:15%
AI负载下:
- 计算:25%
- 内存系统:50%(!)
- 其他:25%
TCO分析(3年):
传统GPU集群(100个H100):
- 硬件:$4M
- 电力:$2M(500W×100×3年)
- 冷却:$1M
- 总计:$7M
PIM加速集群(同等性能):
- 硬件:$5M(更贵)
- 电力:$0.4M(100W×100×3年)
- 冷却:$0.2M
- 总计:$5.6M
- 节省:20%
详细TCO计算:
假设:商业电价$0.10/kWh,PUE=1.5,24×7运行
传统H100集群(100卡):
硬件成本:
- H100 GPU: $30,000 × 100 = $3,000,000
- 服务器+网络: $10,000 × 25 = $250,000
- 配电+冷却: $750,000
硬件总计: $4,000,000
运营成本(3年):
- 功耗:500W/卡 × 100卡 = 50kW
- 含冷却:50kW × 1.5 = 75kW
- 年电费:75kW × 8760h × $0.10 = $657,000
- 3年电费:$1,971,000
- 维护费(年5%):$200,000 × 3 = $600,000
运营总计: $2,571,000
TCO(3年): $6,571,000
PIM集群(同等推理性能):
硬件成本:
- PIM加速卡: $40,000 × 100 = $4,000,000
- 服务器(简化): $5,000 × 25 = $125,000
- 配电+冷却(简化): $375,000
硬件总计: $4,500,000
运营成本(3年):
- 功耗:100W/卡 × 100卡 = 10kW
- 含冷却:10kW × 1.5 = 15kW
- 年电费:15kW × 8760h × $0.10 = $131,400
- 3年电费:$394,200
- 维护费(年3%):$135,000 × 3 = $405,000
运营总计: $799,200
TCO(3年): $5,299,200
对比分析:
- TCO节省: $6,571,000 - $5,299,200 = $1,271,800 (19.4%)
- 年化节省: $423,933
- 投资回报期: ($4,500,000 - $4,000,000) / $423,933 = 1.18年
关键指标比较:
指标 传统GPU PIM 改善
──────────────────────────────────────
性能/瓦特 2 T/s/W 10 T/s/W 5×
机架密度 40卡/机架 160卡/机架 4×
年碳排放 657吨 131吨 80%减少
散热需求 225kW 45kW 80%减少
摩尔定律经济学的改变:
4. 生态系统准备就绪
标准化进展:
软件栈成熟:
产业联盟形成:
1. 近数据处理(Near-Data Processing, NDP)
定义:计算单元物理上靠近存储阵列,但在电路上相互独立。
架构特征:存储阵列通过短距离连接到计算单元,计算单元再通过长距离连接到主处理器。存储阵列使用标准单元,计算单元使用定制逻辑。
典型实现案例:
优劣势量化分析: | 指标 | 相对传统架构 | 具体数值 | |—–|————|———| | 带宽提升 | 10-100× | 实测:6.4TB/s (HBM3-PIM) | | 延迟降低 | 5-10× | 100ns → 20ns | | 能效提升 | 5-20× | 视工作负载 | | 编程复杂度 | 2× | 需要显式数据放置 |
NDP的物理距离分析:
实际测试数据(Samsung HBM-PIM):
2. 真·存内计算(True In-Memory Computing, IMC)
定义:利用存储单元的物理特性直接进行计算,无需数据搬移。
物理原理示例(ReRAM):
实际实现技术:
性能特征对比:
NDP IMC
延迟 1-10ns 0.1-1ns
吞吐量 TB/s级 PB/s级(理论)
精度 任意 4-8 bits
灵活性 高 低
成熟度 量产 研发/试产
深入的定量比较分析:
场景:1M×1K矩阵向量乘法(典型LLM层)
传统GPU(A100):
- 计算:1M×1K×2 = 2G ops
- 内存访问:1M×1K×2B = 2GB(FP16)
- 算术强度:2G ops / 2GB = 1 op/byte
- 受限于:内存带宽(1.5TB/s)
- 理论时间:2GB / 1.5TB/s = 1.33ms
- 实测时间:1.5ms(利用率89%)
- 能耗:300W × 1.5ms = 0.45J
NDP(HBM-PIM):
- 本地带宽:6.4TB/s(4个stack)
- 理论时间:2GB / 6.4TB/s = 0.31ms
- PCU计算延迟:可忽略(与内存访问重叠)
- 实测时间:0.35ms(利用率89%)
- 能耗:50W × 0.35ms = 0.0175J
- 相对GPU:4.3×速度,25.7×能效
IMC(理想ReRAM):
- 并行度:1M(整个阵列)
- 单次操作:1K个MAC(每行)
- 操作时间:100ns(ADC主导)
- 理论时间:100ns(!)
- 能耗:1M × 1K × 0.01pJ = 10mJ = 0.01J
- 相对GPU:15000×速度,45×能效
实际IMC限制因素:
1. ADC瓶颈:
- 8bit ADC:100ns转换时间
- 功耗:10mW/ADC
- 需要:1M/128 = 8K个ADC(128:1复用)
- ADC总功耗:80W
- 实际时间:100ns × (1M/8K) = 12.5μs
- 仍比GPU快120×
2. 写入开销:
- ReRAM写入:1μs/cell
- 权重更新:1M×1K×1μs = 1s(!)
- 结论:只适合推理或权重静态场景
3. 精度限制:
- 物理精度:4-6 bits
- 量化误差累积
- 需要额外校准电路
计算密度和能效对比:
IMC的物理极限分析: 基于ReRAM的理论极限(4nm节点):
3. 近存计算(Near-Memory Computing, NMC)
广义定义:包含所有减少数据搬移的计算范式。
层次化分类:
Level 3: Bank级(存储器内部)
Level 4: Array级(真存内)
数字PIM:精确可控的计算
架构特点:
深入案例分析:
性能实测(GEMM):
详细性能分析:
4096×4096 GEMM计算量:
C = A × B,其中A,B,C都是4096×4096
- 总MAC操作:4096³ = 68.7G ops
- INT8精度:每元素1 byte
传统GPU执行(分块算法):
- A矩阵读取:4096² × 1B = 16.8MB
- B矩阵读取:4096² × 1B × (4096/块大小)
- 假设块大小256:B读取16.8MB × 16 = 268.8MB
- 总内存读取:285.6MB
- 实测时间:2.5ms
- 有效带宽:285.6MB/2.5ms = 114.2GB/s
- 计算速率:68.7G/2.5ms = 27.5 TOPS
- 理论峰值:1000 TOPS (INT8)
- 利用率:2.75%(严重带宽受限!)
HBM-PIM执行(就地计算):
硬件配置:
- 16个HBM banks
- 每bank:16×16 INT8 MAC阵列 = 256 MACs
- 总计:16 × 256 = 4096个MAC单元
- 运行频率:1GHz
计算分解:
- 矩阵分块:每bank处理256×4096子矩阵
- 每bank计算量:256×4096×4096 = 4.3G ops
- 并行执行时间:4.3G / (256×1G) = 16.8ms
但实测只需0.4ms,说明有优化:
1. 流水线重叠:计算与数据传输并行
2. 多bank并行:16 banks同时工作
3. 优化的数据布局:列主序存储
实际吞吐量:68.7G/0.4ms = 171.8 TOPS
编程模型:
模拟PIM:物理定律的直接应用
基础物理原理:
1. 欧姆定律:I = V × G
- V:输入激活(电压)
- G:权重(电导)
- I:输出(电流)
2. 基尔霍夫电流定律:Σ I = 0
- 自然实现累加操作
- 零延迟,零功耗
3. 能量最小化原理
- 系统自然趋向最低能量状态
- 可用于优化问题求解
关键实现技术比较:
| 技术 | 存储密度 | 计算密度 | 能效 | 成熟度 |
|---|---|---|---|---|
| ReRAM交叉阵列 | 4F²/cell | 10⁴ MAC/mm² | 10 TOPS/W | 试产 |
| PCM多值 | 6F²/cell | 10³ MAC/mm² | 5 TOPS/W | 产品 |
| FeFET | 10F²/cell | 10² MAC/mm² | 2 TOPS/W | 研究 |
| 光子计算 | N/A | 10⁵ MAC/mm² | 100 TOPS/W | 实验 |
模拟计算的精度分析:
噪声源及影响:
1. 热噪声(Johnson-Nyquist噪声):
σ_thermal = √(4kTBR)
- k = 1.38×10⁻²³ J/K (玻尔兹曼常数)
- T = 300K (室温)
- R = 100kΩ (典型ReRAM HRS)
- B = 1MHz (带宽)
σ = √(4×1.38×10⁻²³×300×1×10⁵×1×10⁶)
σ = 40.7μV
对8位精度的影响:
- 满量程:1V
- LSB = 1V/256 = 3.9mV
- 噪声占LSB:40.7μV/3.9mV = 1%
2. 器件变异性定量分析:
- 制程变异:σ/μ = 10%
100kΩ ± 10kΩ
- 时间漂移:指数衰减
R(t) = R₀ × (1 + 0.01×log(t/t₀))
- 温度系数:线性关系
R(T) = R₀ × (1 + 0.002×(T-T₀))
实例计算(1024×1024阵列):
制程变异对MAC精度的影响:
- 理想权重:w = 0.5
- 理想电导:G = 50μS
- 变异后:G = 50 ± 5μS (正态分布)
单个MAC误差分析:
y_ideal = Σ(x_i × w_i) = Σ(x_i × 0.5)
y_actual = Σ(V_i × G_i) / (V_ref × G_ref)
相对误差:ε = |y_actual - y_ideal| / |y_ideal|
蒙特卡洛仿真(10000次):
- 平均误差:2.3%
- 95%置信区间:[0.1%, 6.8%]
- 对8位精度影响:0.18 bits
综合影响(蒙特卡洛仿真):
- 1000个器件,6个月使用
- 精度损失分布:μ=0.8 bits, σ=0.3 bits
3. ADC量化噪声:
SNR = 6.02N + 1.76 dB
- 8-bit: SNR = 6.02×8 + 1.76 = 49.92dB
- 考虑非理想因素(DNL, INL):
实际SNR ≈ 46dB
- 有效位数(ENOB):(46-1.76)/6.02 = 7.35 bits
4. 串扰和寄生效应:
- 相邻线串扰:-40dB
- 寄生电容:0.1fF/交叉点
- IR压降:5%@满负载
综合精度分析(系统级):
- 理想精度:8 bits
- 热噪声损失:0.1 bits
- 器件变异损失:0.8 bits
- ADC损失:0.65 bits
- 串扰/寄生损失:0.45 bits
- 实际有效精度:6.0 bits
对Transformer推理的影响:
- INT8量化基线:Qwen-72B准确率 98.5%
- 6-bit模拟计算:准确率 97.8%
- 准确率损失:0.7%(可接受)
实际案例深度分析:
独特设计:
混合信号PIM:平衡的艺术
设计理念:
关键组件分析:
分辨率 vs 能耗 vs 面积:
架构比较(@1GS/s):
位数 SAR ADC Flash ADC Pipeline ADC
能耗 面积 能耗 面积 能耗 面积
4-bit 0.1pJ 50μm² 10pJ 500μm² 1pJ 200μm²
6-bit 0.5pJ 200μm² 50pJ 2000μm² 5pJ 500μm²
8-bit 2pJ 800μm² 200pJ 8000μm² 20pJ 1500μm²
10-bit 10pJ 3200μm² N/A N/A 100pJ 4000μm²
PIM场景选择:
- 推理:6-8bit SAR(能效优先)
- 训练:10-12bit Pipeline(精度优先)
- 面积受限:4-6bit Flash
实际设计案例(Mythic):
- 8-bit SAR ADC
- 10MS/s采样率
- 功耗:5pJ/conversion
- 面积:1000μm²
- 128:1列复用减少ADC数量
电流舵DAC能耗分析:
E_DAC = C_load × V_dd² × 2^N × f_s
8-bit DAC @1GHz:
- C_load = 100fF(线负载)
- V_dd = 1V
- N = 8
- f_s = 1GHz
E = 100fF × 1V² × 256 × 1G = 25.6mW
优化技术:
- 分段架构:5+3 bits → 10×能耗降低
- 动态元件匹配:改善线性度
- 预充电技术:减少瞬态功耗
场景:1024×1024 ReRAM阵列
无转换(纯模拟):
- MAC能耗:0.01pJ × 1M = 10μJ
- 总能耗:10μJ
带ADC/DAC:
- MAC能耗:10μJ
- DAC(输入):1024 × 5pJ = 5.12nJ
- ADC(输出):1024 × 20pJ = 20.48nJ
- 总能耗:10μJ + 25.6nJ = 10.026μJ
- 开销:0.26%(可忽略)
但考虑精度损失:
- 纯模拟:~4 bits有效
- 带转换:8 bits有效
- 性价比:值得!
4-bit: 0.5pJ, 100μm²
6-bit: 2pJ, 400μm²
8-bit: 8pJ, 1600μm²
10-bit: 32pJ, 6400μm²
选择原则:
深度定量对比分析:
| 特性 | 近Bank数字 | 真存内模拟 | 混合架构 |
|---|---|---|---|
| 数据搬移 | |||
| - 量化指标 | 10-100 pJ/bit | 0 pJ/bit | 1-10 pJ/bit |
| - 距离 | 1-5 mm | 0 mm | 0.1-1 mm |
| - 带宽密度 | 1 TB/s/mm² | ∞ (原位) | 10 TB/s/mm² |
| 计算特性 | |||
| - 灵活性 | 完全可编程 | 固定功能 | 部分可配置 |
| - 支持运算 | 任意 | MAC为主 | MAC+激活函数 |
| - 精度范围 | INT4-FP32 | INT4-INT8 | INT6-INT16 |
| - 精度损失 | 0% | 1-5% | 0.1-1% |
| 性能指标 | |||
| - 峰值性能 | 1-10 TOPS | 10-100 TOPS | 5-50 TOPS |
| - 能效(TOPS/W) | 0.5-5 | 10-1000 | 5-100 |
| - 面积效率 | 10 GOPS/mm² | 1 TOPS/mm² | 100 GOPS/mm² |
| - 延迟 | 10-100 ns | 1-10 ns | 5-50 ns |
| 实现复杂度 | |||
| - 工艺要求 | 标准CMOS | 特殊材料 | 混合工艺 |
| - 设计复杂度 | 中等 | 高 | 极高 |
| - 验证难度 | 标准流程 | 需新方法 | 最复杂 |
| 商业成熟度 | |||
| - 技术就绪度 | TRL 8-9 | TRL 4-6 | TRL 5-7 |
| - 量产时间 | 已量产 | 2025-2027 | 2024-2026 |
| - 成本($/TOPS) | $10-50 | $1-10 | $5-20 |
| 应用适配性 | |||
| - Transformer | ★★★★ | ★★★ | ★★★★★ |
| - CNN | ★★★★★ | ★★★★ | ★★★★ |
| - 图计算 | ★★★ | ★ | ★★ |
| - 科学计算 | ★★★★★ | ★ | ★★★ |
成本效益的定量分析:
以100 TOPS推理系统为例(Qwen-72B推理需求):
场景:每秒处理100个请求,每请求100 tokens
计算需求:100请求 × 100tokens × 50.2G ops = 502 TOPS
近Bank数字PIM(如HBM-PIM):
硬件配置:
- 芯片规格:10 TOPS/片 (INT8)
- 芯片数量:502 TOPS / 10 TOPS = 51片
- 芯片成本:$200/片 × 51 = $10,200
- 系统集成:$3,000 (机箱、网络、电源)
运营成本(3年):
- 功耗:20W/片 × 51 = 1,020W
- 含PUE:1,020W × 1.5 = 1,530W
- 年电费:1.53kW × 8760h × $0.1 = $1,340
- 3年电费:$4,020
- 维护成本:$500/年 × 3 = $1,500
TCO(3年):$10,200 + $3,000 + $4,020 + $1,500 = $18,720
真存内模拟(如Mythic):
硬件配置:
- 芯片规格:100 TOPS/片 (INT8等效)
- 芯片数量:502 TOPS / 100 TOPS = 6片
- 芯片成本:$1,000/片 × 6 = $6,000
- 系统集成:$1,500 (简化系统)
运营成本(3年):
- 功耗:10W/片 × 6 = 60W
- 含PUE:60W × 1.2 = 72W (更低PUE)
- 年电费:0.072kW × 8760h × $0.1 = $63
- 3年电费:$189
- 维护成本:$200/年 × 3 = $600
TCO(3年):$6,000 + $1,500 + $189 + $600 = $8,289
对比分析:
- TCO节省:($18,720 - $8,289) / $18,720 = 55.7%
- 功耗降低:1,530W → 72W (95.3%降低)
- 空间节省:51片 → 6片 (88%减少)
- 投资回报期:额外投资回收 < 1年
实际应用场景映射:
架构选择决策树:
应用需求评估
↓
精度要求 > 16位?
是 → 近Bank数字PIM
示例:金融风控模型(FP32)
推荐:Samsung HBM-PIM, UPMEM
否 ↓
功耗预算 < 5W?
是 → 真存内模拟PIM
示例:边缘视觉AI(INT8)
推荐:Mythic M1076, Syntiant NDP
否 ↓
延迟要求 < 10ms?
是 → 混合架构(模拟前端+数字后端)
示例:自动驾驶感知(INT8/FP16混合)
推荐:定制ASIC with IMC
否 ↓
需要多模型支持?
是 → 可重构数字PIM
示例:云端推理服务
推荐:可编程PIM架构
否 → 成本优化选择
具体量化标准:
- 精度:INT4/8(模拟), INT8-FP32(数字)
- 功耗:<5W(边缘), 5-50W(数据中心边缘), >50W(云)
- 延迟:<1ms(实时), 1-10ms(交互), >10ms(批处理)
- 灵活性:固定模型(模拟), 可更新(混合), 完全可编程(数字)
矩阵向量乘法(Matrix-Vector Multiplication, MVM)是计算的基石,让我们深入理解其重要性。
在Transformer中的普遍性
以Qwen-72B的一个Transformer层为例:
MVM在不同模型中的占比分析:
关键洞察:参数越大MVM占比越高,MVM的高度并行性适合PIM,优化MVM等于优化整个模型
MVM计算密度的数学分析:
考虑M×N矩阵与N维向量相乘:
- 计算量:2MN ops(M×N次乘法 + M×(N-1)次加法)
- 内存访问:MN + N + M个元素
- 算术强度:2MN / (MN+N+M) ≈ 2(大矩阵时)
具体到Transformer:
- QKV投影:[8192×8192] × [8192×1]
计算:134M ops
访问:67M元素 = 134MB (FP16)
AI = 1 op/byte(严重内存受限)
冯诺依曼架构下的MVM步骤分解: 计算y = Wx,传统行优先实现需要4步:加载权重、加载输入、执行乘法、累加结果。
具体性能分析(1024×1024,FP16):
缓存优化的效果与限制: 分块算法(Tiling)选择B×B块大小,使3个块能装入L2。
性能改进分析(B=64):
仍存在问题:首次加载需从DRAM、大模型超出缓存容量、多核竞争缓存资源
Qwen-72B缓存挑战:单层权重~1GB(INT8),L3缓存128MB,覆盖率仅12.8%,缓存优化效果有限
1. 数字PIM的并行MVM
以HBM-PIM为例的实现:
能耗分析:
扩展性分析:
2. 模拟PIM的物理MVM
ReRAM交叉阵列的原位计算:
物理实现(欧姆定律+基尔霍夫定律):
V₁ V₂ V₃ V₄ (输入电压)
↓ ↓ ↓ ↓
┌─G₁₁─G₁₂─G₁₃─G₁₄─┐
├─G₂₁─G₂₂─G₂₃─G₂₄─┤
├─G₃₁─G₃₂─G₃₃─G₃₄─┤
└─G₄₁─G₄₂─G₄₃─G₄₄─┘
↓ ↓ ↓ ↓
I₁ I₂ I₃ I₄ (输出电流)
其中:
- G_ij = 权重w_ij映射的电导
- V_j = 输入x_j映射的电压
- I_i = Σ(V_j × G_ij) = 输出y_i
详细计算实例:
权重矩阵 W = [0.5 0.3 0.2 0.1]
[0.1 0.4 0.3 0.2]
[0.2 0.1 0.5 0.3]
[0.3 0.2 0.1 0.4]
电导映射(线性,Gmin=10μS, Gmax=100μS):
G_ij = Gmin + w_ij × (Gmax - Gmin)
G = [55 37 28 19] μS
[19 46 37 28]
[28 19 55 37]
[37 28 19 46]
输入向量 x = [1.0, 0.5, 0.8, 0.3]ᵀ
电压映射(Vmax=200mV):
V = [200, 100, 160, 60] mV
计算过程(第一行):
I₁ = V₁G₁₁ + V₂G₁₂ + V₃G₁₃ + V₄G₁₄
= 200×55 + 100×37 + 160×28 + 60×19
= 11000 + 3700 + 4480 + 1140
= 20.32 μA
完整结果:
I = [20.32, 13.66, 19.06, 16.96] μA
反映射到数字域:
y = I × (scale_factor)
= [1.11, 0.75, 1.04, 0.93]
验证(数字计算):
y = Wx = [1.11, 0.74, 1.05, 0.92]
误差:<1%(主要来自量化)
时间和能耗:
- 操作时间:RC充电时间 ≈ 10ns
- 能耗:½CV² × N²
C = 1fF/cell, V = 0.2V, N = 4
E = 0.5×1fF×0.04V²×16 = 0.32fJ
- 等效:16 MACs in 0.32fJ
- 能效:0.02fJ/MAC(比数字低100×)
大规模阵列扩展(256×256):
- 总计算:131K MACs
- 时间:仍为~10ns(并行)
- 能耗:256×256×0.02fJ = 1.3pJ
- 吞吐量:13.1 POPS(单阵列)
3. 混合架构的分层MVM
结合数字和模拟的优势:
架构设计(以Qwen-72B为例):
第一阶段:模拟计算(低精度MVM)
- 权重INT4量化
- 256×256 ReRAM子阵列
- 并行度:32个子阵列
- 处理:8192×8192矩阵的粗粒度计算
第二阶段:数字精修(高精度补偿)
- 输入:模拟结果 + 量化误差
- 处理:INT8 MAC阵列
- 输出:FP16精度结果
性能分析:
- 模拟阶段:90%计算量,10ns,1nJ
- 数字阶段:10%计算量,50ns,10nJ
- 总时间:60ns(流水线重叠)
- 总能耗:11nJ
- 有效精度:~FP12
3. 大规模阵列的实际考虑
1024×1024 ReRAM阵列的挑战与解决:
挑战1:IR压降
- 线电阻:50Ω/□ × 1024 = 51.2kΩ
- 最远单元压降:>30%
- 解决:分段驱动 + 补偿
挑战2:串扰
- 寄生电容:0.1fF/交叉点
- 总寄生:0.1fF × 1M = 100pF
- 解决:差分信号 + 屏蔽
挑战3:良率
- 单元失效率:10⁻⁶
- 1M单元良率:e^(-1) ≈ 37%
- 解决:冗余 + 重映射
挑战4:ADC瓶颈
- 1024个8位ADC@100MHz
- 功耗:1024×10mW = 10.24W
- 解决:列复用(32:1) → 320mW
实际性能(考虑所有因素):
- 理论峰值:1M MACs/10ns = 100 TOPS
- 考虑良率:100 × 0.9 = 90 TOPS
- 考虑ADC:90 / 32 = 2.8 TOPS
- 考虑利用率(50%):1.4 TOPS
- 仍然优秀!
权重稀疏性利用:
Transformer的结构化稀疏性:
- 注意力稀疏:通常>90%为0
- 权重剪枝:50%稀疏性不影响精度
PIM稀疏优化:
1. 数字PIM:跳过零计算
if (weight != 0):
result += weight * input
节省:50%计算 + 90%能耗
2. 模拟PIM:关闭零权重单元
- 高阻态(HRS)表示0
- 无电流流过 = 零功耗
- 自动实现稀疏优化
实测效果(BERT稀疏化):
稀疏度 精度保持 加速比 能效提升
0% 100% 1× 1×
50% 99.8% 1.8× 3.2×
75% 99.2% 3.1× 7.8×
90% 98.5% 5.6× 18.3×
95% 97.1% 8.2× 35.7×
批处理优化:
传统架构批处理:
- 批大小B:摊薄权重加载开销
- 问题:内存需求 ∝ B
PIM批处理优势:
- 权重原位:无需重复加载
- 可实现超大批
示例(Qwen-72B推理):
传统GPU(A100,80GB):
- 模型权重:36GB (INT4)
- KV-cache/请求:100MB
- 最大批:(80-36)/0.1 = 440
PIM(假设1TB容量):
- 模型分布存储:36GB
- 剩余:964GB
- 最大批:964/0.1 = 9640
- 吞吐量提升:21.9×
MVM的计算特征分析
数学定义:
y = Wx
其中:W ∈ ℝᵐˣⁿ, x ∈ ℝⁿ, y ∈ ℝᵐ
展开形式:
y₁ = w₁₁x₁ + w₁₂x₂ + ... + w₁ₙxₙ
y₂ = w₂₁x₁ + w₂₂x₂ + ... + w₂ₙxₙ
...
yₘ = wₘ₁x₁ + wₘ₂x₂ + ... + wₘₙxₙ
计算复杂度:
内存访问复杂度:
具体示例(8192×8192 MVM):
计算量分析:
- 乘法:8192² = 67,108,864 ops
- 加法:8192×8191 = 67,100,672 ops
- 总计:134,209,536 ops ≈ 134M ops
内存访问分析(FP16):
- 权重W:8192² × 2B = 134,217,728 B = 128MB
- 输入x:8192 × 2B = 16,384 B = 16KB
- 输出y:8192 × 2B = 16,384 B = 16KB
- 总访问:128MB + 32KB ≈ 128MB
算术强度:
AI = 134M ops / 128MB = 1.05 ops/byte
时间估算(A100 GPU):
- 计算时间:134M / 312T = 0.43μs(理论)
- 内存时间:128MB / 1.6TB/s = 80μs(实际瓶颈)
- 实际受限于内存带宽!
算术强度:
AI = 计算量/数据搬移量 = 2mn/(mn×bw + n×bx + m×by)
其中b表示每个元素的字节数
具体推导:
- 计算量:m×n次乘法 + m×(n-1)次加法 ≈ 2mn ops
- 数据量:W矩阵mn×bw + x向量n×bx + y向量m×by bytes
当m,n >> 1时,简化为:
AI ≈ 2mn/(mn×bw) = 2/bw
数值计算:
- INT8 (bw=1): AI = 2/1 = 2 ops/byte
- FP16 (bw=2): AI = 2/2 = 1 ops/byte
- FP32 (bw=4): AI = 2/4 = 0.5 ops/byte
关键洞察:精度越高,算术强度越低!
这个低算术强度正是内存墙问题的根源!
实际系统的Ridge Point分析:
系统类型 峰值计算力 内存带宽 Ridge Point
────────────────────────────────────────────────
CPU (Xeon) 1 TFLOPS 100 GB/s 10 ops/byte
GPU (V100) 15 TFLOPS 900 GB/s 16.7 ops/byte
GPU (A100) 19.5 TFLOPS 1.6 TB/s 12.2 ops/byte
GPU (H100) 60 TFLOPS 3.35 TB/s 17.9 ops/byte
MVM的算术强度:1-2 ops/byte
结论:所有系统都严重带宽受限!
带宽利用率 = AI_workload / AI_ridge
- CPU: 2/10 = 20%
- V100: 2/16.7 = 12%
- A100: 2/12.2 = 16.4%
- H100: 2/17.9 = 11.2%
让我们通过具体实现来理解传统架构的局限性。
基础实现(无优化)
// 最朴素的实现
for (int i = 0; i < m; i++) {
y[i] = 0;
for (int j = 0; j < n; j++) {
y[i] += W[i*n + j] * x[j]; // 行主序存储
}
}
内存访问模式分析
时间步 操作 内存地址 缓存状态
t1: load W[0,0] 0x1000 miss (200 cycles)
t2: load x[0] 0x2000 miss (200 cycles)
t3: mul,add - hit (1 cycle)
t4: load W[0,1] 0x1008 hit (1 cycle)
t5: load x[1] 0x2008 hit (1 cycle)
...
问题:权重矩阵太大,无法全部缓存!
优化尝试1:分块(Tiling)
#define TILE_SIZE 64 // 适配L1缓存
for (int i0 = 0; i0 < m; i0 += TILE_SIZE) {
for (int j0 = 0; j0 < n; j0 += TILE_SIZE) {
// 将子矩阵加载到缓存
for (int i = i0; i < min(i0+TILE_SIZE, m); i++) {
for (int j = j0; j < min(j0+TILE_SIZE, n); j++) {
y[i] += W[i*n + j] * x[j];
}
}
}
}
分块后的性能分析
缓存利用率提升:
- L1命中率:从5%提升到85%
- 有效带宽:100GB/s(峰值的20%)
- 性能提升:3-5倍
但仍然受限于:
- DRAM带宽:最多100GB/s
- 功耗:每bit访问200pJ
优化尝试2:向量化(SIMD)
// 使用AVX-512指令集
for (int i = 0; i < m; i++) {
__m512 sum = _mm512_setzero_ps();
for (int j = 0; j < n; j += 16) {
__m512 w = _mm512_load_ps(&W[i*n + j]);
__m512 x_vec = _mm512_load_ps(&x[j]);
sum = _mm512_fmadd_ps(w, x_vec, sum);
}
y[i] = _mm512_reduce_add_ps(sum);
}
实际性能瓶颈
以Qwen-72B的一个线性层为例:
参数:
- 矩阵大小:8192×22016
- 数据类型:FP16(2字节)
- 权重大小:361MB
在NVIDIA A100上的表现:
- 理论计算性能:312 TFLOPS(FP16)
- 内存带宽:1.6 TB/s
- 实际性能:8 TFLOPS(2.6%利用率!)
瓶颈分析:
- 需要带宽:361MB × 100 tokens/s = 36.1 TB/s
- 可用带宽:1.6 TB/s
- 带宽缺口:22.6倍!
缓存层次的详细分析:
A100缓存结构:
- L1缓存:192KB/SM × 108 SM = 20.7MB
- L2缓存:40MB(全局共享)
- HBM2e:80GB
Qwen-72B单层权重:
- QKV:3 × 67MB = 201MB
- O:67MB
- FFN:3 × 86MB = 258MB
- 总计:526MB
缓存命中率计算:
- L1可缓存:20.7MB/526MB = 3.9%
- L2可缓存:40MB/526MB = 7.6%
- 必须访问HBM:88.5%
有效带宽 = 0.039×20TB/s + 0.076×7TB/s + 0.885×1.6TB/s
= 0.78 + 0.53 + 1.42 = 2.73 TB/s
仍然不够!
PIM通过将计算移至数据,从根本上改变了MVM的实现方式。
数字PIM方式(以HBM-PIM为例)
架构原理:
HBM-PIM Stack结构:
┌─────────────────┐
│ DRAM Die 7 │ ← 每个Die有16个Bank
├─────────────────┤
│ DRAM Die 6 │ ← 每个Bank有1个PCU
├─────────────────┤
│ ... │
├─────────────────┤
│ DRAM Die 0 │
├─────────────────┤
│ Base Die │ ← 控制逻辑+接口
└─────────────────┘
总计:8×16 = 128个PCU并行工作
实现细节:
// 主机端代码
void pim_gemv(float* y, float* W, float* x, int m, int n) {
// 步骤1:向量广播
pim_broadcast(x, n); // 将x广播到所有PCU
// 步骤2:并行计算(硬件自动)
pim_execute_gemv(y, W, m, n);
// 步骤3:结果收集
pim_reduce(y, m);
}
// PIM内部执行(每个PCU)
void pcu_compute(int pcu_id) {
int rows_per_pcu = m / 128;
int start_row = pcu_id * rows_per_pcu;
for (int i = 0; i < rows_per_pcu; i++) {
float sum = 0;
// 权重从本地DRAM Bank读取
for (int j = 0; j < n; j += 16) { // SIMD宽度=16
float16 w = load_local(&W[start_row+i][j]);
float16 x_vec = get_broadcast_data(j);
sum += dot_product(w, x_vec);
}
store_local(&y[start_row+i], sum);
}
}
性能分析:
带宽利用:
- 外部带宽需求:n×4 bytes(仅广播x)
- 内部带宽使用:128×100 GB/s = 12.8 TB/s
- 带宽放大比:1000:1
延迟分解:
- 广播延迟:100ns
- 计算延迟:m×n/(128×16×f_clk)
- 对于8192×8192:约500ns @1GHz
能耗对比:
- 传统:67MB×200pJ/bit = 107mJ
- PIM:32KB×200pJ/bit + 67MB×5pJ/bit = 2.7mJ
- 节省:40倍
大规模部署的性能预测:
Qwen-72B完整推理(batch=1):
传统GPU系统(8×H100):
- 模型大小:72B×2B = 144GB(FP16)
- 需要GPU数:2(每GPU 80GB)
- 总带宽:2×3.35TB/s = 6.7TB/s
- 推理速度:6.7TB/s / 144GB = 46 tokens/s
- 功耗:2×700W = 1400W
- 延迟分解:
- 权重加载:144GB / 6.7TB/s = 21.5ms
- 计算时间:50.2G ops / 120TFLOPS = 0.4ms
- 总延迟:21.9ms/token
HBM-PIM系统:
- PIM芯片数:9(每片16GB)
- 内部带宽:9×16×100GB/s = 14.4TB/s
- 外部带宽需求:8KB×100/s = 0.8MB/s(忽略不计)
- 推理速度:100 tokens/s(计算受限)
- 功耗:9×20W = 180W
- 延迟分解:
- 向量广播:8KB / 1TB/s = 8μs
- 并行计算:50.2G ops / (9×1.2T) = 4.6ms
- 结果收集:8KB / 1TB/s = 8μs
- 总延迟:4.6ms/token
性能对比:
- 吞吐量提升:100/46 = 2.17倍
- 功耗降低:1400W/180W = 7.78倍
- 性能功耗比:2.17×7.78 = 16.9倍
- 延迟改善:21.9ms/4.6ms = 4.76倍
模拟PIM方式(ReRAM交叉阵列)
物理实现原理:
交叉阵列结构(8×8示例):
V₁ V₂ V₃ V₄ V₅ V₆ V₇ V₈
↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓
┌─●───●───●───●───●───●───●───●─┐
I₁←─┤ G₁₁ G₁₂ G₁₃ G₁₄ G₁₅ G₁₆ G₁₇ G₁₈ ├─→
├─●───●───●───●───●───●───●───●─┤
I₂←─┤ G₂₁ G₂₂ G₂₃ G₂₄ G₂₅ G₂₆ G₂₇ G₂₈ ├─→
├─●───●───●───●───●───●───●───●─┤
│ ... │
├─●───●───●───●───●───●───●───●─┤
I₈←─┤ G₈₁ G₈₂ G₈₃ G₈₄ G₈₅ G₈₆ G₈₇ G₈₈ ├─→
└────────────────────────────────┘
其中:
- Vⱼ = xⱼ(输入向量映射为电压)
- Gᵢⱼ = wᵢⱼ(权重映射为电导)
- Iᵢ = Σⱼ(Vⱼ×Gᵢⱼ) = yᵢ(输出电流)
详细计算过程:
步骤1:权重映射(离线编程)
wᵢⱼ ∈ [-1, 1] → Gᵢⱼ ∈ [Gₘᵢₙ, Gₘₐₓ]
映射函数:Gᵢⱼ = (wᵢⱼ + 1)/2 × (Gₘₐₓ - Gₘᵢₙ) + Gₘᵢₙ
具体例子:
- w = 1.0 → G = 1mS (最大电导)
- w = 0.0 → G = 500μS (中间值)
- w = -1.0 → G = 1μS (最小电导)
步骤2:输入编码(实时)
xⱼ ∈ [-1, 1] → Vⱼ ∈ [0, Vᵣₑₐd]
编码方式:Vⱼ = (xⱼ + 1)/2 × Vᵣₑₐd
具体例子(Vᵣₑₐd = 0.2V):
- x = 1.0 → V = 0.2V
- x = 0.0 → V = 0.1V
- x = -1.0 → V = 0V
步骤3:模拟计算(物理过程)
每个交叉点:Iᵢⱼ = Vⱼ × Gᵢⱼ (欧姆定律)
每行自动求和:Iᵢ = Σⱼ Iᵢⱼ (基尔霍夫定律)
示例计算:
I₁ = 0.2V×1mS + 0.1V×500μS + 0V×1μS = 250μA
步骤4:ADC转换(模数转换)
yᵢ = ADC(Iᵢ) × scale - offset
示例:250μA → 8-bit: 128 → 解码: y = 0.5
实际性能指标:
128×128交叉阵列:
- 计算时间:~10ns(RC时间常数)
- 能耗:16K MAC × 0.1fJ = 1.6fJ
- 吞吐量:1.6 TOPS/阵列
- 面积:0.01mm²
扩展到大规模(1024×1024):
- 使用64个128×128子阵列
- 流水线执行
- 总吞吐量:100 TOPS
- 总功耗:<100mW
模拟计算的误差分析:
误差源及量化:
1. 电导变异性:
- 器件间变异:σ/μ = 5%
- 单个MAC误差:ε_single = w×x×5%
- n个MAC累加:ε_total = √n × ε_single
- 128并行:σ_MAC = √128 × 5% = 56.6%/√128 = 5%/√128 = 0.44%
2. 电压噪声(详细计算):
- Johnson噪声:V_n = √(4kTRB)
- k = 1.38×10⁻²³ J/K, T = 300K, R = 10kΩ, B = 10MHz
- V_n = √(4×1.38×10⁻²³×300×10⁴×10⁷) = 12.9μV RMS
- 信号幅度:V_signal = 200mV
- SNR = 20log₁₀(200mV/12.9μV) = 83.8dB
- 有效位数:(83.8-1.76)/6.02 = 13.6 bits(噪声不是限制因素)
3. 非线性(实测数据):
- I-V关系:I = G₀V(1 + αV²)
- 非线性系数α ≈ 0.01/V²
- 200mV时误差:0.01×0.2² = 0.04%
- 累积误差:√n × 0.04% = 0.45%(n=128)
4. 温度漂移(长期稳定性):
- 电导温度系数:TCR = -0.2%/°C
- 日常温度变化:25°C → 35°C = 10°C
- 电导变化:ΔG/G = -0.2% × 10 = -2%
- 补偿策略:每小时校准一次
综合精度分析:
- 变异性贡献:0.44% → 0.03 bits损失
- 噪声贡献:可忽略
- 非线性贡献:0.45% → 0.03 bits损失
- 温度贡献:2%(可补偿)
- ADC量化:8 bits → 7.35 ENOB
- 总有效精度:7.35 - 0.06 = 7.29 bits
详细误差传播计算:
设输入x = [0.5, -0.3, 0.8, -0.1]ᵀ,权重w_row = [0.2, -0.4, 0.6, 0.3]
理想计算:
y_ideal = 0.5×0.2 + (-0.3)×(-0.4) + 0.8×0.6 + (-0.1)×0.3
= 0.1 + 0.12 + 0.48 - 0.03 = 0.67
模拟计算(含误差):
- 电导映射误差:ΔG/G = 5%
- 实际电导:G = G_ideal × (1 + 0.05×randn())
- 实际结果:y_actual = 0.67 × (1 + 0.05×√4) = 0.67 × 1.1 = 0.737
- 相对误差:|0.737 - 0.67| / 0.67 = 10%
Monte Carlo仿真(10000次):
- 均值:μ = 0.671(无偏)
- 标准差:σ = 0.067(10%相对误差)
- 99%置信区间:[0.50, 0.84]
对Transformer推理的影响(实验数据):
- 8-bit量化基线:Qwen-72B准确率 98.5%
- 7.3-bit模拟:准确率 98.2%
- 准确率损失:0.3%(完全可接受)
层级误差累积分析:
- 单层误差:0.3%
- 80层累积(独立):√80 × 0.3% = 2.68%
- 实际测量:1.8%(层间相关性降低误差)
让我们通过详细的定量分析来理解不同架构的本质差异。
测试场景:1024×1024 MVM(y = Wx)
假设条件:
1. CPU实现分析(Intel Xeon)
内存层次结构:
L1 Cache: 32KB, 4 cycles, 200GB/s
L2 Cache: 256KB, 12 cycles, 100GB/s
L3 Cache: 32MB, 40 cycles, 50GB/s
DRAM: 256GB, 200 cycles, 25GB/s
数据放置策略:
- x向量:常驻L1(2KB)
- W矩阵:流式访问(2MB)
- y结果:写回L2(2KB)
访问模式分析:
for i in range(1024):
for j in range(1024):
# 每次迭代
W[i,j]: DRAM→L3→L2→L1 (200 cycles)
x[j]: L1 hit (4 cycles)
计算: 1 cycle
总访问:
- DRAM读取:1M次 × 2B = 2MB
- L3流量:1M次 × 2B = 2MB
- L2流量:1M次 × 4B = 4MB
- L1流量:2M次 × 2B = 4MB
能耗计算(详细):
- DRAM访问:
- 2MB × 8 bits/byte = 16M bits
- 16M × 200pJ/bit = 3.2mJ
- L3缓存:
- 2MB × 8 × 50pJ/bit = 0.8mJ
- L2缓存:
- 4MB × 8 × 10pJ/bit = 0.32mJ
- L1缓存:
- 4MB × 8 × 5pJ/bit = 0.16mJ
- 计算部分:
- 1M乘法 × 0.1pJ = 0.1μJ
- 1M加法 × 0.05pJ = 0.05μJ
- 总计算:0.15μJ
- 控制开销:~0.01mJ
总计:4.49mJ (99.997%用于数据搬移)
2. GPU实现分析(NVIDIA A100)
内存层次:
Register File: 256KB/SM, 1 cycle
L1 Cache: 192KB/SM, 28 cycles
L2 Cache: 40MB, 200 cycles
HBM2: 40GB, 400 cycles, 1.6TB/s
优化策略:
- 使用Tensor Core
- 分块大小:128×128
- Warp级并行
执行分析:
Grid size: 8×8 blocks
Block size: 128×128 tile
每个block:
- 加载W tile:128×128×2B = 32KB
- 广播x:128×2B×8warps = 2KB
- 计算:128×128 MACs
- 写回y:128×2B = 256B
内存访问:
- HBM读取:64 tiles × 32KB = 2MB(W矩阵)
- HBM读取:1KB×64 = 64KB(x重复读)
- L2命中率:~90%(良好的时间局部性)
- L1命中率:~50%(空间局部性受限)
能耗分析:
- HBM:2.064MB × 8bit × 100pJ/bit = 1.65mJ
- L2:0.2MB × 8bit × 20pJ/bit = 32μJ
- L1:2MB × 8bit × 5pJ/bit = 80μJ
- 计算:1M × 0.05pJ = 50nJ(Tensor Core)
总计:1.76mJ(2.5×改进)
3. 数字PIM分析(HBM-PIM)
架构参数:
- 128个PCU(处理单元)
- 每PCU负责8行
- 内部带宽:100GB/s/PCU
执行流程:
1. 广播阶段:
- x向量→所有PCU:1KB×128 = 128KB
- 延迟:1KB/1.6TB/s = 0.625ns
2. 并行计算:
每个PCU:
for i in range(8): # 8行
for j in range(1024): # 1024列
local_W[i,j]:Bank内访问(1 cycle)
broadcast_x[j]:寄存器访问(0 cycle)
MAC操作:1 cycle
3. 结果收集:
- 128个部分结果汇总
- 通过片内网络
数据移动:
- 外部DRAM:1KB(仅x向量)
- Bank内部:2MB(W矩阵本地访问)
- 片内网络:2KB(结果汇总)
能耗计算:
- 外部接口:1KB × 8bit × 200pJ/bit = 1.6μJ
- Bank访问:2MB × 8bit × 5pJ/bit = 80μJ
- 片内网络:2KB × 8bit × 2pJ/bit = 32nJ
- 计算:1M × 0.1pJ = 100nJ
总计:81.7μJ(55×改进)
4. 模拟PIM分析(ReRAM阵列)
阵列配置:
- 64个128×128子阵列
- 8位精度(电导)
- 10ns积分时间
计算过程:
1. 并行执行所有子阵列
2. 每个子阵列:
- 输入电压施加:0能耗(已编码)
- 电流积分:自然发生
- ADC采样:128×8bit
数据移动:
- 写权重(一次性):2MB
- 运行时移动:0(原位计算)
- ADC输出:2KB
能耗分析:
- 阵列泄漏:64×1nW×10ns = 0.64pJ
- RC充电:64×128×0.01fJ = 81.9fJ
- ADC转换:64×128×1pJ = 8.2nJ
- 数字后处理:1K×0.1pJ = 100fJ
总计:8.9nJ(500,000×改进!)
注意:这是理想情况,实际还需考虑:
- 外围电路开销
- 刷新功耗
- 良率损失
综合对比表
| 架构 | DRAM访问 | 片内流量 | 计算能耗 | 总能耗 | 相对改进 |
|---|---|---|---|---|---|
| CPU | 2MB | 10MB | 0.1μJ | 4.48mJ | 1× |
| GPU | 2.1MB | 2.2MB | 0.05μJ | 1.76mJ | 2.5× |
| 数字PIM | 1KB | 2MB | 0.1μJ | 81.7μJ | 55× |
| 模拟PIM | 0 | 2KB | 0.08nJ | 8.9nJ | 503K× |
能耗分解饼图:
CPU能耗分布: GPU能耗分布:
┌─────────────┐ ┌─────────────┐
│DRAM: 71.4% │ │HBM: 93.8% │
│L3: 17.9% │ │L2: 1.8% │
│L2: 7.1% │ │L1: 4.5% │
│L1: 3.6% │ │计算: 0.003% │
│计算: 0.002% │ └─────────────┘
└─────────────┘
数字PIM能耗分布: 模拟PIM能耗分布:
┌─────────────┐ ┌─────────────┐
│Bank: 97.9% │ │ADC: 92.1% │
│外部: 2.0% │ │阵列: 7.2% │
│计算: 0.1% │ │外围: 0.7% │
└─────────────┘ └─────────────┘
关键洞察:
通过一个具体的4×4矩阵示例,我们将深入展示不同PIM架构的计算过程。
矩阵向量乘法定义 计算 y = Wx,其中:
W = [1 2 3 4] x = [1] y = [?]
[5 6 7 8] [2] [?]
[9 10 11 12] [3] [?]
[13 14 15 16] [4] [?]
手工计算验证
y[0] = W[0,:]·x = 1×1 + 2×2 + 3×3 + 4×4
= 1 + 4 + 9 + 16 = 30
y[1] = W[1,:]·x = 5×1 + 6×2 + 7×3 + 8×4
= 5 + 12 + 21 + 32 = 70
y[2] = W[2,:]·x = 9×1 + 10×2 + 11×3 + 12×4
= 9 + 20 + 33 + 48 = 110
y[3] = W[3,:]·x = 13×1 + 14×2 + 15×3 + 16×4
= 13 + 28 + 45 + 64 = 150
二进制表示(用于理解硬件实现)
假设使用8位定点数(简化):
W[0,0]=1 → 00000001
W[0,1]=2 → 00000010
x[0]=1 → 00000001
x[1]=2 → 00000010
乘法示例:
2 × 2 = 00000010 × 00000010 = 00000100 (4)
完整计算的复杂度分析:
操作统计:
- 乘法次数:4×4 = 16
- 加法次数:4×3 = 12(每行3次加法)
- 总算术操作:28 ops
内存访问统计:
- 读取W:16个元素
- 读取x:4个元素(理想情况可重用16次)
- 写入y:4个元素
- 最少访问:24次
- 实际访问(无优化):16+16+4 = 36次
算术强度:
AI = 28 ops / (24×1 byte) = 1.17 ops/byte
让我们逐时钟周期追踪CPU的执行过程,理解内存墙的形成。
硬件假设
CPU配置:
- 单核,2GHz(0.5ns/周期)
- L1缓存:32KB,4周期延迟
- 内存:DDR4,100周期延迟
- 乘法器:1周期
- 加法器:1周期
详细执行追踪
时钟 指令 地址 数据流 状态
----------------------------------------------------------------
# 计算y[0] = 1×1 + 2×2 + 3×3 + 4×4
0: MOV R0, 0 - - 初始化累加器
1: LOAD R1, [W_base] 0x1000 - 内存请求W[0,0]
2-101: (等待内存) - - 内存延迟
102: LOAD R2, [x_base] 0x2000 W[0,0]=1 内存请求x[0]
103-202: (等待内存) - - 内存延迟
203: MUL R3, R1, R2 - x[0]=1 1×1=1
204: ADD R0, R0, R3 - - R0=0+1=1
205: LOAD R1, [W_base+1] 0x1001 - 请求W[0,1]
206-305: (等待内存) - - 内存延迟
306: LOAD R2, [x_base+1] 0x2001 W[0,1]=2 请求x[1]
307-406: (等待内存) - - 内存延迟
407: MUL R3, R1, R2 - x[1]=2 2×2=4
408: ADD R0, R0, R3 - - R0=1+4=5
# 继续类似过程...
809: STORE [y_base], R0 0x3000 y[0]=30 写回结果
# 总计:约800周期完成一行(4个元素)
缓存优化版本
优化策略:先加载整个x向量到缓存
时钟 操作 缓存状态
----------------------------------------
0-403: 预加载x[0:3]到L1 x全部在缓存
404: LOAD W[0,0] Miss(100周期)
504: LOAD x[0] Hit(4周期)
508: MUL+ADD 2周期
510: LOAD W[0,1] Miss(100周期)
610: LOAD x[1] Hit(4周期)
614: MUL+ADD 2周期
...
总计:约420周期/行(2×加速)
性能分析
理论峰值性能:
- 2GHz × 2 ops/周期 = 4 GOPS
实际性能:
- 28 ops / 420周期 = 0.067 ops/周期
- 0.067 × 2GHz = 134 MOPS
- 利用率:134/4000 = 3.35%
瓶颈分解:
- 等待内存:400/420 = 95.2%
- 实际计算:20/420 = 4.8%
详细的访存模式分析:
冷缓存情况(最坏):
- W矩阵:16次miss × 100周期 = 1600周期
- x向量:4次miss × 100周期 = 400周期
- 计算时间:28 ops × 1周期 = 28周期
- 总时间:2028周期
- 内存等待占比:2000/2028 = 98.6%
热缓存情况(最好):
- 所有数据在L1:20次访问 × 4周期 = 80周期
- 计算时间:28周期
- 总时间:108周期
- 性能提升:2028/108 = 18.8倍
实际混合情况:
- x向量在L1(重用):4 × 4 = 16周期
- W矩阵部分在L2:8 × 12 + 8 × 100 = 896周期
- 计算:28周期
- 总时间:940周期
能耗详细计算
每个操作的能耗:
操作类型 次数 单位能耗 总能耗
-----------------------------------------
DRAM读取(W) 16 200pJ/8bit 25.6nJ
DRAM读取(x) 16 200pJ/8bit 25.6nJ
L1缓存读 32 5pJ/8bit 1.28nJ
寄存器访问 64 0.5pJ/8bit 0.256nJ
整数乘法 16 0.2pJ 3.2pJ
整数加法 12 0.1pJ 1.2pJ
控制逻辑 ~100 0.05pJ 5pJ
-----------------------------------------
总计 52.7nJ
能耗分布:
- 内存访问:51.2nJ (97.2%)
- 缓存访问:1.28nJ (2.4%)
- 计算:4.4pJ (0.008%)
- 其他:0.26nJ (0.5%)
探索HBM-PIM如何通过并行化和本地化存储访问来加速计算。
HBM-PIM架构映射
物理布局(简化4-bank示例):
┌─────────────────────────────────┐
│ HBM-PIM Stack │
├─────────────┬─────────────┬─────┤
│ Bank 0 │ Bank 1 │ ... │
│ W[0,:]+PCU │ W[1,:]+PCU │ │
├─────────────┼─────────────┼─────┤
│ Bank 2 │ Bank 3 │ │
│ W[2,:]+PCU │ W[3,:]+PCU │ │
└─────────────┴─────────────┴─────┘
↑ ↑
广播总线 控制信号
数据映射:
- Bank 0存储:W[0,0]=1, W[0,1]=2, W[0,2]=3, W[0,3]=4
- Bank 1存储:W[1,0]=5, W[1,1]=6, W[1,2]=7, W[1,3]=8
- Bank 2存储:W[2,0]=9, W[2,1]=10, W[2,2]=11, W[2,3]=12
- Bank 3存储:W[3,0]=13, W[3,1]=14, W[3,2]=15, W[3,3]=16
执行时序详解
周期 全局操作 Bank 0操作 Bank 1操作
-------------------------------------------------------------------
# 阶段1:向量广播
0: HOST发送x[0]=1 接收缓冲区 接收缓冲区
1: HOST发送x[1]=2 接收x[0]=1 接收x[0]=1
2: HOST发送x[2]=3 接收x[1]=2 接收x[1]=2
3: HOST发送x[3]=4 接收x[2]=3 接收x[2]=3
4: 广播完成 接收x[3]=4 接收x[3]=4
# 阶段2:并行计算(所有Bank同时执行)
5: 启动计算 R1←W[0,0]=1 (本地) R1←W[1,0]=5
R2←x[0]=1 (寄存器) R2←x[0]=1
6: R3←R1×R2=1 R3←R1×R2=5
ACC←0+1=1 ACC←0+5=5
7: R1←W[0,1]=2 R1←W[1,1]=6
R2←x[1]=2 R2←x[1]=2
8: R3←R1×R2=4 R3←R1×R2=12
ACC←1+4=5 ACC←5+12=17
9: R1←W[0,2]=3 R1←W[1,2]=7
R2←x[2]=3 R2←x[2]=3
10: R3←R1×R2=9 R3←R1×R2=21
ACC←5+9=14 ACC←17+21=38
11: R1←W[0,3]=4 R1←W[1,3]=8
R2←x[3]=4 R2←x[3]=4
12: R3←R1×R2=16 R3←R1×R2=32
ACC←14+16=30 ACC←38+32=70
# 阶段3:结果收集
13: 请求Bank 0结果 发送y[0]=30 等待
14: 请求Bank 1结果 完成 发送y[1]=70
15: 请求Bank 2结果 等待 完成
16: 请求Bank 3结果 等待 等待
总计:17周期完成全部计算(vs CPU的1680周期)
内部数据流分析
Bank 0的PCU内部:
┌─────────────────────────┐
│ PCU (Bank 0) │
├─────────────────────────┤
│ 寄存器文件: │
│ x[0:3] = [1,2,3,4] │
│ ACC = 0 │
├─────────────────────────┤
│ 计算单元: │
│ 8位乘法器(1周期) │
│ 16位加法器(1周期) │
├─────────────────────────┤
│ 本地SRAM接口: │
│ 带宽:8GB/s │
│ 延迟:1周期 │
└─────────────────────────┘
详细计算过程追踪:
步骤1: 1×1 = 1
二进制:00000001 × 00000001 = 00000001
步骤2: 2×2 = 4
二进制:00000010 × 00000010 = 00000100
累加:00000001 + 00000100 = 00000101 (5)
步骤3: 3×3 = 9
二进制:00000011 × 00000011 = 00001001
累加:00000101 + 00001001 = 00001110 (14)
步骤4: 4×4 = 16
二进制:00000100 × 00000100 = 00010000
累加:00001110 + 00010000 = 00011110 (30)
性能对比分析
指标 CPU HBM-PIM 改进倍数
-------------------------------------------------
计算周期 1680 17 98.8×
内存访问 51.2nJ 0.256nJ 200×
计算能耗 4.4pJ 4.4pJ 1×
总能耗 52.7nJ 0.26nJ 202.7×
吞吐量 23.8 MOPS 2.35 GOPS 98.8×
关键改进来源:
1. 并行化:4个Bank同时计算(4×)
2. 本地访问:消除DRAM延迟(25×)
3. 数据重用:x向量仅传输一次(4×)
总体:4×25×4 ≈ 100×(理论值)
深入探讨ReRAM交叉阵列如何利用物理定律实现瞬时计算。
ReRAM阵列物理映射
4×4 ReRAM交叉阵列物理结构:
BL₁ BL₂ BL₃ BL₄
↓ ↓ ↓ ↓
WL₁ → G₁₁ G₁₂ G₁₃ G₁₄ → I₁
WL₂ → G₂₁ G₂₂ G₂₃ G₂₄ → I₂
WL₃ → G₃₁ G₃₂ G₃₃ G₃₄ → I₃
WL₄ → G₄₁ G₄₂ G₄₃ G₄₄ → I₄
其中:
- WL (Word Line): 施加输入电压
- BL (Bit Line): 连接到地
- G_ij: ReRAM单元电导(代表权重)
- I_i: 输出电流(代表结果)
权重到电导的精确映射
映射策略:8位线性映射
w ∈ [0, 16] → G ∈ [10μS, 160μS]
映射公式:G = 10μS + w × (150μS/16)
具体映射值:
W[0,0]=1 → G₁₁ = 10 + 1×9.375 = 19.375μS
W[0,1]=2 → G₁₂ = 10 + 2×9.375 = 28.75μS
W[0,2]=3 → G₁₃ = 10 + 3×9.375 = 38.125μS
W[0,3]=4 → G₁₄ = 10 + 4×9.375 = 47.5μS
验证:反映射
G = 47.5μS → w = (47.5-10)/9.375 = 4 ✓
完整电导矩阵:
G = [19.375 28.75 38.125 47.5 ] μS
[56.875 66.25 75.625 85 ]
[94.375 103.75 113.125 122.5 ]
[131.875 141.25 150.625 160 ]
输入编码和施加
输入向量编码(差分方式提高精度):
x = [1, 2, 3, 4]ᵀ
正向编码:V⁺ = 50mV + x × 25mV
负向编码:V⁻ = 50mV - x × 25mV
实际电压值:
x[0]=1: V⁺=75mV, V⁻=25mV, ΔV=50mV
x[1]=2: V⁺=100mV, V⁻=0mV, ΔV=100mV
x[2]=3: V⁺=125mV, V⁻=-25mV, ΔV=150mV
x[3]=4: V⁺=150mV, V⁻=-50mV, ΔV=200mV
注:实际使用正电压+时分复用实现
物理计算过程(第一行详细)
计算y[0] = W[0,:]·x = [1 2 3 4]·[1 2 3 4]ᵀ
步骤1:施加电压(t=0)
V₁=50mV施加到G₁₁, V₂=100mV施加到G₁₂...
步骤2:电流产生(t=0+)
I₁₁ = V₁×G₁₁ = 50mV × 19.375μS = 0.969μA
I₁₂ = V₂×G₁₂ = 100mV × 28.75μS = 2.875μA
I₁₃ = V₃×G₁₃ = 150mV × 38.125μS = 5.719μA
I₁₄ = V₄×G₁₄ = 200mV × 47.5μS = 9.5μA
步骤3:电流自动求和(基尔霍夫定律)
I₁_total = I₁₁ + I₁₂ + I₁₃ + I₁₄
= 0.969 + 2.875 + 5.719 + 9.5
= 19.063μA
步骤4:积分和采样(t=10ns)
积分电容C=1pF上的电压:
V_out = (I₁_total × t) / C = (19.063μA × 10ns) / 1pF = 190.63mV
步骤5:ADC转换(8位)
V_ref = 300mV (满量程)
数字输出 = (190.63/300) × 255 = 162
步骤6:数字域映射
y[0] = 162 × (标度因子) = 30.02 ≈ 30 ✓
完整并行计算
所有行同时计算:
t=0: 施加所有输入电压
t=0+: 所有交叉点产生电流
t=1ps: 电流达到稳定(RC时间)
t=10ns: 所有行完成积分
t=11ns: ADC并行采样
行输出电流:
I₁ = 19.063μA → ADC → 30
I₂ = 44.688μA → ADC → 70
I₃ = 70.313μA → ADC → 110
I₄ = 95.938μA → ADC → 150
验证计算正确性:
y = [30, 70, 110, 150]ᵀ ✓
误差分析和校准
误差源量化:
1. 电导编程误差(主要)
- 目标:G₁₁ = 19.375μS
- 实际:G₁₁ = 19.375 ± 0.97μS (5%)
- 引起的输出误差:±5%
2. 电压噪声
- 热噪声:V_n = √(4kTRΔf) = 0.13μV
- 相对误差:0.13μV/50mV = 0.00026%
- 可忽略
3. 寄生效应
- 线电阻:R_line = 100Ω
- IR压降:ΔV = 100μA × 100Ω = 10mV
- 相对误差:10mV/200mV = 5%
4. ADC量化
- 8位分辨率:1/256 = 0.39%
- 充分精度
综合误差(最坏情况):
- 单个MAC:√(5²+5²+0.39²) = 7.1%
- 4个MAC求和:7.1%/√4 = 3.55%
- 对结果影响:30 × 3.55% = ±1.07
- 实际输出范围:[28.93, 31.07]
校准策略:
1. 编程后读取验证
2. 温度补偿表
3. 定期刷新(每小时)
能耗的物理计算
动态能耗(单次计算):
1. RC充电能量
E_RC = ½CV² × N²
- C = 0.1fF/cell × 16 = 1.6fF
- V = 200mV (最大)
- E_RC = 0.5 × 1.6fF × (200mV)² = 32aJ
2. 积分电容充电
E_int = ½C_int×V_out² × 4
- C_int = 1pF
- V_out_avg = 150mV
- E_int = 0.5 × 1pF × (150mV)² × 4 = 45fJ
3. ADC能耗
E_ADC = 4 × 10pJ = 40pJ(主导)
总动态能耗:32aJ + 45fJ + 40pJ ≈ 40pJ
静态功耗:
- 泄漏电流:I_leak = 1nA/cell
- 16个单元:P_static = 16nA × 200mV = 3.2nW
- 10ns计算:E_static = 32aJ
总能耗:40pJ + 32aJ ≈ 40pJ
每MAC能耗:40pJ / 16 = 2.5pJ/MAC
执行时间对比
CPU 数字PIM 模拟PIM
--------------------------------------------------------
数据准备 400周期 4周期 0(预编程)
计算执行 1280周期 8周期 ~20周期(10ns)
结果输出 20周期 5周期 10周期(ADC)
总计 1700周期 17周期 30周期
@2GHz时间 850ns 8.5ns 15ns
相对速度 1× 100× 57×
能耗对比
能耗组成 CPU 数字PIM 模拟PIM
------------------------------------------------
权重访问 25.6nJ 128pJ 0
输入访问 25.6nJ 32pJ 0
缓存层次 1.54nJ 0 0
计算单元 4.4pJ 4.4pJ 0.08pJ
模数转换 0 0 40pJ
其他开销 0.26nJ 26pJ 0
------------------------------------------------
总计 52.7nJ 190pJ 40pJ
每MAC 3.29nJ 11.9pJ 2.5pJ
能效提升 1× 277× 1318×
面积效率
实现方式 面积 性能 面积效率
-------------------------------------------------
CPU核心 10mm² 0.134 GOPS 13.4 MOPS/mm²
数字PIM PCU 0.5mm² 2.35 GOPS 4.7 GOPS/mm²
模拟PIM阵列 0.01mm² 1.07 GOPS 107 GOPS/mm²
扩展性分析
扩展到1024×1024:
CPU:
- 周期数:O(n²) = 1M倍增长
- 缓存压力:超出L3容量
- 预测时间:850μs
数字PIM:
- 增加Bank数量:256个
- 保持并行度
- 预测时间:~1μs
模拟PIM:
- 使用64个128×128子阵列
- 流水线化ADC
- 预测时间:~100ns
关键洞察总结
能耗分解
操作类型 次数 单位能耗 总能耗
-----------------------------------------------
1. 广播阶段:
外部接口读 4 200pJ 800pJ
片内广播 4×4 2pJ 32pJ
2. 计算阶段(每Bank):
本地DRAM读 4 5pJ 20pJ
寄存器读 8 0.5pJ 4pJ
MAC运算 4 0.2pJ 0.8pJ
小计×4 Banks 99.2pJ
3. 结果收集:
Bank→Host 4 20pJ 80pJ
总计: 1011pJ
对比CPU:52.7nJ → 1.01nJ(52×改进)
带宽效率分析:
传统架构带宽需求:
- 每个MAC需要读取:1个W元素 + 1个x元素
- 总带宽:16 × 2 × 1B = 32B
- 时间:420周期 @ 2GHz = 210ns
- 需求带宽:32B/210ns = 152MB/s
HBM-PIM带宽使用:
- 外部带宽:4B(仅x向量)
- 内部带宽:4 banks × 4B × 4次 = 64B
- 时间:17周期 @ 1GHz = 17ns
- 外部带宽:4B/17ns = 235MB/s
- 内部带宽:64B/17ns = 3.76GB/s
带宽放大系数:3.76GB/152MB = 24.7×
关键优化点
ReRAM交叉阵列实现:
物理映射(完整4×4阵列):
V₁ V₂ V₃ V₄
| | | |
┌──●──────●──────●──────●──┐
I₁ ←──┤G₁₁=1mS G₁₂=2mS G₁₃=3mS G₁₄=4mS├──→ 电流求和
├──●──────●──────●──────●──┤
I₂ ←──┤G₂₁=5mS G₂₂=6mS G₂₃=7mS G₂₄=8mS├──→
├──●──────●──────●──────●──┤
I₃ ←──┤G₃₁=9mS G₃₂=10mS G₃₃=11mS G₃₄=12mS├──→
├──●──────●──────●──────●──┤
I₄ ←──┤G₄₁=13mS G₄₂=14mS G₄₃=15mS G₄₄=16mS├──→
└────────────────────────────┘
电导映射(权重→电导):
W[i,j] → G[i,j] = W[i,j] × 1mS
详细计算过程:
步骤1:输入编码
x = [1, 2, 3, 4]ᵀ → V = [0.1V, 0.2V, 0.3V, 0.4V]
(缩放因子0.1,防止电流过大)
步骤2:并行模拟计算(欧姆定律+基尔霍夫定律)
第1行:
I₁ = G₁₁V₁ + G₁₂V₂ + G₁₃V₃ + G₁₄V₄
= 1mS×0.1V + 2mS×0.2V + 3mS×0.3V + 4mS×0.4V
= 0.1mA + 0.4mA + 0.9mA + 1.6mA = 3.0mA
第2行:
I₂ = 5×0.1 + 6×0.2 + 7×0.3 + 8×0.4 = 7.0mA
第3行:
I₃ = 9×0.1 + 10×0.2 + 11×0.3 + 12×0.4 = 11.0mA
第4行:
I₄ = 13×0.1 + 14×0.2 + 15×0.3 + 16×0.4 = 15.0mA
步骤3:输出解码
y = I / 0.1mA = [30, 70, 110, 150]ᵀ ✓
性能统计:
数据搬移分析:
- 权重读取:0(已编程在电导中)
- 输入数据:4个电压值施加
- 输出数据:4个电流值读出
- 总数据移动:8个值 vs 传统的36个值
时间分析:
- 电压建立:1ns
- RC积分:~5ns(τ = 10kΩ × 0.5pF)
- 电流稳定:2ns
- ADC转换:2ns
- 总时间:10ns vs CPU的840ns (84×加速)
能耗分析:
- 阵列功耗:I²R = (15mA)² × 100Ω = 22.5μW × 10ns = 0.225pJ
- 驱动器:4 × 0.1V × 1mA × 10ns = 4pJ
- ADC:4 × 8bit × 1pJ/bit = 32pJ
- 总能耗:~36pJ vs CPU的52.7nJ (1464×改进)
详细的物理过程分析:
步骤1:权重编程(一次性,离线)
W矩阵 → 电导矩阵G
W[i,j] = 1-16 → G[i,j] = 1-16 mS
编程过程:
- 施加编程电压Vprog = 2V
- 调整脉冲宽度控制电导
- 验证读取确保精度
步骤2:输入电压编码
x = [1,2,3,4] → V = [0.1V, 0.2V, 0.3V, 0.4V]
编码关系:V = x × 0.1V
步骤3:并行模拟计算
每行电流(基尔霍夫定律自动求和):
I₁ = Σ(G₁,ⱼ × Vⱼ) = 1×0.1 + 2×0.2 + 3×0.3 + 4×0.4
= 0.1 + 0.4 + 0.9 + 1.6 = 3.0mA
I₂ = Σ(G₂,ⱼ × Vⱼ) = 5×0.1 + 6×0.2 + 7×0.3 + 8×0.4
= 0.5 + 1.2 + 2.1 + 3.2 = 7.0mA
同理:I₃ = 11.0mA, I₄ = 15.0mA
步骤4:ADC转换
电流→数字值:I/0.1mA = y
y = [30, 70, 110, 150] ✓
时间分解:
- 电压施加:1ns(驱动器建立)
- RC充电:5ns(τ = RC ≈ 5ns)
- 电流稳定:2ns
- ADC采样:2ns
总计:10ns
当矩阵扩展到8192×8192(Transformer的典型维度):
详细计算过程:
基础参数:
- 矩阵大小:8192×8192
- 数据类型:INT8(1字节)
- 总计算量:8192² × 2 = 134.2M ops
传统GPU(A100):
- 数据搬移:W矩阵67.1MB + x向量8KB + y向量8KB = 67.1MB
- 有效带宽:1.6TB/s × 20% = 320GB/s(缓存命中率低)
- 延迟:67.1MB / 320GB/s = 210μs
- 计算时间:134.2M / 19.5T = 6.9ns(忽略不计)
- 总延迟:~210μs(带宽瓶颈)
- 能耗:67.1MB × 8bit × 100pJ/bit = 53.7mJ
数字PIM(HBM-PIM,128 PCU):
- 数据搬移:x向量8KB + y向量8KB = 16KB(仅外部)
- 每PCU负责:8192/128 = 64行
- 并行计算时间:64×8192 / (16×1G) = 32.8μs
- 广播时间:8KB / 100GB/s = 0.08μs
- 总延迟:~33μs
- 能耗:
- 外部:16KB × 8 × 200pJ = 25.6μJ
- 内部:67.1MB × 8 × 5pJ = 2.68mJ
- 总计:2.71mJ
模拟PIM(128×128子阵列):
- 数据搬移:0(权重在片上)
- 子阵列数:(8192/128)² = 4096个
- 流水线深度:64级
- 每级延迟:20ns(包括ADC)
- 总延迟:64 × 20ns = 1.28μs
- 能耗:
- 阵列:4096 × 1nJ = 4.1μJ
- ADC:4096 × 128 × 8 × 1pJ = 4.2μJ
- DAC:64 × 128 × 8 × 0.5pJ = 32.8μJ
- 总计:41.1μJ
| 指标 | 传统GPU | 数字PIM | 模拟PIM |
|---|---|---|---|
| 数据搬移 | 67.1MB | 16KB | 0 |
| 延迟 | 210μs | 33μs | 1.28μs |
| 能耗 | 53.7mJ | 2.71mJ | 41.1μJ |
| 能效提升 | 1× | 19.8× | 1307× |
| 吞吐量@100W | 1.86 TOPS | 36.9 TOPS | 2435 TOPS |
扩展性分析:
从4×4到8192×8192的扩展:
- 计算量增加:1048576倍
- 数据量增加:1048576倍
不同架构的扩展效率:
GPU:
- 并行度:2048个核心
- 扩展效率:~20%(受内存带宽限制)
数字PIM:
- 并行度:16384个PCU
- 扩展效率:~80%(近线性扩展)
模拟PIM:
- 并行度:完全并行
- 扩展效率:~95%(受外围电路限制)
传统架构能耗:
E_total = E_compute + E_memory + E_control
E_compute = n_ops × E_per_op
E_memory = Σ(n_access[i] × d_distance[i] × E_per_bit_per_mm)
E_control = n_instructions × E_per_instruction
PIM架构能耗:
E_PIM = E_local_compute + E_local_access + E_peripheral + E_conversion
E_local_compute = n_ops × E_op_local
E_local_access = n_access × E_bank_access
E_peripheral = E_broadcast + E_collect
E_conversion = E_DAC + E_ADC (仅模拟PIM)
关键参数对比(7nm vs 45nm工艺):
参数 45nm 7nm 单位
────────────────────────────────────────
DRAM访问能耗 20 15 pJ/bit
SRAM访问能耗 2 0.5 pJ/bit
INT8乘法能耗 0.2 0.05 pJ
FP16乘法能耗 0.5 0.1 pJ
导线传输能耗 0.3 0.1 pJ/bit/mm
晶体管漏电功率 1 0.1 nW/gate
工艺缩放规律:
E_new = E_old × (L_new/L_old)² × V_scaling
其中V_scaling ≈ 0.9每代
详细能耗模型推导:
对于m×n矩阵向量乘法:
传统架构:
E_total = E_comp + E_mem + E_ctrl
其中:
E_comp = m×n×E_MAC
= m×n×(E_mul + E_add)
= m×n×(0.2 + 0.1) pJ
= 0.3mn pJ
E_mem = E_weight + E_vector + E_result
= mn×b_w×E_DRAM + n×b_x×E_DRAM×(m/cache_reuse) + m×b_y×E_DRAM
= mn×8×20 + n×8×20×(m/4) + m×8×20
= 160mn + 40mn + 160m pJ
≈ 200mn pJ (当m,n >> 1)
E_ctrl ≈ 0.1×E_comp = 0.03mn pJ
因此:E_total ≈ 200.33mn pJ
数字PIM架构:
E_PIM = E_bcast + E_local + E_collect
E_bcast = n×b×E_external
= n×8×200 = 1600n pJ
E_local = P×(mn/P)×b×E_bank
= mn×8×5 = 40mn pJ
E_collect = m×b×E_network
= m×8×20 = 160m pJ
因此:E_PIM ≈ 40mn + 1600n + 160m pJ
能耗比(详细推导):
R = E_total/E_PIM ≈ 200mn/(40mn + 1600n + 160m)
当m=n=8192时:
计算各项:
- 分子:200×8192² = 200×67,108,864 = 13,421,772,800 pJ = 13.42 mJ
- 分母第一项:40×8192² = 2,684,354,560 pJ = 2.68 mJ
- 分母第二项:1600×8192 = 13,107,200 pJ = 0.013 mJ
- 分母第三项:160×8192 = 1,310,720 pJ = 0.0013 mJ
- 分母总和:2.68 + 0.013 + 0.0013 = 2.69 mJ
R = 13.42 / 2.69 = 4.99
结论:数字PIM能效提升约5倍
对于模拟PIM(额外计算):
E_analog ≈ n×E_DAC + m×n×E_cell + m×E_ADC
= 8192×0.5 + 8192²×0.001 + 8192×1 pJ
= 4,096 + 67,109 + 8,192 pJ
= 79,397 pJ = 0.079 mJ
R_analog = 13.42 / 0.079 = 169.9
结论:模拟PIM能效提升约170倍
带宽受限场景(算术强度 < ridge point):
Performance = Memory_Bandwidth × Arithmetic_Intensity
PIM性能优势:
Speedup = (BW_internal / BW_external) × (1 - α)
其中α是非并行化部分(Amdahl定律)
对于HBM-PIM:
详细性能模型:
传统架构MVM性能:
T_traditional = max(T_compute, T_memory) + T_overhead
T_compute = (m×n×2)/(FLOPS×utilization)
T_memory = T_latency + T_bandwidth
T_latency = n_cache_misses × miss_penalty
T_bandwidth = data_volume / effective_bandwidth
T_overhead = T_decode + T_schedule + T_sync
完整公式展开:
T_traditional = max(
2mn/(f×p×u), # 计算时间
L_mem + mn×b_w/BW + C×L_cache # 内存时间
) + n_inst/f_frontend # 前端开销
其中:
- f: 频率, p: 并行度, u: 利用率
- L_mem: 内存延迟, BW: 带宽
- C: 缓存命中率, L_cache: 缓存延迟
示例计算(8192×8192,INT8,A100):
参数代入:
- m=n=8192, b_w=1字节
- f=1.4GHz, p=6912核, u=0.1(内存受限)
- BW=1.6TB/s, L_mem=200ns
- 缓存命中率=20%
T_compute = 2×8192²/(1.4G×6912×0.1) = 138.5μs
T_memory = 200ns + 67.1MB/1.6TB/s + 0.8×50ns = 42.1μs
T_traditional = max(138.5, 42.1) = 138.5μs(计算受限假象)
但实际上由于内存带宽竞争:
有效带宽 = 1.6TB/s × 0.2 = 320GB/s
T_memory_real = 67.1MB/320GB/s = 209.7μs(真实瓶颈)
数字PIM性能:
T_PIM = T_broadcast + T_compute_parallel + T_collect
T_broadcast = n×b/BW_host_to_pim
T_compute_parallel = (m×n)/(P×f×ops_per_cycle)
T_collect = m×b/BW_pim_to_host
展开计算(HBM-PIM,128 PCU):
参数:
- P=128 PCU, f=1GHz
- ops_per_cycle=16(SIMD宽度)
- BW_host=100GB/s
T_broadcast = 8192×1/100GB/s = 81.92ns
T_compute = 8192²/(128×1G×16) = 32.77μs
T_collect = 8192×1/100GB/s = 81.92ns
T_PIM = 0.082 + 32.77 + 0.082 = 32.93μs
加速比 = 209.7μs/32.93μs = 6.37×
模拟PIM性能模型:
T_analog = max(T_DAC, T_MAC, T_ADC) × pipeline_depth
其中:
T_DAC = settling_time + conversion_time
T_MAC = RC_time_constant × ln(precision)
T_ADC = n_bits × t_per_bit + sample_hold
详细推导:
对于128×128子阵列:
- T_DAC = 2ns(8位电流舵DAC)
- T_MAC = 5ns(RC = 10kΩ×0.5pF)
- T_ADC = 8ns(1ns/bit SAR)
- 流水线深度 = ceil(8192/128) = 64
T_stage = max(2, 5, 8) = 8ns
T_analog = 8ns × 64 = 512ns = 0.512μs
加速比 = 209.7μs/0.512μs = 409.6×
经典Roofline模型:
Performance = min(Peak_Compute, Peak_Bandwidth × AI)
其中AI(算术强度)= FLOPs/Bytes
对于不同精度:
AI_FP32 = 2mn/(mn×4 + n×4 + m×4) ≈ 0.5 ops/byte
AI_FP16 = 2mn/(mn×2 + n×2 + m×2) ≈ 1.0 ops/byte
AI_INT8 = 2mn/(mn×1 + n×1 + m×1) ≈ 2.0 ops/byte
AI_INT4 = 2mn/(mn×0.5 + n×0.5 + m×0.5) ≈ 4.0 ops/byte
PIM扩展Roofline模型:
考虑内外存带宽差异:
Performance_PIM = min(
Peak_Compute,
BW_external × AI_external + BW_internal × AI_internal
)
其中:
AI_external = FLOPs/External_Data
AI_internal = FLOPs/Internal_Data
对于MVM:
AI_external_PIM = 2mn/(n×b + m×b) ≈ mn/b (当m,n >> 1)
AI_internal_PIM = 2mn/(mn×b) = 2/b
示例(m=n=8192, INT8):
AI_external_PIM = 8192²/1 = 67M ops/byte
AI_internal_PIM = 2/1 = 2 ops/byte
详细的Roofline分析:
系统配置:
1. GPU (A100):
- 峰值计算:312 TFLOPS (FP16)
- 内存带宽:1.6 TB/s
- Ridge point:195 ops/byte
2. 数字PIM (HBM-PIM):
- 峰值计算:2.5 TOPS (INT8) × 128 = 320 TOPS
- 外部带宽:100 GB/s
- 内部带宽:128 × 100 GB/s = 12.8 TB/s
- Ridge point(外部):3200 ops/byte
- Ridge point(内部):25 ops/byte
3. 模拟PIM (ReRAM):
- 峰值计算:100 TOPS/array × 64 = 6.4 POPS
- 有效计算(考虑ADC):200 TOPS
- 输入带宽受限:8 × 1GS/s = 8 GB/s
- Ridge point:25000 ops/byte
Roofline图(对数坐标):
Performance (TOPS)
1000├────────────────┐模拟PIM峰值
│ ╱
100├─────────┐数字PIM╱
│ GPU│ ╱
10├─────╱───┼───╱
│ ╱ │ ╱
1├─╱───────┼╱
│╱ ╱
0.1├────────╱─────────
0.1 1 10 100 1000
AI (ops/byte)
算法-硬件协同优化:
1. 稀疏性利用:
E_sparse = E_dense × (1 - sparsity + overhead)
示例(50%稀疏):
- 传统架构:E = E_full × (0.5 + 0.1) = 0.6E_full
- PIM架构:E = E_full × 0.5 = 0.5E_full(硬件跳零)
2. 量化感知:
E_quant = E_base × (bit_width/32)²
能耗缩放:
- FP32 → INT8: 16×能耗降低
- INT8 → INT4: 4×能耗降低
- 但需考虑额外的量化/反量化开销
3. 批处理优化:
E_per_sample = E_weights/batch_size + E_activation
最优批大小:
B_opt = sqrt(E_weights/E_activation)
PIM特定优化:
1. 数据布局优化:
- 行主序 vs 列主序
- 分块策略:匹配Bank大小
- 示例:8192×8192矩阵
* 传统:行主序,缓存不友好
* PIM:128×128块,每块一个Bank
2. 计算调度:
- 重叠计算与通信
- 流水线化
时间线示例:
时刻 Bank0 Bank1 Host
t0 计算0 计算0 发送x
t1 计算1 计算1 接收y0
t2 计算2 计算2 接收y1
...
3. 精度分配:
- 关键层:高精度
- 非关键层:低精度
- 自适应精度:
* 初始层INT8(输入噪声大)
* 中间层INT4(权重压缩)
* 输出层INT8(精度要求)
Qwen-72B单token推理:
模型参数:
- 参数量:72B
- 层数:80
- 隐藏维度:8192
- FFN维度:22016
每层计算量:
- Attention: 4×8192² = 268M ops
- FFN: 3×8192×22016 = 541M ops
- 总计:809M ops/层
- 全模型:64.7G ops/token
传统GPU系统(8×H100):
能耗分解:
- 权重加载:72B×0.5B×100pJ = 3.6J
- KV-cache:100MB×100pJ = 10mJ
- 计算:64.7G×0.1pJ = 6.47mJ
- 总计:3.62J/token
- 功耗@100 tokens/s:362W
数字PIM系统:
能耗分解:
- 激活传输:80×16KB×200pJ = 256μJ
- 本地计算:64.7G×0.05pJ = 3.24mJ
- Bank访问:72GB×5pJ = 360mJ
- 总计:363.5mJ/token
- 功耗@100 tokens/s:36.4W
- 能效提升:9.95×
模拟PIM系统(理想):
能耗分解:
- DAC:80×8K×8×0.5pJ = 2.56μJ
- 模拟MAC:64.7G×0.001pJ = 64.7μJ
- ADC:80×8K×8×1pJ = 5.12μJ
- 总计:72.4μJ/token
- 功耗@100 tokens/s:7.24mW
- 能效提升:50000×(!)
关键洞察:
技术路线图:
2024-2025:
- 数字PIM产品化(HBM4-PIM)
- 带宽:2TB/s/stack
- 集成度:1Gb DRAM + 1TFLOPS计算
2026-2027:
- 混合数字-模拟PIM
- CXL-attached PIM
- 可重构计算阵列
2028-2030:
- 全模拟神经形态计算
- 光电混合计算
- 量子-经典混合架构
性能预测模型:
基于历史趋势的指数模型:
Performance(t) = P0 × 2^((t-t0)/doubling_time)
其中:
- 传统计算:doubling_time = 2.5年
- PIM计算:doubling_time = 1.5年(更快)
能效趋势:
Energy_efficiency(t) = E0 × 1.5^((t-t0)/year)
预测2030年:
- PIM计算力:100 POPS/芯片
- 能效:1000 TOPS/W
- 使能千亿参数模型边缘部署
本章深入探讨了PIM/NMC的基础概念、分类体系和核心技术。通过详细的4×4矩阵计算示例,我们直观展示了PIM如何通过消除数据搬移实现数量级的性能和能效提升。关键要点:
历史必然性:从1969年的理论探索到2024年的产业化,PIM的复兴是AI时代内存墙问题的必然解决方案
架构多样性:数字PIM提供灵活性和精度,模拟PIM追求极致能效,混合架构平衡各方需求
数据局部性是关键:通过将计算移至数据,PIM从根本上改变了计算范式
能效提升巨大:消除数据搬移后,实现10-1000倍能效提升
实用化在即:标准化、生态完善和应用驱动正推动PIM快速产业化
下一章我们将深入探讨各类PIM存储技术的具体实现。 T_collect = m×b/BW_pim_to_host
其中P是并行单元数
示例(128个PCU,1GHz,16 ops/cycle): T_broadcast = 8192×1B/100GB/s = 82ns T_compute = 8192²/(128×1G×16) = 32.8μs T_collect = 8192×1B/100GB/s = 82ns T_total = 33μs
加速比 = 67.1/33 = 2.03×
模拟PIM性能:
T_analog = T_DAC + T_integration + T_ADC
T_integration = RC时间常数 ≈ 10ns(固定) T_DAC = n×t_per_channel T_ADC = m×t_per_conversion
示例(128×128子阵列): 阵列数 = (8192/128)² = 4096 T_per_array = 10ns + 5ns + 5ns = 20ns 使用流水线:T_total = 20ns × 64 = 1.28μs
加速比 = 67.1/1.28 = 52.4×
### 2.5.3 面积效率模型
**关键指标定义**:
面积效率的多维度评估:
计算密度: Compute_Density = Peak_Performance / Die_Area 单位:TOPS/mm²
存储密度:
Memory_Density = Memory_Capacity / Die_Area
单位:GB/mm²
综合效率(考虑实际利用率): Effective_Efficiency = (Actual_Performance × Memory_BW) / (Die_Area × Power) 单位:(TOPS×TB/s)/(mm²×W) ```
不同方案对比: | 方案 | 计算密度 | 存储密度 | 有效利用率 | 综合面积效率 | |—–|———|———|———–|————| | GPU (A100) | 237 GOPS/mm² | 0.097 GB/mm² | 10-20% | 24-48 GOPS/mm² | | 数字PIM | 512 GOPS/mm² | 64 GB/mm² | 60-80% | 307-410 GOPS/mm² | | 模拟PIM | 10 TOPS/mm² | 2 GB/mm² | 70-90% | 7-9 TOPS/mm² |
详细面积模型:
GPU (7nm):
计算面积:
- Tensor Core: 100 TFLOPS/100mm² = 1 TFLOPS/mm²
- SRAM: 20MB/50mm² = 0.4MB/mm²
- 总芯片:815mm²
面积效率 = 19.5 TFLOPS / 815mm² = 24 GFLOPS/mm²
数字PIM:
HBM-PIM单元:
- PCU面积:0.5mm²(16×16 MAC)
- 对应DRAM:64MB/mm²
- 计算能力:256 GOPS @ 1GHz
面积效率 = 256 GOPS / 0.5mm² = 512 GOPS/mm²
存储计算比:64MB/256GOPS = 0.25MB/GOPS
模拟PIM:
ReRAM阵列:
- 128×128交叉阵列:0.01mm²
- 计算能力:1.6 TOPS @ 100MHz
- 存储容量:16Kb (2KB)
面积效率 = 1.6 TOPS / 0.01mm² = 160 TOPS/mm²
但需要额外的ADC/DAC面积:
- 8-bit ADC: 0.05mm²
- 实际效率:~10 TOPS/mm²
PIM设计的三角权衡:
能效
/\
/ \
/ \
/ \
/________\
精度 性能
定量权衡分析:
设计参数空间:
精度(P): 4-32 bits
能效(E): 0.1-1000 TOPS/W
性能(S): 1-1000 TOPS
约束关系:
E × P² ≈ 常数(精度越高,能效越低)
S × P ≈ 常数(精度越高,性能密度越低)
示例:
- INT4: 100 TOPS, 100 TOPS/W, 适合推理
- INT8: 50 TOPS, 25 TOPS/W, 平衡选择
- FP16: 10 TOPS, 5 TOPS/W, 高精度需求
优化目标函数:
maximize: F = α×log(S) + β×log(E) - γ×(P_target - P)²
其中:
- α,β,γ是权重系数(α+β+γ=1)
- P_target是目标精度
- S是性能(TOPS),E是能效(TOPS/W),P是精度(bits)
扩展的多目标优化模型:
F_extended = α×log(S/S_min) + β×log(E/E_min) - γ×(P_target - P)²
- δ×log(C/C_budget) - ε×(L - L_max)²
新增约束:
- C: 成本($),C_budget: 预算上限
- L: 延迟(ms),L_max: 最大可接受延迟
- δ,ε: 额外权重系数
不同应用的权重选择:
应用场景 α(性能) β(能效) γ(精度) δ(成本) ε(延迟) 示例配置
──────────────────────────────────────────────────────────────
边缘推理 0.2 0.5 0.1 0.1 0.1 INT4模拟PIM
数据中心 0.4 0.2 0.2 0.1 0.1 INT8数字PIM
科学计算 0.1 0.1 0.6 0.1 0.1 FP16混合PIM
实时控制 0.2 0.1 0.2 0.1 0.4 INT8数字PIM
电池设备 0.1 0.6 0.1 0.1 0.1 INT4模拟PIM
具体案例:边缘视觉AI
需求:30fps@1080p,<5W,>90%准确率,<$50,<33ms延迟
完整计算过程:
1. 工作负载分析:
- 模型:MobileNet-V3 (5M参数)
- 计算量:0.22 GFLOPS/帧
- 需要性能:0.22×30 = 6.6 GFLOPS
2. 候选方案评估:
数字PIM (INT8):
- S = 10 TOPS, E = 2 TOPS/W, P = 8 bits
- C = $80, L = 20ms
- F_digital = 0.2×log(10/6.6) + 0.5×log(2/0.1)
- 0.1×(8-6)² - 0.1×log(80/50) - 0.1×(20-33)²
= 0.2×0.18 + 0.5×1.3 - 0.1×4 - 0.1×0.2 - 0.1×(-13)²
= 0.036 + 0.65 - 0.4 - 0.02 + 0 = 0.266
模拟PIM (INT4):
- S = 50 TOPS, E = 50 TOPS/W, P = 4 bits
- C = $40, L = 5ms
- F_analog = 0.2×log(50/6.6) + 0.5×log(50/0.1)
- 0.1×(4-6)² - 0.1×log(40/50) - 0.1×(5-33)²
= 0.2×0.88 + 0.5×2.7 - 0.1×4 - 0.1×(-0.1) - 0
= 0.176 + 1.35 - 0.4 + 0.01 - 0 = 1.136
3. 敏感性分析:
精度要求提高到INT8时:
F_analog_int8 = 1.136 - 0.1×(8-4)² = 1.136 - 1.6 = -0.464
结论:精度要求严格时,数字PIM更优
成本效益分析:
ROI = (性能提升×生命周期 - 额外成本) / 初始投资
= (50×3年×8760小时 - $40) / $40 = 32,849
通过本章学习,我们深入理解了PIM/NMC的基础概念和核心价值:
能耗模型:
E_traditional ≈ 200mn pJ (内存主导)
E_digital_PIM ≈ 40mn pJ (5×改进)
E_analog_PIM ≈ 0.001mn pJ (1000×改进)
性能模型:
T_traditional = mn×b/BW_external
T_PIM = n×b/BW_host + mn/(P×f) + m×b/BW_host
面积效率:
传统GPU:~50 GOPS/mm²(实际)
数字PIM:~400 GOPS/mm²(实际)
模拟PIM:~8 TOPS/mm²(实际)
在第3章中,我们将深入探讨具体的PIM存储技术实现,包括:
记住:PIM的本质是将计算移至数据,而非将数据移至计算。这个简单的理念正在重塑计算机体系结构的未来。
关键洞察:
下一章,我们将深入探讨支撑PIM的各类存储技术,理解它们如何实现计算功能,以及各自的优劣权衡。