想象一下,传统的电脑工作方式就像一个厨师(CPU) 在一个厨房(主板) 里做菜。他需要的 食材(数据) 都存放在一个离他有段距离的 大仓库(内存,DRAM) 里。
传统的工作流程(没有PIM):
- 接单(程序指令): 厨师(CPU)收到一个做“番茄炒蛋”的指令。
- 去仓库取货(数据传输): 厨师需要亲自跑到大仓库(内存),找出番茄和鸡蛋(数据),然后把它们搬回自己的厨房操作台(CPU缓存/寄存器)。
- 在厨房操作台加工(计算): 厨师在操作台上切番茄、打鸡蛋。
- 送回仓库(数据写回): 做好的半成品或者成品,可能需要再送回仓库(内存)存放。
当菜肴非常复杂(比如准备一场国宴),或者食材非常多(比如大数据分析),厨师大部分的时间和体力都浪费在了往返于厨房和仓库的路上了。这就是所谓的“数据移动瓶颈”。
PIM 的使用形式,就是对这个流程的改造。它主要有两种形式:
形式一:近内存计算 (Processing-Near-Memory)
这种形式就像是在 仓库(内存)里设立了一个小型的食材预处理区。
-
新的工作流程:
- 厨师(CPU)下达指令: 厨师(CPU)现在不用亲自去搬运所有原始食材了。他通过对讲机(新的指令集)告诉仓库管理员:“帮我把番茄洗好切块,鸡蛋打散。”
- 在预处理区加工(PIM计算): 仓库里新增加的处理单元(PIM逻辑单元)直接在仓库里完成这些简单的、重复性的操作。
- 只运送半成品: 仓库管理员只需要把处理好的番茄块和蛋液(计算后的结果)送给厨师(CPU)。
-
对应到技术上:
这种方式是在内存芯片(例如DRAM颗粒)的旁边或者逻辑层上,集成一些简单的计算单元。CPU将一些可以并行的、简单的计算任务(比如您提到的向量距离计算中的一部分)“卸载”给内存去完成。CPU不再需要原始数据,只需要等待内存返回计算结果。这大大减少了数据在CPU和内存之间的传输量。三星的HBM-PIM技术就是这种形式的典型代表。
但如果存储更大一些呢,数以千万级的向量检索,CSD为此设计。
Computational storage device (CSD) 遵循一个设计原则,即 “靠近数据源进行计算比传输数据进行远程处理更有效率”。CSD 将计算单元放置在存储设备中,自然而然地支持近距离数据处理。这些设备不仅减少了存储设备和主机 CPU 之间的数据量移动,还减少了主机资源的使用。图 3 展示了传统的计算架构和 CSD 支持的 NDP 架构。
在传统架构中,所有 PCIe 设备都在争夺 PCIe 总线,因此系统性能受到主机 PCIe 总线带宽的限制。在 CSD 支持的 NDP 架构中,由于每个 CSD 都使用其内部 PCIe 交换机在本地访问数据,因此系统可以通过更多的 CSD 实现近乎线性的扩展。
商业 CSD, 如三星的 SmartSSD, 最近已在市场上推出。图 3 插图介绍了三星 SmartSSD 的内部架构。板载 DRAM 作为 NAND Flash 的缓存,可以通过 FPGA 和主 CPU 访问。主 CPU 可以通过标准 I/O 接口访问数据,也可以直接将计算指令卸载到 SmartSSD。然而,NAND Flash 和 FPGA 的 DRAM 之间的数据移动是通过内部 PCIe 开关实现的点对点 (P2P) 机制,如图 3 所示。目前,三星 SmartSSD 在 NAND Flash 和 FPGA 之间的内部带宽仅为 3GB/s。
形式二:存内计算 (Processing-in-Memory / Compute-in-Memory)
这种形式更加激进,它相当于 改造了存放食材的货架(存储单元本身),让货架自己就能完成一些基本操作。
-
新的工作流程:
利用物理定律,比如通过一次性改变一整排货架的电压或电流,就能同时完成对所有货架上鸡蛋状态的某种更改(例如,全部标记为“已检查”)。这是一种非常底层的、并行的操作。 -
对应到技术上:
这是利用内存单元(如SRAM、DRAM或新兴的忆阻器ReRAM)的物理属性来直接执行逻辑运算。例如,通过控制字线和位线的电压,可以直接在内存阵列内部完成大规模的位运算(与、或、非等)。这种方式的并行度极高,能效也极高,但通常适用于特定类型的计算,如神经网络中的矩阵乘法。