near_memory_computing

第2章:PIM/NMC基础

章节概览

本章介绍近存计算和存内计算的基本概念、分类体系和核心原理。通过简单的4×4矩阵示例,我们将直观展示PIM如何减少数据搬移,以及基本的能耗和性能模型。这些基础知识将为后续深入探讨各类PIM架构奠定基础。

2.1 历史背景:简述演进

2.1.1 早期探索(1960s-1990s)

PIM的概念并非新生事物,其演进历程反映了计算机体系结构的发展脉络:

1969年:Stone的逻辑增强存储器

1970s:专用数据库机器的黄金时代

1980s:VLSI时代的新尝试

1990s:与主流技术融合的尝试

1990s末期的其他尝试

这些项目的共同特点:

2.1.2 技术推动力的变化

2000s:多核时代的内存墙

处理器与内存性能差距的定量分析:

内存墙的根本原因

  1. RC延迟:DRAM单元电容~30fF,位线电阻~1kΩ,RC时间常数30ps为物理下限
  2. 信号传播:光速限制~20cm/ns,芯片到DIMM距离~10cm,往返延迟>1ns无法改善
  3. 刷新开销:64ms刷新周期,8K行刷新,性能损失约7%

性能差距的量化分析

年份    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模型示例)

推理工作负载的独特挑战

  1. 内存带宽瓶颈
    • 单token生成:需要加载全部模型权重
    • Qwen-72B示例:72B参数 = 36GB(INT4)
    • 生成1 token需要36GB内存访问
    • 要达到100 tokens/s需要3.6TB/s带宽
  2. 能耗分解(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量化): 操作类型 次数 单位能耗 总能耗 ───────────────────────────────────────── 计算部分:

    • INT4乘法 72B 0.1pJ 7.2mJ
    • INT32累加 72B 0.1pJ 7.2mJ
    • 激活函数 1B 0.5pJ 0.5mJ 小计: 14.9mJ

    内存部分(详细计算):

    • 权重加载:36GB = 36×8×10^9 bits 36×8×10^9 × 200×10^-12 J = 57.6J
    • 激活读写:1GB = 8×10^9 bits
      8×10^9 × 200×10^-12 J = 1.6J
    • KV-cache:100MB = 0.8×10^9 bits 0.8×10^9 × 200×10^-12 J = 0.16J 小计: 59.36J

    能耗比例:

    • 内存访问:59.36J / 59.375J = 99.97%
    • 计算:0.0149J / 59.375J = 0.025%
    • 控制:~0.005%

    关键洞察:内存能耗是计算的3984倍!

    逐层能耗分析(80层): 每层能耗 = 59.375J / 80 = 0.742J 其中:

    • Attention部分:0.742J × 0.4 = 0.297J
      • QKV投影:0.089J
      • 注意力计算:0.059J
      • 输出投影:0.030J
      • KV-cache:0.119J
    • FFN部分:0.742J × 0.6 = 0.445J
      • 上投影:0.178J
      • 激活:0.089J
      • 下投影:0.178J

    如果使用PIM(就地计算):

    • 权重无需搬移:节省57.6J
    • 仅需搬移激活和KV:1.76J
    • 能耗降低:59.36J → 1.76J(33.7倍改进)
    • 功率(100 tokens/s):5936W → 176W
  3. 实时性要求
    • 交互式应用:<100ms首token延迟
    • 流式生成:>30 tokens/s
    • 传统架构难以同时满足

2.1.3 现代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. 生态系统准备就绪

标准化进展

软件栈成熟

产业联盟形成

2.2 分类体系:近数据vs存内、模拟vs数字

2.2.1 按计算位置分类

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):

实际实现技术:

  1. 电荷域计算(SRAM):
    • 电荷共享实现加法
    • 电容比例实现乘法
    • 精度:4-8 bits
    • 能效:0.1-1 fJ/op
  2. 电流域计算(ReRAM/PCM):
    • 欧姆定律实现乘法
    • 基尔霍夫定律实现加法
    • 并行度:整个阵列
    • 挑战:器件变异性
  3. 时间域计算(新兴):
    • 脉冲宽度编码数值
    • 延迟线实现运算
    • 优势:抗噪声
    • 劣势:速度慢

性能特征对比:

            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级(真存内)

2.2.2 按计算方式分类

数字PIM:精确可控的计算

架构特点:

深入案例分析:

  1. Samsung HBM-PIM(2021) ``` 规格参数:
    • 工艺:20nm DRAM + 28nm逻辑
    • 计算单元:16×16 INT8 MAC阵列/bank
    • 峰值性能:1.2 TFLOPS (INT8)
    • 内存容量:16GB HBM2
    • 功耗:<20W

    性能实测(GEMM):

    • 矩阵规模:4096×4096
    • 传统GPU:2.5ms
    • HBM-PIM:0.4ms(6.25×加速)
    • 能效提升:70% ```

    详细性能分析

    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
    
  2. UPMEM DPU(2019) ``` 架构细节:
    • 完整32位RISC处理器
    • 24KB SRAM工作内存
    • 64MB DRAM主存储
    • 多线程:24个硬件线程

    编程模型:

    • C/C++编程
    • OpenMP-like并行
    • 主机-设备异步执行
    • SDK支持Python/Java ```
  3. Alibaba HB-PNM(2023) ``` 创新点:
    • 可重构计算阵列
    • 支持INT4/8/16动态切换
    • 稀疏感知架构
    • 实测性能:2.8 TOPS/W ```

