1. 异构计算基础:为什么交易系统需要异构计算?CPU、GPU、FPGA的架构差异与适用场景

各位同学,今天我们来聊聊一个很实在的问题:为什么你的交易系统跑得不够快?

我入行那会儿,大家觉得用C++写个回测引擎就挺牛了。后来发现,策略稍微复杂点,回测跑一宿都出不来结果。再后来做高频,发现行情来了,CPU还在那忙着上下文切换,订单早被别人抢走了。

说白了,单靠CPU已经扛不住了。这就是异构计算登场的根本原因。

1.1 CPU的困境:它太“全能”了

CPU的设计哲学是“通用”。它要处理操作系统、网络请求、数据库查询,还得跑你的策略逻辑。它什么都能干,但什么都不精。

我举个例子。你在CPU上算1000只股票的因子,CPU会一条指令一条指令地取、译码、执行。遇到分支预测错了,还得清空流水线重来。你想想看,这效率能高吗?

CPU的核心痛点:

  • 串行执行为主:虽然有多核,但单线程性能受限于主频和功耗墙
  • 缓存依赖重:数据不在L1/L2里,就得等几百个时钟周期去内存拿
  • 上下文切换开销大:操作系统调度线程,光保存恢复寄存器就够喝一壶的

我个人习惯:在评估一个策略能否上生产时,先看它的计算模式。如果是大量条件判断、逻辑分支,CPU还是首选。但如果是批量数学运算、矩阵计算,那就要考虑GPU了。

1.2 GPU:为并行而生

GPU最初是给图形渲染设计的。你想啊,屏幕上几百万个像素点,每个都要算颜色、光照、纹理,这天然就是并行的活。

交易系统里,很多场景跟图形渲染很像。比如计算投资组合的VaR,你要模拟几万条路径,每条路径独立计算。再比如做统计套利,你要同时算几百对价差序列的均值回归速度。

GPU的优势:

  • 数千个计算核心:一个GPU有几千个CUDA核心,可以同时处理成千上万个任务
  • 高内存带宽:HBM2e显存带宽可达1.6TB/s,CPU的DDR5才几十GB/s
  • 适合SIMD模式:单指令多数据,一条指令对一堆数据做相同操作

避坑指南:我曾经把一个策略直接扔到GPU上跑,结果比CPU还慢。为什么?因为策略里全是if-else分支判断,GPU的warp divergence(线程束分歧)导致大部分核心在空转。记住:GPU怕分支,怕数据依赖

1.3 FPGA:硬核的“可编程电路”

FPGA是个有意思的东西。它不像CPU那样取指令执行,也不像GPU那样有固定架构。FPGA的本质是可重构的硬件电路

你可以把FPGA想象成一堆积木。你需要什么功能,就搭什么电路。想做个加法器?搭一个。想做个FIFO队列?搭一个。想做个行情解码器?直接搭个硬件解析器,一个时钟周期就能解析一条行情报文。

FPGA的杀手锏:

  • 极低延迟:硬件电路没有指令开销,从输入到输出可能就几个纳秒
  • 确定性:没有操作系统干扰,没有中断,延迟是固定的
  • 流水线设计:可以做到每个时钟周期输出一个结果,吞吐量极高

注意:FPGA开发门槛高。写Verilog/VHDL跟写软件完全是两码事。我见过不少团队,花三个月写了个FPGA行情解析器,结果bug一堆,最后还不如用CPU加DPDK方案。所以,不是所有场景都值得上FPGA

1.4 三种架构的对比:一张表说清楚

特性 CPU GPU FPGA
核心数量 4-64核 数千核 可编程逻辑单元
时钟频率 3-5 GHz 1-2 GHz 200-500 MHz
延迟 微秒级 毫秒级(含传输) 纳秒级
并行模式 MIMD(多指令多数据) SIMD(单指令多数据) 流水线/数据流
开发难度
功耗 中等
适用场景 策略逻辑、风控、订单管理 批量回测、蒙特卡洛模拟、因子挖掘 行情解码、极速交易、低延迟链路

1.5 交易系统里的异构计算架构

在实际项目中,我们不会只用一种硬件。一个成熟的交易系统,往往是CPU + GPU + FPGA的组合拳。

我画了一张图,帮你理解它们怎么分工协作:

交易系统异构计算架构 行情数据源 FPGA 行情解码 纳秒级解析 CPU 策略逻辑 微秒级决策 GPU 批量计算 毫秒级回测/优化 订单 行情流 解析后数据 交易信号 各硬件职责 FPGA:行情解码、订单组播、低延迟链路 CPU:策略逻辑、风控、订单管理、系统调度 GPU:批量回测、蒙特卡洛模拟、因子挖掘 数据源:交易所行情、历史数据、实时流

1.6 什么时候该上异构计算?

不是所有交易系统都需要异构计算。我见过有人用FPGA做日频策略的订单路由,纯属浪费。这里给你几个判断标准:

  1. 延迟敏感度:如果你的策略需要在微秒甚至纳秒级别响应,FPGA是唯一选择。做市商、高频套利就是典型。
  2. 计算密度:如果策略涉及大量矩阵运算、蒙特卡洛模拟,GPU能带来10-100倍加速。期权定价、风险分析都适合。
  3. 吞吐量要求:如果每秒要处理几十万笔行情,CPU扛不住,FPGA的流水线设计可以做到每个时钟周期处理一笔。
  4. 功耗限制:在机房机柜里,功耗是硬成本。FPGA的能效比(每瓦性能)通常优于CPU和GPU。

我的建议:先从CPU开始,用性能分析工具(perf、vtune)找到瓶颈。如果瓶颈在计算,考虑GPU。如果瓶颈在延迟,考虑FPGA。别一上来就搞异构,先优化算法,再优化硬件

1.7 一个真实案例

我之前参与过一个期权做市项目。一开始全跑在CPU上,延迟大概50微秒。后来发现,大部分时间花在期权定价模型的计算上。

我们把定价模型移植到GPU上,延迟降到5微秒。但还不够,因为竞争对手已经做到1微秒以下。

最后,我们把核心的定价逻辑用FPGA实现,延迟直接降到200纳秒。配合CPU做策略逻辑和风控,整个系统延迟控制在1微秒以内。

嗯,这就是异构计算的威力。不是某个硬件多牛,而是让合适的硬件做合适的事


好了,这一章就到这里。记住:异构计算不是炫技,是解决实际问题的工具。下一章我们会深入GPU编程,讲讲怎么用CUDA加速你的回测引擎。