FPGA和CPU一直是雷达信号处理不可分割的组成部分。传统上FPGA用于前端处理,CPU用于后端处理。随着雷达系统的处理能力越来越强,越来越复杂,对信息处理的需求也急剧增长。为此,FPGA不断在提高处理能力和吞吐量,CPU也在发展以满足下一代雷达的信号处理性能需求。这种努力发展的趋势导致越来越多的使用CPU加速器,如图形处理单元(GPU)等,以支持较重的处理负载。
本文对比了FPGA和GPU浮点性能和设计流程。最近几年,GPU已经不仅能完成图形处理功能,而且成为强大的浮点处理平台,被称之为GP-GPU,具有很高的峰值FLOP指标。FPGA传统上用于定点数字信号处理器(DSP),而现在足以竞争完成浮点处理功能,也成为后端雷达处理加速功能的有力竞争者。
在FPGA前端,40 nm和28 nm均报道了很多可验证的浮点基准测试结果。Altera的下一代高性能FPGA将采用Intel的14 nm三栅极技术,性能至少达到5 TFLOP。使用这种先进的半导体工艺,性能可实现100 GFLOPs/W。而且,Altera FPGA现在支持OpenCL,这是GPU使用的一款优秀的编程语言。
峰值GFLOPS指标
目前的FPGA性能可达到1TFLOP以上峰值,AMD和Nvidia最新的GPU甚至更高,接近4 TFLOP。但在某些应用中,峰值GFLOP,即TFLOP,提供的器件性能信息有限。它只表示了每秒能完成的理论浮点加法或乘法总数。这一分析表示,在雷达应用中,很多情况下,FPGA在算法和数据规模上超过了GPU吞吐量。
一种中等复杂且常用的算法是快速傅里叶变换(FFT)。大部分雷达系统由于在频域完成大量处理工作,因此会经常用到FFT算法。例如,使用单精度浮点处理实现一个4,096点FFT。它能在每个时钟周期输入输出四个复数采样。每个FFT内核运行速度超过80 GFLOP,大容量28 nm FPGA的资源支持实现7个此类内核。
但如图1所示,该FPGA的FFT算法接近400 GFLOP。这一结果基于“按键式”OpenCL编译,无需FPGA专业知识。使用逻辑锁定和设计空间管理器(DSE)进行优化,7内核设计接近单内核设计的fMAX,使用28 nm FPGA,将其提升至500 GFLOP,超过了10 GFLOPs/W。
图1.Stratix V 5SGSD8 FPGA浮点FFT性能
这一GFLOPs/W结果要比CPU或者GPU功效高很多。对比GPU,GPU在这些FFT长度上效率并不高,因此没有进行基准测试。当FFT长度达到几十万个点时,GPU效率才比较高,能够为CPU提供有效的加速功能。但是,雷达处理应用一般是长度较短的FFT,FFT长度通常在512至8,192之间。
总之,实际的GFLOP一般只达到峰值或者理论GFLOP的一小部分。出于这一原因,更好的方法是采用算法来对比性能,这种算法能够合理的表示典型应用的特性。随着基准测试算法复杂度的提高,其更能代表实际雷达系统性能。
算法基准测试
相比依靠供应商的峰值GFLOP指标来驱动处理技术决策,另一方法是使用比较复杂的第三方评估。空时自适应处理(STAP)雷达常用的算法是Cholesky分解。这一算法经常用于线性代数,高效的解出多个方程,可以用在相关矩阵上。
Cholesky算法在数值上非常复杂,要获得合理的结果总是要求浮点数值表示。计算需求与N3成正比,N是矩阵维度,因此,一般对处理要求很高。雷达系统一般是实时工作,因此,要求有较高的吞吐量。结果取决于矩阵大小以及所要求的矩阵处理吞吐量,通常会超过100 GFLOP。
表1显示了基于Nvidia GPU指标1.35 TFLOP的基准测试结果,使用了各种库,以及Xilinx Virtex6 XC6VSX475T,其密度达到475K LC,这种FPGA针对DSP处理进行了优化。用于Cholesky基准测试时,这些器件在密度上与Altera FPGA相似。LAPACK和MAGMA是商用库,而GPU GFLOP则是采用田纳西州大学开发的OpenCL实现的(2)。对于小规模矩阵,后者更优化一些。
表1.GPU和Xilinx FPGA Cholesky基准测试 (2)
Altera测试了容量中等的Altera Stratix® V FPGA (460K逻辑单元(LE)),使用了单精度浮点处理的Cholesky算法。如表2所示,在Stratix V FPGA上进行Cholesky算法的性能要比Xilinx结果高很多。Altera基准测试还包括QR分解,这是不太复杂的另一矩阵处理算法。Altera以可参数赋值内核的形式提供Cholesky和QRD算法。
表2.Altera FPGA Cholesky和QR基准测试
应指出,基准测试的矩阵大小并不相同。田纳西州大学的结果来自[512 × 512]的矩阵,而Altera基准测试的Cholesky是[360x360],QRD则高达[450x450]。原因是,矩阵规模较小时,GPU效率非常低,因此,在这些应用中,不应该使用它们来加速CPU。作为对比,在规模较小的矩阵时,FPGA的工作效率非常高。雷达系统对吞吐量的要求很高,每秒数千个矩阵,因此,效率非常关键。采用了小矩阵,甚至要求把大矩阵分解成小矩阵以便进行处理。
而且,Altera基准测试是基于每个Cholesky内核的。每个可参数赋值的Cholesky内核支持选择矩阵大小,矢量大小和通道数量。矢量大小大致决定了FPGA资源。较大的[360 × 360]矩阵使用了较长的矢量,支持FPGA中实现一个内核,达到91 GFLOP。较小的[60 × 60]矩阵使用的资源更少,因此,可以实现两个内核,总共是2 × 42 = 84 GFLOP。最小的[30 × 30]矩阵支持实现三个内核,总共是3 × 25 = 75 GFLOP。
FPGA看起来更适合解决数据规模较小的问题,很多雷达系统都是这种情况。GPU之所以效率低,是因为计算负载随N3而增大,数据I/O随N2增大,最终,随着数据的增加,GPU的I/O瓶颈不再是问题。此外,随着矩阵规模的增大,由于每个矩阵的处理量增大,矩阵每秒吞吐量会大幅度下降。在某些点,吞吐量变得非常低,以至于无法满足雷达系统的实时要求。
对于FFT,计算负载增加至N log2 N,而数据I/O随N增大而增大。对于规模较大的数据,GPU是高效的计算引擎。作为对比,对于所有规模的数据,FPGA都是高效的计算引擎,更适合大部分雷达应用,这些应用中,FFT长度适中,但是吞吐量很大。
GPU和FPGA设计方法
GPU可以通过使用Nvidia专用CUDA语言或开放标准OpenCL语言来编程。这些语言在能力上非常相似,最大的不同在于CUDA只能用在Nvidia GPU上。
FPGA通常使用HDL语言Verilog或VHDL进行编程。这些语言的最新版虽然采用了浮点数定义,但都不太适合支持浮点设计。例如,在System Verilog中,短实数变量对应于IEEE单精度(浮点),实数变量对应于IEEE双精度。
DSP Builder高级模块库
使用传统的方法将浮点数据通路综合到FPGA的效率非常低,如Xilinx FPGA在Cholesky算法上使用了Xilinx浮点内核产生函数的低性能显示,。而Altera采两种不同的方法。首先是使用DSP Builder高级模块库,这是基于Mathworks的设计输入方法。这一工具支持定点和浮点数,支持7种不同精度的浮点处理,包括IEEE半、单和双精度实现。它还支持矢量化,这是高效实现线性代数所需要的。最重要的是,它能够将浮点电路高效的映射到目前的定点FPGA体系结构中,如基准测试所示,规模中等的28 nm FPGA,Cholesky算法接近了100 GFLOP。作为对比,在不具有综合能力的规模相似的Xilinx FPGA上,实现Cholesky相同算法,性能只有20 GFLOP。
面向FPGA的OpenCL
GPU编程人员较为熟悉OpenCL。面向FPGA的OpenCL编译意味着,面向AMD或Nvidia GPU编写的OpenCL代码可以编译到FPGA中。而且,Altera的OpenCL编译器支持GPU程序使用FPGA,无需具备典型的FPGA设计技巧。
使用支持FPGA的OpenCL,相对于GPU有几个关键优势。首先,GPU的I/O是有限制的。所有输入和输出数据必须由主CPU通过PCI Express® (PCIe®)接口进行传输。结果延时会让GPU处理引擎暂停,因此,降低了性能。
面向FPGA的OpenCL扩展
FPGA以各种宽带I/O功能而知名。这些功能支持数据通过千兆以太网(GbE)和Serial RapidIO® (SRIO),或直接从模数转换器(ADC)和数模转换器(DAC)输入输出FPGA。Altera定义了OpenCL标准的供应商专用扩展,以支持流操作。这种扩展对于雷达系统非常关键,数据能够从定点前端波束成形直接输出,支持浮点处理阶段的数字下变频处理,实现脉冲压缩,多普勒,STAP, 动目标显示(MTI),以及图2所示的其他功能。通过这种方法,数据流在通过GPU加速器之前,避免了CPU瓶颈问题,从而降低了总处理延时。
图2.通用雷达信号处理图
即使与I/O瓶颈无关,FPGA的处理延时也要比GPU低很多。众所周知,GPU必须有数千个线程才能高效工作,这是由于存储器读取很长的延时,以及GPU大量的处理内核之间的延时。实际上,GPU必须有很多任务才能使得处理内核不会暂停等待数据,否则会导致任务很长的延时。
而FPGA使用了“粗粒度并行”体系结构。它建立了多个经过优化的并行数据通路,每一通路在每个时钟周期输出一个结果。数据通路的例化数取决于FPGA资源,但一般要比GPU内核数少很多。但是,每一数据通路例化的吞吐量要比GPU内核高得多。这一方法的主要优势是低延时,这在很多应用中都是关键的性能优势。
FPGA的另一优势是很低的功耗,极大的降低了GFLOPs/W。使用开发板测量FPGA功耗,表明Cholesky和QRD等算法是5-6 GFLOPs/W,而FFT等简单算法则是10 GFLOPs/W。一般很难进行GPU能效测量,但是,Cholesky的GPU性能达到50 GFLOP,典型功耗是200 W,得到的结果是0.25 GFLOPs/W,单位FLOP的功率比FPGA高20倍。
对于机载或车载雷达装备,系统体积、重量和功耗(SWaP)都非常重要。在未来的系统中,雷达工作很容易达到数十个TFLOP。总处理能力与现代雷达系统的分辨率和覆盖范围相关。
融合数据通路
OpenCL和DSP Builder都依靠“融合数据通路”这种技术(图3),以这种技术实现浮点处理,能大幅度减少桶形移位电路,支持使用FPGA开发大规模高性能浮点设计。
图3.采用融合数据通路实现浮点处理
为降低桶形移位频率,综合过程尽可能使用较大的尾数宽度,从而不需要频率归一化和去归一化。27 × 27和36 × 36硬核乘法器支持比单精度实现所要求的23位更大的乘法计算,54 × 54和72 × 72结构的乘法器支持比52位更大的双精度计算,这通常是双精度实现所要求的。FPGA逻辑已经针对大规模定点加法器电路进行了优化,包括了内置进位超前电路。
当需要进行归一化和去归一化时,另一种可以避免低性能和过度布线的方法是使用乘法器。对于一个24位单精度尾数(包括符号位),24 × 24乘法器通过乘以2n对输入移位。27 × 27和36 × 36硬核乘法器支持单精度扩展尾数,可以用于构建双精度乘法器。
在很多线性代数算法中,矢量点乘是占用大量FLOP的底层运算。单精度实现长度是64的长矢量点乘需要64个浮点乘法器,以及随后由63个浮点加法器构成的加法树。这类实现需要很多桶形移位电路。
相反,可以对64个乘法器的输出进行去归一化,成为公共指数,最大是64位指数。可以使用定点加法器电路对这些64路输出求和,在加法树的最后进行最终的归一化。如图4所示,这一本地模块浮点处理过程省掉了每一加法器所需要的中间归一化和去归一化。即使是IEEE 754浮点处理,最大指数决定了最终的指数,因此,这种改变只是在计算早期进行指数调整。
图4.矢量点乘优化
但进行信号处理时,在计算最后尽可能以高精度来截断结果才能获得最佳结果。这种方法传递除单精度浮点处理所需要尾数位宽之外的额外的尾数位宽,一般从27位到36位补偿了单精度浮点处理所需要的早期去归一化这种次优方法,。采用浮点乘法器进行尾数扩展,因此,在每一步消除了对乘积进行归一化的要求。
这一方法每个时钟周期也会产生一个结果。GPU体系结构可以并行产生所有浮点乘法,但不能高效并行进行加法。原因是因为不同的内核必须通过本地存储器传输数据实现通信,因此缺乏FPGA架构的连接的灵活特性。
融合数据通路方法产生的结果比传统IEEE 754浮点结果更加精确,如表3所示。
表3.Cholesky分解准确性(单精度)
使用Cholesky分解算法,实现大规模矩阵求逆,获得了这些结果。相同的算法以三种不同的方法实现:
n 在MATLAB/Simulink中,采用IEEE 754单精度浮点处理。
n 在RTL单精度浮点处理中,使用融合数据通路方法。
n 在MATLAB中,采用双精度浮点处理。
双精度实现要比单精度实现精度高十亿倍(109)。
MATLAB单精度误差、RTL单精度误差和MATLAB双精度误差对比确认了融合数据通路方法的完整性。采用了这一方法来获得输出矩阵中所有复数元素的归一化误差以及矩阵元素的最大误差。使用Frobenius范数计算了总误差:
由于范数包括了所有元素的误差,因此比单一误差大很多。
此外,DSP Builder高级模块库和OpenCL工具流程都针对下一代FPGA体系结构,支持并优化目前的设计。由于体系结构创新和工艺技术创新,性能可以达到100峰值GFLOPs/W。
结论
高性能雷达系统现在有新的处理平台选择。除了更好的SWaP,与基于处理器的解决方案相比,FPGA能提供低延时和高GFLOP。随着下一代高性能计算优化FPGA的推出,这种优势会更明显。
Altera的OpenCL编译器为GPU编程人员提供了几乎无缝的通路来评估这一新处理体系结构的指标。Altera OpenCL符合1.2规范,提供全面的数学库支持。它解决了传统FPGA遇到的时序收敛、DDR存储器管理以及PCIe主处理器接口等难题。
对于非GPU开发人员,Altera提供DSP Builder高级模块库工具流程,支持开发人员开发高fMAX定点或浮点DSP设计,同时保持基于Mathworks的仿真和开发环境的优点。使用FPGA的雷达开发人员多年以来一直使用该产品,实现更高效的工作流程和仿真,其fMAX性能与手动编码HDL相同。