一、存算一体概述:从冯·诺依曼瓶颈到存算一体

大家好,我是你们的老朋友。今天咱们聊聊存算一体。说实话,这个领域我摸爬滚打了快十年,踩过的坑比走过的路还多。但每次看到新同学一头扎进来,我还是挺欣慰的——因为这条路,真的值得走。

先问个问题:你写代码的时候,有没有觉得CPU在等内存?明明算法算得飞快,数据却卡在搬运上。嗯,这就是冯·诺依曼架构的老毛病了。

1.1 冯·诺依曼瓶颈:到底卡在哪?

冯·诺依曼架构,说白了就是“存储”和“计算”分家。CPU只管算,内存只管存。中间靠总线传数据。这个设计在几十年前没问题,因为那时候CPU和内存速度差不多。

但现在呢?CPU主频已经飙到几GHz,内存带宽却跟不上。我做过一个统计:一个典型的深度学习推理任务,有60%~80%的时间和功耗都花在数据搬运上。真正用来计算的,少得可怜。

核心痛点:

  • 带宽墙:内存带宽有限,数据搬不过来
  • 功耗墙:搬运1比特数据的能耗,比做一次乘加运算高几个数量级
  • 延迟墙:访存延迟远大于计算延迟,CPU经常空转等待

我当年做第一个AI加速器项目时,就吃了这个亏。算法跑在GPU上,看起来很快,但一分析profiling结果,发现大部分时间都在等数据从DDR搬过来。那时候我就想:要是计算和存储能离得近一点,甚至合在一起,该多好?

1.2 存算一体:换个思路解决问题

存算一体的想法其实很朴素:让计算发生在数据所在的地方。别把数据搬来搬去了,直接在存储单元里做运算。

你想想看,这就像你办公桌上堆满了文件。传统做法是把文件搬到另一个房间去处理,处理完再搬回来。存算一体呢?直接在办公桌上处理,省掉来回搬运的时间。

这个思路在学术界其实很早就有了。我记得上世纪90年代就有论文提出“智能存储器”的概念。但真正火起来,是最近五六年的事。为什么?因为AI推理对带宽和功耗的要求太苛刻了,传统架构实在扛不住。

1.3 存算一体的发展历程

存算一体不是一蹴而就的。它经历了几个阶段,我按时间线给大家捋一捋:

阶段 时间 特点 代表技术
萌芽期 1990s~2000s 学术探索,概念验证 智能存储器、PIM概念
发展期 2010s~2015 近存计算兴起,HBM出现 HBM、Hybrid Memory Cube
爆发期 2016~2020 AI驱动,存内计算芯片涌现 Mythic、SambaNova、三星HBM-PIM
成熟期 2021~至今 产品化落地,生态建设 AMD MI300、Intel Ponte Vecchio

我个人觉得,2016年是个分水岭。那年AlphaGo赢了李世石,AI一下子成了香饽饽。大家突然发现,传统架构跑AI推理太费劲了。于是存算一体从学术圈的小众话题,变成了工业界的香饽饽。

1.4 存算一体的三种分类

存算一体听起来简单,但实现方式五花八门。我习惯把它分成三类:近存计算、存内计算、模拟存算一体。这三者各有各的脾气,咱们一个一个说。

1.4.1 近存计算(Near-Memory Computing)

近存计算,说白了就是把计算单元搬到内存旁边。离得近,数据搬运距离就短,延迟和功耗自然降下来。

典型的例子是HBM(高带宽内存)。HBM把DRAM堆叠起来,中间夹一层逻辑芯片。逻辑芯片负责控制,也做一些简单的计算。我做过一个项目,用HBM跑矩阵乘法,比传统DDR方案快了3倍,功耗还降了一半。

我的经验:近存计算适合那些对带宽敏感、但对计算能力要求不高的场景。比如推荐系统里的embedding lookup,用近存计算效果就很好。但如果你要做复杂的矩阵运算,近存计算可能还不够。

1.4.2 存内计算(In-Memory Computing)

存内计算更进一步——直接在存储单元里做计算。存储单元本身就是一个计算单元。这听起来很酷,但实现起来坑不少。

