问题

计算型存储/存算一体如何实现?

回答
好的,咱们这就来聊聊计算型存储/存算一体这玩意儿,它到底是怎么实现的。别看名字听起来有点绕,其实它的核心思想挺实在的——就是把计算能力往前推,往存储那里挪。

为啥要这么干?传统存储的痛点

你想啊,咱们现在的数据量是蹭蹭蹭地往上涨,人工智能、大数据分析、物联网,哪一样不是吃数据的大户?传统的架构,数据在存储设备里躺着,计算任务来了,得先把数据从存储挪到内存,再挪到CPU那里去,计算完了,可能还得再挪回来。这中间一来一回的,就像物流运输,跑得越远,消耗的时间和能量就越多。

数据搬运瓶颈 (Data Movement Bottleneck): 这是最核心的问题。CPU忙着算,存储设备也忙着存,但它们之间就像两个隔着很远的点,中间无数次地倒数据,这成了效率的“卡脖子”环节。尤其是在大数据处理、深度学习这些需要海量数据快速交互的场景下,这个瓶颈就更明显了。
能耗增加: 数据搬运不仅耗时,也耗电。每次数据传输,都有电能消耗。数据量越大,搬运次数越多,这电费可就不是小数目了。
延迟: 数据在存储和计算单元之间来回穿越,自然就会产生延迟。对于需要实时响应的应用,这一点尤为致命。

存算一体:把计算“搬”到存储里去

存算一体,顾名思义,就是把“存储”和“计算”这两个本来分开的功能,想办法融合在一起。它不是说要把CPU整个塞进SSD里,而是把一些适合在存储端进行的计算任务,直接放到存储设备内部或者非常靠近存储的位置来实现。

咱们可以从几个层面来理解它的实现方式:

1. 架构层面的演进:从“分开”到“靠近”

传统架构: CPU(或GPU、FPGA等计算单元) + 内存 + 存储设备(SSD、HDD)。数据需要在存储和计算单元之间多次移动。
计算型存储(Computational Storage): 这是实现存算一体的一个重要方向。它指的是在存储设备(比如SSD)内部或者在其接口附近,集成计算单元(比如FPGA、ARM处理器、ASIC等)。
存储控制器上的计算: 最直接的方式是在SSD的控制器芯片上,集成一些更强大的处理器,让控制器不仅能管理闪存芯片,还能执行一些预设好的计算任务。
PCIe接口的扩展: 通过PCIe接口,可以将一些计算加速卡(如FPGA卡)直接挂在存储总线上,或者在存储设备本身就集成具备一定计算能力的协处理器。
新型存储介质的融合: 还有一些更前沿的研究,是直接在存储介质本身(比如一些新型的内存技术)上集成计算功能。

2. 实现计算型存储的具体技术和模式

前面提到了集成计算单元,具体是怎么做的呢?

FPGA(现场可编程门阵列)方案: FPGA的优势在于它的灵活性,可以根据不同的计算任务,重新配置硬件逻辑。这意味着,一块计算型SSD可以被编程来执行多种不同的计算任务,比如数据压缩、数据过滤、加密解密、甚至是简单的AI推理。
优点: 灵活性高,可以针对特定应用进行优化。
实现方式: 在SSD的PCB板上,除了 NAND Flash 芯片和主控芯片外,还会集成一颗FPGA芯片。主控负责存储管理,FPGA负责执行计算任务。
ARM处理器(或专用AI芯片)方案: 这种方案是集成一个通用的处理器核心(如ARM)或者专门的AI加速芯片。
优点: 性能通常比FPGA更稳定、更易于开发,尤其适合运行固定的、高性能的计算任务,比如AI推理。
实现方式: 类似于FPGA方案,在SSD主控旁边增加一个ARM核或者AI加速器。
ASIC(专用集成电路)方案: 对于一些非常成熟且固定的计算任务,可以使用ASIC来设计专门的芯片。
优点: 功耗最低,性能最高,成本较低(大规模量产时)。
缺点: 灵活性最差,一旦设计完成,就无法更改。
接口层面的计算: 有些方案是在SSD的接口(如NVMe)上进行扩展,让接口本身具备一定的智能和计算能力,或者通过特定的驱动程序和软件栈,在主机端对存储数据进行“近数据处理”。

3. 软件和协议的配合

光有硬件还不行,还得有软件来指挥。

