前几年聊 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 下一波真正值得看的地方。

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