CPU,FPGA和GPU在金融领域应用的比较

2015-12-31

tech.jpg


盛立金融作为金融领域FPGA技术的领头企业,是首家实现FPGA技术在证券、期货市场应用的机构,也是唯一一家实现多个产品在实际生产环境长期运行的企业。在金融领域方面,FPGA能够实现什么现有CPU技术做不到的东西? CPU, FPGA和另外经常被提到的GPU又到底有什么区别?  

盛立金融作为金融领域FPGA技术的领头企业,是首家实现FPGA技术在证券、期货市场应用的机构,也是唯一一家实现多个产品在实际生产环境长期运行的企业。在金融领域方面,FPGA能够实现什么现有CPU技术做不到的东西? CPU, FPGA和另外经常被提到的GPU又到底有什么区别?  

CPU:
CPU是通用处理器,被设计为可以用于任何应用。通常来讲,一个CPU核每一个时钟周期只能处理一个指令,并且指令是按顺序执行的(sequential processing)。虽然最新的CPU也能支持较大数量的核,更大的高速缓存(cache),并且新的架构能更好的支持流水线(pipelining),动态调度(dynamic scheduling)等,然而并行运算会造成大量CPU核之间的通信,高速缓存的管理会十分复杂。特别是对于网络数据的收发,由于应用程序需要依赖操作系统内核来处理网络协议,内核会产生大量的中断,进程调度,以及上下文切换(context switch),这些都会引入延迟。并且网络数据量大的时候,CPU资源将被网络协议处理大量占用。用FPGA处理网络数据收发就不需要依赖操作系统内核,而是在FPGA内部完成网络协议解析,直接将应用层数据发给应用程序。


对于计算机算法而言,用CPU处理需要将算法分为按顺序执行的一系列操作,所以虽然CPU主频很高,但对于某些算法,性能仍然不如GPU和FPGA。

FPGA:
FPGA由于其可编程特性,可以被用于实现任意的逻辑功能,FPGA的每一个时钟周期可以并行处理多个指令。由于FPGA可以被设计为专门处理某个(或某些)算法,所以即使其支持的时钟频率低于CPU,但单个时钟周期可以完成的运算可以远大于一个CPU指令可以完成的运算量,甚至整个算法都可能在几个时钟周期之内完成,所以完成整个算法FPGA所需的时钟周期数可以远低于CPU。不仅如此,FPGA的时钟频率还在不断提高,目前为止还依旧遵循摩尔定律,而CPU时钟频率已经不再按照摩尔定律提升了。除此之外,FPGA的并行处理特性使得大量的逻辑处理单元(算法单元)可以并行存在于FPGA内部。在需要处理大量数据的情况下,这些数据可以并行的分配给这些处理单元,从而获得比CPU更高的处理吞吐量。FPGA还有一个特性就是其相对CPU独立,不像GPU需要依赖CPU。对于某些特定的应用,比如程序化交易,FPGA可以完成网络协议处理、交易算法逻辑,从而避免与CPU和操作系统的通信,从而获得极低的延迟和极高的可靠性和确定性。

GPU:
GPU的特点是有大量的核(多达几千个核)和大量的高速内存,最初被设计用于游戏、计算机图像处理等。GPU主要擅长做类似图像处理的并行运算,所谓的“粗粒度并行(coarse-grain parallelism)”。这个对于图像处理很适用,因为像素与像素之间相对独立,GPU提供大量的核,可以同时对很多像素进行并行处理。但这并不能带来延迟的提升(而仅仅是处理吞吐量的提升)。比如,当一个消息到达时,虽然GPU有很多的核,但只能有其中一个核被用来处理当前这个消息,而且GPU核通常被设计为支持与图像处理相关的运算,不如CPU通用。GPU主要适用于在数据层呈现很高的并行特性(data-parallelism)的应用,比如GPU比较适合用于类似蒙特卡罗模拟(Monte Carlo simulations)这样的并行运算。GPU的另外一个问题,是它的“确定性(determinism)”不如FPGA,相对较容易产生计算错误(这个是由GPU结构决定的)。

总论
CPU,FPGA和GPU 因为设计结构的不同,有各自适合的应用场景。简而言之,在金融证券行业,CPU适用于对速度和性能要求不是特别高的应用,尤其是开发周期要求较快的应用。FPGA更适用于性能以及性能确定性要求高的应用。GPU 主要用于计算量大而且可以并行处理的应用。