模拟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%(可接受)

实际案例深度分析:

  1. Mythic M1076(2024) ``` 技术规格:
    • 40nm嵌入式Flash工艺
    • 108M权重存储
    • 35 TOPS峰值性能
    • 4W典型功耗

    独特设计:

    • 模拟矩阵乘法器(AMM)
    • 8位ADC/DAC
    • 数字RISC-V控制器
    • 片上SRAM缓冲 ```
  2. IBM HERMES(2023) ``` 相变存储器计算:
    • 45nm PCM技术
    • 百万级突触器件
    • 原位训练能力
    • 应用:神经形态计算 ```

混合信号PIM:平衡的艺术

设计理念:

关键组件分析:

  1. ADC设计权衡
    分辨率 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数量
    
  2. DAC能耗模型
    电流舵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×能耗降低
    - 动态元件匹配:改善线性度
    - 预充电技术:减少瞬态功耗
    
  3. 模数转换开销分析
    场景: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²

    选择原则:

    • AI推理:6-8位足够
    • 科学计算:需要10+位 ```
  4. 计算精度管理 ``` 混合精度策略:
    • 第一层:8位(输入量化噪声大)
    • 中间层:4-6位(权重压缩)
    • 最后层:8位(输出精度要求)
    • 整体精度损失:<1% ```
  5. 实际产品:Analog Inference Accelerator(2023) ``` 架构特点:
    • 256×256模拟乘法阵列
    • 可配置6/8位精度
    • 集成数字后处理
    • 25 TOPS @ 3W ```

2.2.3 架构分类对比

深度定量对比分析:

特性 近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年

实际应用场景映射

  1. 近Bank数字PIM最适合
    • 需要高精度的金融模型
    • 灵活性要求高的研究环境
    • 需要与现有软件栈兼容
    • 示例:HBM-PIM用于推荐系统
  2. 真存内模拟最适合
    • 边缘AI推理(功耗敏感)
    • 固定模型部署
    • 超低延迟应用
    • 示例:Mythic用于安防摄像头
  3. 混合架构最适合
    • 数据中心AI推理
    • 需要平衡精度和能效
    • 多模型切换场景
    • 示例:Google TPU v5中的混合设计

架构选择决策树

应用需求评估
    ↓
精度要求 > 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(批处理)
- 灵活性:固定模型(模拟), 可更新(混合), 完全可编程(数字)

2.3 基本操作:存储器内矩阵向量乘法

2.3.1 为什么是矩阵向量乘法?

矩阵向量乘法(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(严重内存受限)

2.3.2 传统架构的MVM实现

冯诺依曼架构下的MVM步骤分解: 计算y = Wx,传统行优先实现需要4步:加载权重、加载输入、执行乘法、累加结果。

具体性能分析(1024×1024,FP16):

缓存优化的效果与限制: 分块算法(Tiling)选择B×B块大小,使3个块能装入L2。

性能改进分析(B=64):

仍存在问题:首次加载需从DRAM、大模型超出缓存容量、多核竞争缓存资源

Qwen-72B缓存挑战:单层权重~1GB(INT8),L3缓存128MB,覆盖率仅12.8%,缓存优化效果有限

2.3.3 PIM架构的MVM革命

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
- 仍然优秀!

2.3.4 算法层面的协同优化

权重稀疏性利用

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%

2.3.2 传统架构的MVM

让我们通过具体实现来理解传统架构的局限性。

基础实现(无优化)

// 最朴素的实现
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
仍然不够!

2.3.3 PIM中的MVM实现

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%(层间相关性降低误差)

2.3.4 数据搬移对比

让我们通过详细的定量分析来理解不同架构的本质差异。

测试场景: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
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%   │
└─────────────┘       └─────────────┘

关键洞察

  1. 数据搬移主导能耗(>99.9%)
  2. PIM的核心价值在于消除片外数据移动
  3. 模拟计算的极限能效来自物理定律的直接利用
  4. 实际部署需要权衡精度、灵活性和能效

2.4 简单示例:4×4矩阵计算详解

2.4.1 问题设定

通过一个具体的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

2.4.2 传统架构执行过程

让我们逐时钟周期追踪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%)

2.4.3 数字PIM执行过程

探索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×(理论值)

2.4.4 模拟PIM执行过程

深入探讨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

2.4.5 三种架构的深度对比

执行时间对比

              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. 数据局部性是关键:PIM将计算移至数据,消除了搬移开销
  2. 并行性带来加速:数字PIM通过Bank并行,模拟PIM通过物理并行
  3. 能效提升巨大:消除数据搬移后,能耗降低100-1000倍
  4. 精度是权衡点:模拟计算用精度换取极致能效
  5. 架构选择依赖应用:没有绝对最优,只有最适合 │ x[0:3] = [1,2,3,4] │ ← 广播数据 │ ACC = 0 │ ← 累加器 ├─────────────────────────┤ │ 本地DRAM接口: │ │ → W[0,0]=1 (1 cycle) │ │ → W[0,1]=2 (1 cycle) │ ← 无需外部访问! │ → W[0,2]=3 (1 cycle) │ │ → W[0,3]=4 (1 cycle) │ ├─────────────────────────┤ │ 计算单元: │ │ MAC: 1 cycle/op │ └─────────────────────────┘ ```

