从 TOPS 到“内存墙”:为什么下一波 FPGA 热点,很可能不是算力,而是数据怎么活下来
前几年聊 FPGA 做 AI,大家很容易被一个数字牵着走:TOPS。多少 TOPS,峰值多少,能不能再高一点。这当然不是错。算力不够,很多事确实没法谈。
但现在越来越明显的一件事是:算力已经不是唯一主角了。真正开始卡脖子的,往往是数据。数据从哪来,放哪里,什么时候搬,搬几次,谁先用,谁后用,能不能少跑一趟外存,能不能别在总线上排队排到怀疑人生。这才是现在很多边缘 AI、数据中心加速、FPGA 推理系统里真正让人掉头发的问题。
如果说 TOPS 是发动机马力,那内存和数据通路就是路、油管、收费站、停车场。马力再大,路堵死了,车也只能在原地优雅轰鸣。看起来很有力量,实际上哪儿也没去。
一、为什么“内存墙”突然变得这么显眼
其实内存墙不是新问题。计算一直在变快,数据搬运一直很贵。只是到了 AI 这波,问题被放大了。因为 AI 模型里很多东西都很“吃数据”:
-
权重要搬
-
激活要搬
-
中间特征要存
-
多层之间要交换
-
多个加速器之间还要同步
模型越大,数据越多。算子越快,越容易发现数据跟不上。就像后厨终于请来了一个炒菜飞快的大厨,结果配菜还在门口堵着。大厨再厉害,也只能举着锅铲等待命运安排。
这也是为什么新一代 FPGA / adaptive SoC 开始明显强调主机互连、外部内存、CXL、DDR5、LPDDR5X 这些能力。AMD 的 Versal Premium Series Gen 2 就直接把 PCIe Gen6、CXL 3.1、LPDDR5X、DDR5 放在核心卖点里,还强调 CXL memory expansion 和更高带宽主机连接;这说明厂商也很清楚,下一阶段不是只卷计算单元,而是要卷“数据怎么流得动”。
二、别只问“能算多少”,先问“数据能不能喂饱”
FPGA 做 AI 时,最常见的一种幻觉是:“我 PE 阵列铺大一点,频率跑高一点,吞吐就上去了。”这句话只说对了一半。如果数据能连续喂进去,当然很美。但现实往往是:
-
PE 阵列在等权重
-
权重在等 DDR
-
DDR 在等仲裁
-
仲裁在等 burst 对齐
-
最后工程师在等下班
所以真正要问的不是:“我有多少乘加能力?”而是:“这些乘加单元每一拍有没有饭吃?”这就是“数据怎么活下来”的核心。
在 FPGA 里,算力是你能搭出来的;但数据流一旦设计不好,算力就会变成一群坐等开饭的壮汉。很能吃,没饭吃。
三、PCIe Gen6 和 CXL 为什么会被重新盯上
这几年 PCIe 和 CXL 被反复提,不是因为大家突然喜欢背协议名词,而是因为系统真的需要更强的数据通道。
PCIe 6.0 官方规格写得很清楚:它提供 64.0 GT/s 原始数据率,x16 配置最高可到 256.0 GB/s;为了做到这一代速率,引入了 PAM4、轻量级 FEC、CRC 以及基于 FLIT 的编码。
这说明什么?说明连接本身已经不是“普通外设接口”那么简单了。它正在变成 AI/HPC/数据中心系统里非常核心的一部分。CXL 更有意思,CXL 的价值不是“又一个更快的 PCIe”。它真正想解决的是 CPU、加速器和内存之间的关系问题。
CXL 3.1 的资料里明确列出了内存池化、内存共享、多级交换、直接 peer-to-peer CXL.mem 访问等特性;它还引入 fabric 改进、port-based routing、可信执行环境相关安全协议等能力。
翻译成人话就是:过去是每个人抱着自己的内存吃饭;现在开始考虑能不能开个公共食堂。这件事对 FPGA 很重要。因为 FPGA 很适合站在“数据入口”和“数据调度”这个位置上。它不一定非要去跟 GPU 抢最大矩阵乘。它可以做:
-
数据过滤
-
数据压缩
-
数据搬运
-
数据重排
-
加密/解密
-
协议转换
-
内存访问调度
-
加速器之间的数据编排
这些活不一定上宣传海报,但非常像真正系统里值钱的工作。
四、边缘侧也一样:DDR-Free 为什么开始有味道
别以为“内存墙”只属于数据中心。边缘侧一样有,只是表现形式不太一样。边缘 FPGA AI 里,DDR 很多时候是刚需。但 DDR 一旦进来,系统就会多一层外存访问、多一层调度、多一层功耗,也多一层不确定性。
所以现在一些工具链开始认真支持 DDR-Free / Hostless 这类设计方式。Altera FPGA AI Suite 的 Hostless DDR-Free 示例明确写到:graph filters、bias 和 IP 配置存放在 FPGA 片上内存,而不是板载 DDR 里;示例还会把输入特征流式写入片上内存,并从片上内存读取推理结果。
这个趋势很值得琢磨。它不是说 DDR 没用了。DDR 当然还有大量场景离不开。但它说明一个方向:能在片上解决的,就尽量别让数据跑出去绕远路。
这句话听着朴素,但非常 FPGA。因为 FPGA 的很多优势,本来就不在“单点峰值”,而在:
-
数据流短
-
节拍明确
-
buffer 可控
-
能边进边算
-
能按场景定制通路
所以 DDR-Free 的真正意义,不是“少一颗 DDR 多省钱”,而是:系统开始重新尊重数据搬运的代价。
五、真正该盯的,是数据复用
很多时候,优化 AI 推理,不是先去想怎么多放几个乘法器,而是先想:这份数据能不能少读几次?
下面这段 SystemVerilog 代码是一个简化的 ping-pong buffer 骨架。它表达的不是某个完整 AI 加速器,而是一个很核心的思想:一边计算当前 tile,一边预取下一个 tile,让计算别饿着。
module pingpong_tile_buffer #(
parameter DATA_W = 64,
parameter ADDR_W = 10
)(
input logic clk,
input logic rst_n,
// 写入侧:来自 DMA / 外部存储 / 上游流
input logic wr_valid,
input logic [ADDR_W-1:0] wr_addr,
input logic [DATA_W-1:0] wr_data,
input logic wr_bank, // 0/1 选择写入 bank
// 读取侧:送给计算阵列
input logic [ADDR_W-1:0] rd_addr,
input logic rd_bank, // 0/1 选择读取 bank
output logic [DATA_W-1:0] rd_data,
// tile 切换控制
input logic switch_bank,
output logic active_bank
);
logic [DATA_W-1:0] bank0 [0:(1<<ADDR_W)-1];
logic [DATA_W-1:0] bank1 [0:(1<<ADDR_W)-1];
always_ff @(posedge clk) begin
if (wr_valid) begin
if (wr_bank == 1'b0)
bank0[wr_addr] <= wr_data;
else
bank1[wr_addr] <= wr_data;
end
end
always_ff @(posedge clk) begin
if (rd_bank == 1'b0)
rd_data <= bank0[rd_addr];
else
rd_data <= bank1[rd_addr];
end
always_ff @(posedge clk or negedge rst_n) begin
if (!rst_n)
active_bank <= 1'b0;
else if (switch_bank)
active_bank <= ~active_bank;
end
endmodule
这个模块很普通,但思想很关键。当计算阵列正在吃 bank0 的数据时,DMA 可以把下一块 tile 预取到 bank1;下一轮切换后,计算阵列吃 bank1,DMA 再去填 bank0。这就是典型的“别让算力等内存”。
很多性能优化,最后其实就落在这种朴素问题上:
-
数据有没有提前到
-
到了以后能不能复用
-
复用时会不会和写入冲突
-
buffer 深度够不够
-
burst 访问是不是顺
-
计算和搬运能不能重叠
这些问题看起来没有 TOPS 那么光鲜。但系统跑不跑得快,很多时候就是它们说了算。
六、下一波 FPGA 热点,可能会从“算力模块”转向“数据生活方式”
我觉得这里面真正有新意的一点是:FPGA 的热点可能正在从“我会算”转向“我会安排数据怎么活”。这句话听着有点怪,但很准确。数据在一个系统里会经历很多阶段:
-
从传感器进来
-
被打包
-
被缓存
-
被预处理
-
被送进推理
-
被后处理
-
被写回
-
被多个模块复用
-
被传到主机或另一个加速器
如果每一步都要搬一次,每搬一次都绕到外存,每次访问都不考虑复用,那算力再强也会被拖住。所以未来更值钱的 FPGA 能力,可能不是“我能堆多少 MAC”,而是:
-
我能不能把数据留在片上更久
-
我能不能让数据一次进入,多次使用
-
我能不能把外存访问变成顺序 burst
-
我能不能把随机访问变成可预测流
-
我能不能在 CXL / PCIe / DDR / NoC 之间当好调度员
-
我能不能在数据还没变成大麻烦之前,就把它整理好
说白了,FPGA 未来会重新变贵,不一定是因为它最能算,而是因为它越来越适合做数据的管家。而一个好管家最重要的能力,不是自己跑得最快,是让整个家别乱。
七、别误会:算力仍然重要,只是不再够用
这篇文章不是在否定 TOPS。没有算力,AI 当然跑不动。但只看 TOPS,就像只看发动机马力买车,不看变速箱、油耗、轮胎、路况和刹车。在真实系统里,性能通常不是由最强的那一块决定的,
而是由最堵的那一段决定的。这就是内存墙最烦人的地方。它不会大喊“我来了”。它通常表现为:
-
利用率上不去
-
算力等数据
-
延迟尾巴很长
-
功耗压不下来
-
模型一换,buffer 全乱
-
带宽理论够,实际就是跑不满
这时候再加 TOPS,往往不是治病,是给堵车路段又买了十辆跑车。热闹是热闹。问题还在原地。
结语
下一波 FPGA 热点,很可能不是单纯比谁算力更猛,而是比谁更会让数据活下来。
-
让数据少搬一点。
-
让数据留久一点。
-
让数据复用多一点。
-
让数据进出更顺一点。
-
让计算阵列少饿一点。
-
让外存、主机、加速器之间别互相添堵。
TOPS 当然还会继续重要。但在越来越多 AI 系统里,真正决定体验的,可能是那个不太上镜的问题:数据到底怎么活。
而 FPGA 最有意思的地方,恰恰在这里。它不是只能当算力补丁。它也可以当数据秩序的设计者。这才是从 TOPS 走向内存墙之后,FPGA 下一波真正值得看的地方。
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐
所有评论(0)