存内计算通常用SRAM或RRAM(电阻式随机存取存储器)来实现。每个存储单元不仅能存数据,还能做简单的逻辑运算或乘加运算。我见过一个SRAM存内计算芯片,在跑CNN推理时,能效比达到了10 TOPS/W,比传统GPU高了一个数量级。

注意:存内计算有个大坑——精度问题。模拟计算容易受噪声影响,精度做不高。我当年做RRAM存内计算时,为了把精度从8bit提到16bit,折腾了整整三个月。最后发现,还是得靠数字辅助校正。

1.4.3 模拟存算一体(Analog Compute-in-Memory)

模拟存算一体,是存内计算的“激进版”。它用模拟电路做计算,比如用电流或电压来表示数据,直接在存储阵列里完成乘加运算。

这种方式的优势是能效极高。我见过一个模拟存算一体芯片,在跑ResNet-50时,能效比达到了50 TOPS/W。但代价是精度和可靠性。模拟电路对工艺偏差、温度变化都很敏感,稍微有点波动,结果就偏了。

我记得有一次,芯片在实验室跑得好好的,一拿到客户现场就出问题。查了半天,发现是温度变化导致模拟计算偏差。后来我们加了温度补偿电路,才算搞定。

1.5 三种方案的对比

为了让大家看得更清楚,我整理了一个对比表:

特性 近存计算 存内计算 模拟存算一体
计算位置 存储附近 存储内部 存储内部(模拟域)
能效比 中等(~1 TOPS/W) 较高(~10 TOPS/W) 极高(~50 TOPS/W)
精度 高(数字计算) 中等(数字/混合) 低(模拟计算)
成熟度 高(已有产品) 中等(部分产品) 低(学术为主)
适用场景 带宽敏感型任务 中等精度推理 低精度、高能效场景

你可能会问:那我该选哪种?我的建议是:看需求。如果追求快速落地,近存计算最稳妥。如果追求极致能效,模拟存算一体值得赌一把。存内计算则是个折中方案,适合大多数场景。

1.6 知识体系总览

为了让你对本章内容有个整体印象,我画了一张图。这张图把存算一体的核心逻辑串起来了:

存算一体知识体系总览 冯·诺依曼瓶颈 带宽墙 · 功耗墙 · 延迟墙 存算一体核心思想 计算发生在数据所在的地方 三种实现方式 近存 · 存内 · 模拟 近存计算 计算单元靠近存储 代表:HBM、HMC 能效:~1 TOPS/W 成熟度:高 存内计算 存储单元内做计算 代表:SRAM存内计算 能效:~10 TOPS/W 成熟度:中等 模拟存算一体 模拟域做计算 代表:RRAM模拟计算 能效:~50 TOPS/W 成熟度:低 核心结论 没有银弹!根据场景选择: 快速落地→近存计算 | 均衡方案→存内计算 | 极致能效→模拟存算一体

这张图把本章的核心逻辑串起来了。从冯·诺依曼瓶颈出发,引出存算一体的核心思想,再分支出三种实现方式。每种方式都有它的优缺点和适用场景。

1.7 避坑指南

最后,分享几个我踩过的坑,希望能帮你少走弯路:

避坑1:别盲目追求极致能效

我曾经在一个项目中,为了追求50 TOPS/W的能效,选了模拟存算一体方案。结果精度做不上去,客户不买账。最后不得不降级到存内计算,虽然能效低了点,但精度达标了。记住:能效再高,精度不行也是白搭。

避坑2:近存计算不是万能药

近存计算虽然成熟,但它的能效提升有限。如果你需要10倍以上的能效提升,近存计算可能不够。我建议你先做系统级仿真,看看瓶颈到底在哪。有时候,优化算法比换硬件更有效。

避坑3:存内计算要关注工艺

存内计算对工艺很敏感。同样的设计,在28nm上跑得好,换到7nm可能就出问题。我建议你在选工艺时,多和foundry沟通,了解他们的存内计算IP支持情况。

好了,第一章就聊到这。存算一体是个大话题,后面我们会一步步深入。记住:没有最好的方案,只有最合适的方案。下一章,咱们聊聊近存计算的具体实现,我会带你看一个实际的项目案例。

想要更多资料,联系可可