一、FPGA基础与高频交易概述
1.1 FPGA到底是个什么东西?
很多人第一次接触FPGA,会觉得它像个「万能芯片」。说白了,它是一堆逻辑门和触发器的集合,你可以通过编程把它们连成任意电路。我刚开始做FPGA时,总觉得它和CPU差不多——都是跑程序的嘛。后来踩了坑才明白,这俩完全是两码事。
CPU是顺序执行的,一条指令接一条指令。FPGA呢?它是并行工作的。你写一个加法器,它就真的在硬件里生成一个加法器。你写100个加法器,它就生成100个,同时干活。这个特性,在高频交易里简直是天赐之物。
核心区别一句话总结:CPU是「串行思考」,FPGA是「并行本能」。
1.2 FPGA的工作原理——我尽量说人话
FPGA内部主要由三部分组成:可配置逻辑块(CLB)、可编程互连、I/O引脚。CLB里包含查找表(LUT)和触发器。LUT本质上是一个小型的RAM,你输入4位或6位地址,它输出一个结果。嗯,就是这么简单粗暴。
举个例子,你想实现一个与门:
// 这是硬件描述语言,不是C语言
assign y = a & b;
FPGA会把这个逻辑映射到LUT里。LUT的输入是a和b,输出是y。查找表里预先存好了「00→0, 01→0, 10→0, 11→1」这四组数据。你看,没有指令,没有取指译码,就是查表输出。所以它快,快到纳秒级。
个人经验:我做过一个项目,用CPU处理网络包,延迟在微秒级。换成FPGA后,延迟直接降到几十纳秒。你想想看,一个微秒等于1000纳秒,这差距有多大。
1.3 高频交易的核心需求——快,还要更稳
高频交易,说白了就是抢时间。别人还没看到行情,你已经下了单。别人刚按下回车,你的订单已经成交了。这里有几个硬指标:
- 低延迟:从行情数据到达,到交易决策发出,时间要短。短到微秒甚至纳秒级。
- 确定性:每次处理的时间必须稳定。不能这次1微秒,下次10微秒。那会出大问题。
- 高吞吐:行情数据是海量的。每秒几万笔报价,你得全接住,不能丢。
- 低抖动:抖动就是延迟的波动。高频交易最怕这个。你想想看,如果延迟忽高忽低,你的策略怎么跑?
避坑指南:我曾经遇到过一个团队,用CPU做行情解析,平均延迟只有5微秒,但抖动高达20微秒。结果呢?策略在回测时赚得盆满钵满,实盘一跑就亏。为什么?因为抖动导致订单到达交易所的时间不确定,抢单永远慢半拍。
1.4 FPGA为什么适合高频交易?——三个核心原因
我做了这么多年FPGA,总结下来,它适合高频交易的原因就三个:
1.4.1 硬件并行,天生快
CPU处理行情,通常是一笔一笔来。先解析第一笔,再解析第二笔。FPGA呢?它可以同时解析100笔。你想想看,行情数据从网口进来,FPGA直接在里面做解析、做计算、做决策,整个过程流水线化。数据流进来,结果流出去,中间没有停顿。
我记得有一次优化一个行情解析模块,CPU版本需要3微秒。FPGA版本呢?200纳秒。快了15倍。而且这还是没怎么优化的结果。
1.4.2 确定性延迟,没有意外
CPU有中断、有缓存未命中、有操作系统调度。这些都会导致延迟抖动。FPGA没有操作系统,没有中断,没有缓存未命中。它的延迟是确定的。你写一个流水线,每级延迟固定,总延迟就是各级之和。不会今天跑得快,明天跑得慢。
这个特性在高频交易里太重要了。你想想看,如果你的策略在99%的情况下延迟是1微秒,但1%的情况下延迟变成10微秒。那1%的订单可能就亏大了。FPGA能保证这1%不会发生。
1.4.3 定制化,只做必要的事
CPU是通用处理器,什么都能干。但正因为通用,它做了很多你不需要的事。比如取指、译码、分支预测、缓存管理。这些在高频交易里都是多余的。FPGA可以只做你需要的事:行情解析、信号计算、订单生成。没有多余操作,所以快。
一句话总结:CPU是「什么都能干,但都不精」;FPGA是「只干一件事,但干到极致」。
1.5 一张图看懂FPGA与高频交易的关系
下面这张图展示了FPGA在高频交易中的核心位置。从行情数据进来,到交易决策出去,FPGA全程参与,没有CPU的中间环节。
1.6 我的一点体会
做了这么多年FPGA,我最大的感受是:FPGA不是万能的,但在高频交易这个领域,它几乎是唯一的选择。CPU有CPU的优势,比如灵活、开发快。但如果你追求的是纳秒级的延迟和确定性的响应,FPGA就是答案。
当然,FPGA也有它的痛点。开发周期长、调试困难、成本高。我刚开始做FPGA时,一个简单的模块就要写几百行代码,调试起来更是头疼。但当你看到自己的设计在示波器上跑出稳定的波形时,那种成就感,嗯,值得。
给新手的建议:如果你刚接触FPGA,不要急着做高频交易。先学会怎么点灯、怎么跑一个简单的计数器。然后慢慢来,从行情解析开始,一步步深入。我见过太多人一上来就想做全自动交易系统,结果连时序约束都过不了。
好了,这一章就到这里。下一章我们会深入FPGA的开发流程,聊聊怎么从零开始搭建一个高频交易加速模块。到时候我会分享一些我踩过的坑,希望能帮你少走弯路。
公众号:蓝海资料掘金营,微信deep3321