计算型存储协议(Computational Storage Protocol): 为了让主机和计算型存储设备之间能有效沟通,需要定义一套协议。NVMe(NonVolatile Memory Express)是目前SSD的主流接口协议,基于NVMe,社区和业界正在推进NVMeoF (NVMe over Fabrics) 以及NVMe Computational Storage 等相关标准。这些标准定义了如何将计算任务(例如,一个数据过滤操作)下发到计算型存储设备,以及如何接收计算结果。
软件栈和API: 主机端的应用程序需要通过特定的库和API来调用计算型存储的功能,而不需要关心计算具体是在SSD内部执行,还是在CPU那里执行。这就像你调用一个函数,你只关心函数的功能,不关心它是如何实现的。
任务调度和卸载: 操作系统或存储管理软件需要能够识别哪些计算任务适合卸载到存储端,并有效地将这些任务发送给计算型存储设备。

举个例子:SSD里的数据过滤

想象一下,你要从一个庞大的数据库里找出符合特定条件的数据。

传统做法: SSD把所有数据读出来,传给CPU。CPU一行一行地扫描,判断是否符合条件。数据量大时,搬运和CPU扫描都会很慢。
存算一体做法: 你把“找出符合条件数据”这个指令和条件,通过计算型存储协议发送给SSD。SSD内部的计算单元(比如FPGA)直接在NAND Flash芯片附近(甚至在读取数据的过程中)进行过滤。只有符合条件的数据,才会被读取出来并传给主机CPU。

这样一来,数据搬运量大大减少,CPU的负担也减轻了,整个过程就快了很多,也省电了很多。

存算一体的几种主要形态(按融合程度分)

我们可以把存算一体想象成一个“融合度”的谱系:

1. 存储驱动器上的计算 (ComputeinStorage Drive): 这是最常见的形式,即前面提到的计算型SSD。把计算能力直接集成到SSD里。
2. 存储单元内的计算 (ComputeinStorage Unit/Cell): 更进一步,直接在存储介质本身(比如新型的相变存储器、忆阻器等)上进行计算。这被称为“近数据处理”(NearData Processing)或者“在存储介质上计算”(InMemory Computing/InStorage Computing)。这通常需要全新的存储介质和电路设计。
3. 存储控制器内的计算 (ComputeinController): 在SSD主控制器芯片内部增加更强的计算核心,负责一些基础的、但对效率提升显著的计算任务。

总结一下实现的关键点

硬件集成: 在存储设备内部或接口附近集成计算单元(FPGA、ARM、ASIC等)。
协议与接口: 定义和实现新的协议,让主机能高效地将计算任务下发到存储端。NVMe 标准是重要的基石。
软件栈: 提供驱动、库和API,让应用程序能够方便地使用计算型存储的能力。
任务卸载机制: 能够智能地判断和分配计算任务,将适合的任务推送到存储端。

说白了,存算一体就是想打破数据搬运的瓶颈,让计算离数据更近,从而提升效率、降低能耗。这玩意儿不是一蹴而就的,涉及到硬件、软件、协议等多个层面的协同工作。但随着数据量的爆炸式增长,这条路会越走越顺。

网友意见

user avatar

存算一体,以前有一家公司真做过,我在这家公司做了6年。

这家公司叫做Neomagic,做notebook graphic 的,在1996-2000间还是非常厉害的,

曾经占全球50%市场。它用DRAM工艺做GPU芯片进行图像处理。

这家公司当年和日本的三菱进行合作做的。


存算一体,在最近应该适合AI的应用,最主要是减少搬memory的功耗。

但是,独立走一条路,成本是非常高的。

memory 工艺比logic 慢三倍,cell 面积大4倍,只有3-4层metal,就这几条就得自己走一条新的前端+后端的道路。


Neomagic 死于逻辑工艺shrink 太快了,DRAM工艺跟不上。

每次cell设计,逻辑设计都非常复杂。


三菱好像把整套技术卖给了力晶。力晶可以做。三星最近也在做。

此路能通,难度非凡。


新的忆阻器的,如果密度能上去,当然可能是一条新的路。

(逻辑上难,毕竟DRAM是堆层128,这是CMOS 无法做到的)

类似的话题

本站所有内容均为互联网搜索引擎提供的公开搜索信息,本站不存储任何数据与内容,任何内容与数据均与本站无关,如有需要请联系相关搜索引擎包括但不限于百度google,bing,sogou

© 2025 tinynews.org All Rights Reserved. 百科问答小站 版权所有