一、存算一体技术概述
1.1 冯·诺依曼瓶颈——那个让我头疼了十年的问题
做芯片设计这些年,我越来越觉得冯·诺依曼架构像个老顽固。它把计算和存储分开了,中间靠一条总线传数据。听起来没什么问题对吧?但你想想看,处理器跑得越来越快,内存却跟不上节奏。这就好比一个顶级厨师,切菜飞快,但每次拿食材都要跑老远去仓库取——大部分时间都花在路上了。
这个现象,业内叫“存储墙”或“冯·诺依曼瓶颈”。我2015年做过一个AI加速器项目,当时算法要求频繁读写权重参数。结果呢?芯片算力利用率不到30%。说白了,计算单元大部分时间在等数据。功耗也高得离谱——数据搬运消耗的能量,比计算本身高出两个数量级。
核心矛盾:处理器性能每年提升约50%,但内存带宽每年只提升约10%。这个差距越拉越大。
为什么会这样?因为数据搬运既花时间又耗能量。我算过一笔账:一次64位浮点乘法运算消耗约20pJ,但从DDR内存读取同样64位数据,要花约2000pJ。差了100倍!
1.2 存算一体——换个思路解决问题
存算一体的想法其实很朴素:既然搬运数据这么贵,那就在存储的地方直接做计算。就像你不需要把食材搬到厨房再切,直接在仓库里切好再拿过来用。
这个概念最早可以追溯到上世纪70年代。当时有个叫“智能存储器”的概念,但受限于工艺和需求,一直没火起来。真正让存算一体走上舞台的,是深度学习。神经网络计算有个特点:大量矩阵乘法,数据复用率高,对带宽要求极高。这正好戳中了冯·诺依曼架构的痛点。
我记得2017年参加ISSCC会议,看到好几家公司在展示存算一体芯片。当时我就觉得,这条路走对了。
1.3 存算一体的分类
按计算和存储的融合程度,我习惯把存算一体分成三类:
| 类型 | 融合程度 | 典型代表 | 我踩过的坑 |
|---|---|---|---|
| 近存计算 | 存储和计算单元靠近,但物理上分离 | HBM + 逻辑die、三星HBM-PIM | 带宽提升明显,但延迟改善有限 |
| 存内计算 | 在存储阵列内部集成计算单元 | Mythic、SambaNova | 模拟计算精度控制是个大坑 |
| 存算融合 | 存储单元本身具备计算能力 | 忆阻器阵列、铁电存储器 | 器件一致性差,量产困难 |
近存计算是目前最成熟的方向。说白了就是把计算单元和存储单元封装在一起,缩短物理距离。我做过一个HBM-PIM的项目,带宽确实上去了,但编程模型变得很复杂——你得手动管理数据在哪个bank里。
存内计算更有意思。它直接在SRAM或RRAM阵列里做乘加运算。我2019年参与过一个基于SRAM的存内计算芯片,峰值算力能做到10TOPS以上,功耗只有传统方案的十分之一。但问题也很明显:模拟计算的精度受工艺波动影响大,8位精度都很难保证。
存算融合是终极目标。用忆阻器这类器件,存储单元本身就是一个可变电阻,能同时存权重和做乘法。听起来很完美对吧?但我在实验室测过忆阻器阵列,器件之间的差异能到30%以上。嗯,这个方向还需要时间。
1.4 主流存算一体芯片架构对比
我挑几个有代表性的架构,说说我的看法:
- 三星HBM-PIM:在HBM内存的每个bank里塞了一个计算单元。好处是兼容现有接口,坏处是计算能力有限。我测试过,对矩阵乘法加速比能到2-3倍,但对不规则计算几乎没效果。
- Mythic AI:基于闪存的模拟存内计算。把权重存在闪存单元里,通过模拟电路做乘加。功耗确实低,但精度和可靠性是硬伤。我建议只用在推理场景,训练就别想了。
- 台积电的SRAM存算一体:在SRAM位线上加模拟计算电路。速度快,精度高,但面积开销大。适合做边缘端的小模型推理。
- 忆阻器阵列:学术界很火,工业界还在观望。我参加过几个忆阻器的研讨会,大家普遍认为3-5年内很难量产。
我的建议:如果你是刚入门,先从近存计算开始。它技术成熟,工具链完善,踩坑成本低。等理解了数据流和带宽优化,再考虑存内计算。
1.5 存算一体的知识体系
下面这张图是我自己整理的存算一体知识框架。你可以看到,它涉及器件、电路、架构、算法、工具链等多个层面。每个层面都有独特的挑战。
注意:存算一体不是银弹。它擅长的是数据密集型的规则计算,比如矩阵乘法、卷积。对于控制流复杂、数据稀疏的计算,传统架构反而更合适。我曾经在一个项目中强行用存算一体做稀疏矩阵计算,结果性能还不如CPU——因为大部分计算单元都在空转。
1.6 我的学习建议
如果你刚开始接触存算一体,我建议按这个顺序来:
- 先理解数据流:搞清楚你的算法里,数据是怎么流动的,哪里是瓶颈。我习惯用Roofline模型做分析。
- 再选架构:根据数据流特点,选择近存还是存内。别一上来就追忆阻器这种前沿技术。
- 最后做映射:把算子映射到存算一体架构上,这步最考验功力。后面几章我会详细讲。
好了,第一章就到这里。记住一句话:存算一体不是替代传统架构,而是在特定场景下提供更好的能效比。选对场景,事半功倍。
避坑指南:我曾经在一个项目里,为了追求“存算一体”的概念,硬把不适合的算法映射上去。结果功耗没降下来,精度还丢了。后来我学乖了——先做profiling,再选方案。
想要更多资料,联系可可