3. 硬件选型:低功耗CPU与FPGA在回测中的权衡
做低延迟回测系统,硬件选型是个绕不开的坎儿。
我见过不少团队,一上来就堆顶级CPU,结果功耗爆炸,散热跟不上,回测跑着跑着就降频了。也见过迷信FPGA的,折腾了三个月,最后发现回测逻辑改一次要重新综合半天,直接崩溃。
说白了,CPU和FPGA各有各的活法。咱们今天就把这事掰扯清楚。
3.1 为什么功耗突然成了大问题?
你可能觉得奇怪:回测嘛,跑个程序而已,功耗能有多大?
嗯,这里要注意。低延迟回测和普通回测不一样。普通回测你跑完拉倒,低延迟回测是要模拟实盘环境的。这意味着——
- 全量数据常驻内存:Tick级数据,一天几个GB,全塞进内存。内存条多了,功耗自然上去。
- CPU持续满载:为了压榨那几微秒,CPU核心几乎不休息。我见过一台机器,跑回测时CPU功耗直接飙到250W。
- 散热跟不上就降频:降频意味着延迟飙升,回测结果失真。你想想看,辛辛苦苦优化的策略,因为硬件降频跑出来的结果不准,多冤。
核心矛盾:低延迟需要高算力,高算力带来高功耗,高功耗导致高温,高温引发降频——降频又反过来拉高延迟。
这个死循环,就是硬件选型要解决的根本问题。
3.2 CPU方案:灵活但功耗敏感
我个人习惯,先看CPU。毕竟大部分回测框架都是跑在x86上的,生态成熟,改起来快。
3.2.1 选哪类CPU?
不是所有CPU都适合低延迟回测。我踩过坑,简单总结一下:
| CPU类型 | 典型型号 | TDP(热设计功耗) | 适合场景 |
|---|---|---|---|
| 桌面旗舰 | Intel i9-13900K | 125W~253W | 单机回测,延迟敏感 |
| 工作站 | AMD Threadripper | 280W+ | 多策略并行回测 |
| 服务器低功耗 | Intel Xeon D系列 | 65W~100W | 7x24小时运行,散热受限 |
| 移动端标压 | Intel i7-13700H | 45W~115W | 便携式回测设备 |
我曾经在项目里用过i9-13900K,性能确实猛。但跑全量Tick回测时,CPU温度直奔95°C。散热器风扇转速拉满,噪音跟飞机起飞似的。后来换了水冷才压住。
我的建议:如果机柜空间有限,优先考虑TDP 65W~95W的CPU。别小看这几十瓦的差距,在密集部署场景下,散热成本差好几倍。
3.2.2 功耗优化的实战技巧
选好CPU只是第一步。怎么让它跑得又快又凉快,才是真功夫。
- 关掉超线程:回测是计算密集型任务,超线程反而可能引入延迟抖动。我一般只开物理核心。
- 锁频运行:别让CPU自动睿频。睿频带来的瞬时功耗峰值,散热系统很难跟上。锁在基准频率,延迟更稳定。
- 使用cstates控制:把CPU深度睡眠状态关掉。虽然会增加待机功耗,但能避免核心唤醒时的延迟毛刺。
# 一个简单的CPU调优脚本(Linux下)
# 关闭超线程
echo 0 > /sys/devices/system/cpu/cpuX/online # X为逻辑核心号
# 锁频到4.0GHz
cpupower frequency-set -g performance
cpupower frequency-set -u 4.0GHz
cpupower frequency-set -d 4.0GHz
# 禁用深度C-State
cpupower idle-set -D 1
注意:这些调优会牺牲一部分能效比。如果你的回测不是7x24小时跑,建议只在回测时段启用。我见过有人全时开着,电费直接翻倍。
3.3 FPGA方案:极致延迟,但代价不小
说到低延迟,FPGA是绕不开的话题。它能把回测逻辑直接做成硬件电路,延迟可以做到纳秒级。
但说实话,FPGA不是万能的。我参与过一个项目,试图用FPGA做全量Tick回测。结果呢?
- 开发周期长:改一次回测逻辑,Verilog代码要重新综合,少则半小时,多则几小时。
- 调试困难:CPU上print大法好使,FPGA里信号得用逻辑分析仪抓,效率差太多。
- 灵活性差:策略参数一变,硬件可能要重新布局布线。
3.3.1 FPGA适合什么场景?
我个人觉得,FPGA更适合做回测系统中的特定加速模块,而不是整个回测引擎。
| 场景 | CPU方案 | FPGA方案 | 我的选择 |
|---|---|---|---|
| 订单簿重建 | 延迟约1~5μs | 延迟约50~200ns | FPGA(如果订单簿逻辑固定) |
| 策略回测 | 灵活,延迟约10~100μs | 延迟极低但改逻辑麻烦 | CPU(策略迭代快) |
| 数据预处理 | 延迟约1~10μs | 延迟约100~500ns | FPGA(数据格式固定时) |
| 风险检查 | 延迟约5~20μs | 延迟约200ns~1μs | FPGA(规则不变时) |
我的经验:FPGA最适合做那些「逻辑稳定、延迟敏感、重复性高」的模块。比如行情解析、订单簿快照。而策略逻辑这种天天改的东西,还是交给CPU吧。
3.4 CPU + FPGA混合方案:我推荐的做法
你想想看,为什么非要二选一呢?
我现在的做法是:CPU做主回测引擎,FPGA做硬件加速协处理器。
具体来说:
- CPU:跑策略逻辑、动态调参、结果分析。这部分需要频繁改动,CPU的灵活性无可替代。
- FPGA:处理固定延迟链路的环节。比如行情解码、订单簿维护、信号预处理。
这样做的好处很明显:
- CPU部分可以快速迭代策略,不用等FPGA综合。
- FPGA部分把最耗时的固定逻辑加速了,整体延迟降下来。
- 功耗可控。FPGA做特定任务时,功耗比CPU低得多。比如一个中等规模的FPGA(Xilinx Kintex-7),跑行情解码时功耗才10~15W。
3.5 一张图看懂选型逻辑
说了这么多,我画了张图帮你理清思路:
3.6 功耗与散热的实战考量
选完硬件,散热跟不上等于白选。我见过太多人忽略这一步。
3.6.1 功耗估算公式
别信厂商标称的TDP。那是在特定条件下的值。实际跑回测时,功耗会高不少。
实际功耗 ≈ CPU TDP × 1.2 ~ 1.5(满载系数)
+ 内存功耗(每条DDR5约8~12W)
+ FPGA功耗(根据逻辑利用率,约10~30W)
+ 其他外设功耗(网卡、硬盘等,约20~50W)
举个例子:一台用i9-13900K(TDP 125W) + 4条DDR5 + 中等FPGA的机器:
- CPU满载:125W × 1.3 ≈ 162W
- 内存:4 × 10W = 40W
- FPGA:20W
- 其他:30W
- 总计:约252W
嗯,一台机器就250W+。如果你部署10台,就是2.5kW。这还没算空调制冷。
我曾经踩过的坑:在机房部署了8台回测服务器,每台标称TDP 95W。结果夏天机房空调坏了,温度升到40°C,所有机器降频,回测延迟从5μs飙到50μs。后来一测,实际功耗每台180W。从那以后,我选电源和散热都按实际功耗的1.5倍预留余量。
3.6.2 散热方案选择
| 散热方式 | 散热能力 | 噪音 | 成本 | 适用场景 |
|---|---|---|---|---|
| 风冷(塔式) | ~200W | 中 | 低 | 单机,非7x24 |
| 风冷(下压式) | ~150W | 中 | 低 | 机柜空间受限 |
| 一体式水冷 | ~300W | 低 | 中 | 高功耗CPU,7x24 |
| 分体式水冷 | ~500W+ | 极低 | 高 | 多GPU/多FPGA集群 |
| 浸没式液冷 | ~1000W+ | 无 | 极高 | 大规模部署 |
我个人习惯,单机功耗在200W以下用风冷就行。超过200W,建议上一体式水冷。别省这点钱,CPU降频一次,回测结果不准,损失比散热器贵多了。
3.7 小结
硬件选型这事,没有标准答案。但有几个原则可以记住:
- 先定延迟目标:10μs以上,CPU足够。10μs以下,考虑FPGA介入。
- 策略迭代频繁,选CPU:别跟自己过不去,FPGA改逻辑太痛苦。
- 固定逻辑用FPGA加速:行情解码、订单簿维护,这些活交给FPGA,省电又省心。
- 散热预算留足余量:实际功耗往往比标称高30%~50%。
说白了,低延迟回测的硬件选型,就是在延迟、灵活性、功耗三者之间找平衡点。没有完美的方案,只有最适合你场景的方案。
公众号:蓝海资料掘金营,微信deep3321