DRAM-PIM架构与CNN加速技术解析
1. 近存储计算与DRAM-PIM架构解析
在传统计算架构中,数据需要在处理器和内存之间频繁搬运,这种"内存墙"问题已成为制约计算性能提升的主要瓶颈。近存储计算(Processing-in-Memory, PIM)通过将计算单元直接嵌入到内存子系统内部,从根本上改变了这一局面。DRAM-PIM作为PIM技术的典型实现,其核心创新点在于将处理核心(PIMcore)直接部署在DRAM存储体(Bank)附近,形成"计算靠近数据"的新型架构。
从硬件实现角度看,现代DRAM-PIM系统通常采用三种主流设计范式:
- 近存储体架构(如UPMEM、三星FIM):每个DRAM存储体配备专用RISC核心或SIMD单元
- 通道级加速架构(如GDDR6-AiM):在内存通道层面部署专用计算单元
- 混合计算架构(如McDRAMv2):结合专用计算阵列和通用处理核心
以GDDR6-AiM为例,其关键技术特征包括:
- 每个PIMcore集成MAC(乘加)运算单元
- 支持批归一化(BN)和ReLU激活函数硬件加速
- 通过通道级全局缓冲区(GBUF)实现数据广播
- 采用轻量级PIM指令集控制计算流程
这种架构特别适合CNN计算,因为CNN的权重参数和特征图数据可以:
- 直接驻留在DRAM存储体中
- 通过bank级并行性实现高吞吐量计算
- 利用近数据计算避免频繁的数据搬运
2. CNN加速中的数据传输挑战
在传统层间(layer-by-layer)数据流中,CNN加速面临严重的跨存储体数据传输问题。以一个典型的双卷积层(CONV→CONV)计算为例:
2.1 传统数据流的问题
当使用4个PIMcore并行计算时,系统通常按输出通道(cout)进行任务划分:
- 第一层(L0)计算时,每个PIMcore处理部分输出通道
- 产生的特征图需要重新分配到不同PIMcore才能进行第二层(L1)计算
- 这种数据重组导致大量跨存储体数据传输
具体瓶颈体现在:
- 带宽限制:跨存储体传输需要通过共享总线或主机路由
- 延迟开销:数据需经历"读取-传输-写入"完整流程
- 能效低下:数据搬运能耗可能超过计算本身
2.2 融合层数据流的优势
PIMfused提出的融合层(fused-layer)数据流采用空间维度(ox, oy)划分策略:
- 将连续多个卷积层合并为单一计算核
- 每个PIMcore处理特征图的局部空间区域
- 中间结果在PIMcore本地缓存复用
这种设计带来三重优势:
- 数据局部性:特征图在PIMcore内部流动,减少跨存储体传输
- 并行保持:通过空间划分维持bank级并行度
- 流水优化:消除层间同步等待时间
实验数据显示,在ResNet18前8层中:
- 数据复制量仅增加18.2%
- 冗余计算增加17.3%
- 性能却提升91.2%
3. PIMfused硬件架构设计
3.1 整体架构创新
PIMfused基于GDDR6-AiM架构进行扩展,关键改进包括:
(注:此处应为架构示意图,展示bank级PIMcore和通道级GBcore的布局)
核心组件:
Bank级PIMcore集群:
- 增强计算单元支持CONV、BN、ReLU、池化和残差连接
- 新增本地缓冲区(LBUF)实现数据复用
- 支持4种计算模式通过指令标志控制
通道级GBcore:
- 专用于全局规约操作(如全局池化)
- 管理32KB全局缓冲区(GBUF)
- 协调跨存储体数据重组
分层存储体系:
- LBUF(256B-1KB):bank级数据复用
- GBUF(2-32KB):通道级数据共享
- DRAM Bank:主数据存储
3.2 定制PIM指令集
PIMfused引入5类专用指令:
| 指令类型 | 指令名称 | 功能描述 |
|---|---|---|
| 计算指令 | PIMcore_CMP | 执行融合核计算(支持4种运算模式) |
| GBcore_CMP | 执行全局规约操作 | |
| 数据传输指令 | PIM_BK2LBUF | 存储体到LBUF的并行传输 |
| PIM_LBUF2BK | LBUF到存储体的并行传输 | |
| PIM_BK2GBUF | 存储体到GBUF的串行传输 | |
| PIM_GBUF2BK | GBUF到存储体的串行传输 |
关键设计考量:
- 并行传输:LBUF相关指令支持全带宽并行
- 串行仲裁:GBUF传输采用顺序访问避免冲突
- 计算流水:CMP指令触发多PIMcore协同计算
4. 混合数据流调度策略
4.1 浅层融合策略
对于CNN前端的浅层(如ResNet18的L0-L7),PIMfused采用融合层数据流:
空间分块:
- 将输入特征图划分为4x4(Fused16)或2x2(Fused4)网格
- 每个PIMcore处理一个空间分块的所有通道
权重广播:
- 通过GBUF向所有PIMcore广播卷积核参数
- 利用LBUF缓存中间特征图
跨层流水:
- 在融合核内部维持数据流动
- 避免将中间结果写回DRAM
4.2 深层传统策略
对于CNN深层(如ResNet18的L8之后),切换为层间数据流:
通道划分:
- 按输出通道维度分配计算任务
- 每个PIMcore处理部分输出通道
特征重组:
- 通过GBUF收集和重分布特征图
- 支持残差连接等跨层数据依赖
动态切换:
- 编译器自动识别最优切换点
- 基于层参数(空间/通道维度)决策
4.3 边界处理机制
在融合段边界处(如L7→L8),系统执行:
空间到通道转换:
- GBcore收集各PIMcore的空间分块结果
- 按通道维度重新组织数据
负载均衡:
- 动态调整各PIMcore的通道分配
- 确保计算资源充分利用
5. 关键参数优化与实践经验
5.1 缓冲区配置权衡
通过实验得出以下黄金配置原则:
GBUF容量:
- 最小有效尺寸:8KB(可缓存典型CNN层的权重)
- 最佳性价比点:16KB(平衡面积和性能)
- 收益递减点:>32KB(边际效益显著下降)
LBUF容量:
- 临界值:128B(可缓存3x3卷积的9个特征图块)
- 最佳点:256B(支持多数融合核的局部复用)
- 过剩配置:>512B(面积能耗增加明显)
配置组合推荐:
- 高性能型:G16K_L256
- 均衡型:G8K_L128
- 面积敏感型:G4K_L64
5.2 PIMcore并行度选择
对比1-bank和4-bank两种设计:
| 指标 | Fused16 (1-bank) | Fused4 (4-bank) | 优劣分析 |
|---|---|---|---|
| 内存周期 | 0.43x | 0.31x | 4-bank空间复用更高效 |
| 能耗 | 0.87x | 0.83x | 减少数据复制带来优势 |
| 面积 | 1.42x | 0.77x | 共享PIMcore大幅省面积 |
| 编程复杂度 | 较低 | 中等 | 需考虑bank间负载均衡 |
实践建议:
- 边缘设备:优选Fused4配置,面积敏感场景
- 云端推理:考虑Fused16,追求极致吞吐
5.3 实际部署经验
编译器优化技巧:
- 对浅层网络(如MobileNet)增大融合深度
- 对残差网络(如ResNet)在shortcut处插入同步
- 使用双缓冲技术隐藏数据传输延迟
常见问题排查:
- 性能不达预期:检查GBUF带宽利用率
- 计算错误:验证LBUF一致性协议
- 能效异常:分析数据复用率指标
典型性能数据:
- ResNet18端到端延迟:23ms @1GHz
- 能效比:12.3TOPS/W
- 面积开销:增加DRAM die的19%
6. 技术演进与未来方向
从GDDR6-AiM到PIMfused的演进路径:
- 计算扩展:从基础MAC到支持完整CNN算子
- 存储分级:引入LBUF形成多层次缓存
- 数据流创新:融合层策略突破传统范式
未来可能的发展方向:
- 3D堆叠集成:将PIMcore与DRAM die垂直集成
- 存内计算:探索基于DRAM阵列的原位计算
- 训练支持:扩展至反向传播和梯度更新
在实际芯片设计中,我们验证了采用22nm工艺时:
- PIMcore面积:0.12mm²(含256B LBUF)
- GBcore面积:0.35mm²(含16KB GBUF)
- 频