能耗分解

操作类型              次数    单位能耗    总能耗
-----------------------------------------------
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×

关键优化点

  1. 并行度:4个Bank同时计算(4×加速)
  2. 数据局部性:W矩阵本地访问(0外部带宽)
  3. 广播效率:x向量一次广播,多次复用
  4. 流水线:广播和计算可以重叠

2.4.4 模拟PIM执行过程

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

2.4.5 扩展到实际规模

当矩阵扩展到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
能效提升 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%(受外围电路限制)

2.5 能耗和性能模型:基本方程

2.5.1 能耗模型

传统架构能耗

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倍

2.5.2 性能模型

带宽受限场景(算术强度 < 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×

2.5.3 Roofline模型分析

经典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)

2.5.4 能效优化策略

算法-硬件协同优化

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(精度要求)

2.5.5 实际应用案例分析

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×(!)

关键洞察

  1. 数据搬移占传统架构能耗的99%以上
  2. PIM通过消除片外访问实现10-100×能效提升
  3. 模拟计算理论上可达1000×以上能效,但受精度限制
  4. 实际部署需要平衡能效、精度和灵活性

2.5.6 未来发展趋势

技术路线图

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如何通过消除数据搬移实现数量级的性能和能效提升。关键要点:

  1. 历史必然性:从1969年的理论探索到2024年的产业化,PIM的复兴是AI时代内存墙问题的必然解决方案

  2. 架构多样性:数字PIM提供灵活性和精度,模拟PIM追求极致能效,混合架构平衡各方需求

  3. 数据局部性是关键:通过将计算移至数据,PIM从根本上改变了计算范式

  4. 能效提升巨大:消除数据搬移后,实现10-1000倍能效提升

  5. 实用化在即:标准化、生态完善和应用驱动正推动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 面积效率模型

**关键指标定义**:

面积效率的多维度评估:

  1. 计算密度: Compute_Density = Peak_Performance / Die_Area 单位:TOPS/mm²

  2. 存储密度: Memory_Density = Memory_Capacity / Die_Area
    单位:GB/mm²

  3. 综合效率(考虑实际利用率): 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²

2.5.4 设计空间权衡

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的基础概念和核心价值:

关键要点回顾

  1. 历史演进的启示
    • PIM概念已有50+年历史,但直到AI时代才真正成熟
    • 三大推动力:应用需求(AI)、技术成熟(3D集成)、经济驱动(能耗危机)
    • 内存墙问题:计算性能提升1000×,内存带宽仅提升10×
  2. 架构分类与选择
    • 近数据处理(NDP):灵活但改进有限(5-10×)
    • 真存内计算(IMC):极致能效但精度受限(100-1000×)
    • 实际选择取决于:精度需求、功耗预算、延迟要求
  3. 矩阵向量乘法的核心地位
    • Transformer中95%+的计算是MVM
    • 算术强度仅1-2 ops/byte(远低于GPU ridge point)
    • PIM通过消除数据搬移从根本上解决带宽瓶颈
  4. 定量分析结果
    • 4×4示例:PIM能效提升52-1464×
    • 8192×8192实际规模:
      • 数字PIM:5×能效提升,2×性能提升
      • 模拟PIM:170×能效提升,52×性能提升
    • 代价:编程复杂度增加,精度可能降低
  5. 设计空间权衡
    • 不存在完美方案,需要权衡能效、性能、精度
    • 数字PIM:平衡型选择,适合数据中心
    • 模拟PIM:极致能效,适合边缘推理
    • 混合架构:动态优化,适合多样化负载

核心公式总结

能耗模型:
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的本质是将计算移至数据,而非将数据移至计算。这个简单的理念正在重塑计算机体系结构的未来。

  1. 基本模型:能耗、性能和面积的量化分析框架

关键洞察:

下一章,我们将深入探讨支撑PIM的各类存储技术,理解它们如何实现计算功能,以及各自的优劣权衡。

延伸思考

  1. 为什么早期PIM尝试未能成功,而现在时机成熟?
  2. 模拟计算的精度限制对Transformer推理影响多大?
  3. 如何设计一个同时支持训练和推理的PIM系统?