耿昭谦,朱虎明,李旭明,陈梅青,杨贵鹏
(1.南京长江电子信息产业集团有限公司,江苏 南京 210038;2.西安电子科技大学 智能感知与图像理解教育部重点实验室, 陕西 西安 710071)
在雷达系统中,信号处理子系统扮演着十分重要的角色[1]。近年来,随着雷达系统技术的快速发展以及应用需求的不断增加,传统以硬件系统设计为核心的雷达处理架构和开发模式面临着极大的挑战。一方面,用户希望雷达系统具备越来越多的功能;而另外一方面,开发人员希望提高开发效率并降低开发和维护等成本。
高性能计算是研究、开发和利用强大的计算系统的一门学科,涉及计算体系结构、并行算法和软件开发等方面技术。并行计算是高性能计算的重要组成部分,它是提高计算速度最有效的途径之一,通过将处理任务分解成多个可以并行处理的子任务,在多个计算核心上处理,以便提高计算速度。近年来,由于高能效等诸多优点的存在,以多核处理器、图形处理器(Graphics Processing Unit,GPU)和集群架构为代表的高性能计算平台越来越多地被用于雷达信号处理系统[2-3]。
本文系统分析了已有的高性能计算软硬件技术,利用Pthread针对CPU(Centeral Processing Unit)设计了并行雷达信号处理算法,并对高性能计算在雷达信号处理领域的发展方向进行了展望,为雷达信号处理领域研究人员快速了解本领域的研究现状和最新进展提供参考。
近年来,在需求的牵引和新技术的推动下,雷达信号处理系统呈现出蓬勃发展的趋势,现代雷达信号处理系统向着高性能、软件化和模块化的方向快速发展。基于高性能计算平台设计信号处理算法成为新的发展方向。在雷达信号处理中,关键的处理算法主要有脉冲压缩、动目标检测、恒虚警检测[4-6]等。
为了同时提高探测距离和距离分辨率,雷达系统要采用大时宽带宽积信号。脉冲压缩算法将发射的宽脉冲信号压缩成窄脉冲信号,使得雷达系统同时具有高测速精度和好的距离、速度分辨率的优点。脉冲压缩主要的算法模块是时域卷积法和频域快速傅里叶变换(Fast Fourier Transform,FFT)。当下很多雷达应用要处理的数据点数高达数十万个,对实时性计算平台提出了很高的要求。
利用滤波器组覆盖多普勒范围来抑制杂波,从而提高雷达在杂波背景下检测运动目标能力。动目标检测过程在程序开发中经常使用矩阵乘法来实现。
在雷达信号检测中,当外界杂波干扰信号强度变化时,雷达能自动调整其灵敏度,使雷达的虚警概率保持不变,这种特性称为恒虚警特性。常用的恒虚警处理方法有二进制积累、单元平均选小恒虚警、单元平均选大恒虚警、单元平均恒虚警、顺序统计、修正的单元平均恒虚警、最优线性无偏估计恒虚警和秩值检测器等。恒虚警算法的计算量在信号处理系统中占有比较大的比重,它的并行计算效率对整个信号处理系统的实时性起着决定性作用。
雷达系统由于应用场景的巨大差异,其信号处理系统在并行计算架构、带宽、计算性能、功耗和应用开发软件等方面存在很大的不同。目前常用的硬件平台有数字信号处理器(Digital Signal Processor,DSP)、集成众核(Many Integrated Core、多核CPU、GPU、MIC)、现场可编程门阵列(Field Programmable Gate Array,FPGA)[7-9]等。
2.1.1 DSP
DSP是对数字信号进行实时处理的高速专用集成电路。由于功耗墙和工艺等技术的制约, DSP也进入了多核时代,其具有更强的并行处理能力,但也提高了对编程者并行算法设计能力的要求。以TI公司的TMS320C6678为例,它内置8个计算核心,具有160 GFLOPs的浮点运算能力,目前已经支持高级并行编程接口。
2.1.2 多核CPU
受功耗墙的限制,目前单核CPU无法继续通过提高主频的方法来提升计算性能,CPU转为利用更多的计算核心来提高计算能力。在CPU硬件里面最多可以集成上千个同构的计算内核,不同计算内核之间相互独立,可以并行的执行指令。以Intel 2019年发布的Xeon Platinum 9200 处理器为例,其采用14 nm制程工艺,包含56个物理核,支持AVX-512指令集,双精度浮点计算能力约为4.5 TFLOPs,最高功耗约400 W。AMD的EPYC 7742处理器使用TSMC的7 nm制程,拥有64个核心,并采用了Infinity Fabric结构将芯片组及各个处理器连接起来,双精度浮点计算能力约为2 TFLOPs。
国产的CPU处理器近年来也取得了长足的进步。例如,基于申威众核处理器26010设计的神威太湖之光超级计算机夺得世界第一。26010处理器基于异构计算的理念而设计,其包括4个核心组,每组有65个内核,由8×8 Mesh架构计算集群、一个管理单元和一个内存控制器组成,处理器计算能力为3.062 4 FLOPs,带宽为136 GB·s-1。飞腾FT-2000+ CPU使用台积电16 nm制造工艺,主频为2.0~2.4 GHz,系统采用了同构的64个与 ARMv8指令集兼容处理器内核FTC662核,峰值计算性能588.8 GFLOPs。目前国产处理器的数学库、编程易用性和应用生态离国外发达水平还有较大的差距。
2.1.3 GPU
GPU已经广泛用于雷达的图形显示系统。近年来,由于其强大的计算能力越来越多地被用作异构加速器来加速雷达的信号处理和数据处理。GPU硬件上支持大规模线程并行执行,即所谓的单指令多线程并行计算模式(Single Instruction Multiple Threads,SIMT),适合计算密集型的雷达信号处理算法。具有异构加速功能的GPU生成厂商主要是NVIDIA、Intel和AMD公司,这些厂商生产的GPU在硬件架构和功耗之间差别很大。以NVIDIA公司最强大的计算加速卡Tesla Volta 100 PCI GPU为例,其采用12 nm FFN制程工艺,有5 210个计算核心,显存带宽为900 GB·s-1,能提供7 TFLOPs的双精度、14 TFLOPs单精度和28 TFLOPs半精度计算能力。
景嘉微JM7200 芯片是目前公开报道已知性能最强的国产图形处理芯片,于2018年9月完成流片和封装,单精度可约0.5 TFLOPs,目前主要用于图形学应用。
2.1.4 MIC
MIC架构处理器是英特尔公司专为高性能计算设计,它能最大支持72个同构物理核心288线程的众核计算平台。由于市场原因,目前Intel公司已经停止了此系列产品的升级换代。
2.1.5 FPGA
FPGA是通过编程来改变内部结构的芯片,可以同时进行大规模的细粒度并行计算(主要依靠DSP),具有高性能和低功耗的特点。编程要使用硬件描述语言,其会编译为晶体管电路,而CPU和GPU等通用计算处理器是使用指令集来完成计算任务。Xilinx 2019年推出了全新架构的计算平台—自适应计算加速平台ACAP(Adaptive Compute Acceleration Platform),包括加速人工智能和数据中心应用的Versal 和 Alveo 两大芯片产品系列。Versal计算引擎是SOC架构,集成有标量引擎、适应性引擎和智能引擎3个模块,分别对应不同的计算应用场景,这个平台满足了未来高性能智能雷达的性能需要。2020年发布的7 nm Versal Premium芯片最高计算能力可达上百TOPs(INT 8)。Alveo 系列是PCI加速卡。Intel 公司2019年基于10 nm生产的Agilex 系列FPGA最高可以提供11.8 TFLOPs的单精度和23.6 TFLOPs的半精度计算能力。FPGA目前也支持高级并行编程接口。
随着雷达系统的功能日益复杂和软件定义雷达开发模式的快速发展,基于高性能计算硬件设计和实施并行雷达信号处理算法日益重要,处在硬件和应用开发中间的并行开发框架也日趋丰富。目前,比较常用的通用并行计算软件框架包括:统一计算设备架构 (Compute Unified Device Architecture,CUDA)、OpenMP、消息传递接口MPI(Message Passing Interface,MPI)、开放计算语言(Open Computing Language,OpenCL)和Pthread等[10-13]。
2.2.1 CUDA
CUDA是NVIDIA公司2007年推出的基于扩展C语言的GPU通用计算编程语言,只能运行在本公司的GPU上。从2006年CUDA 1.0版本到2020年的10.2版本,由于编程越来越简单,再加上cuBLAS等丰富的数学库,其已经成为NVIDIA公司GPU计算生态的核心力量,因此大量的研究者尝试利用GPU加速各个领域的算法。
2.2.2 OpenCL
OpenCL是一个跨平台、免费和开放的通用并行编程标准,支持CPU、GPU、FPGA和DSP等处理器。OpenCL由非盈利技术联盟Khronos 维护。目前绝大多数硬件厂商都支持OpenCL,包括NVIDIA、AMD、Intel、高通、ARM、TI、IBM和Xilin等公司。OpenCL主要利用标准的API来控制计算设备和传输数据。利用标准OpenCL编写的并行程序可以实现代码的可移植性,即实现一次编写,然后就能运行在各种计算设备上。该方式可以较好地提高开发效率,降低代码的移植代价。
2.2.3 OpenMP
2.2.4 MPI
MPI是由全世界大学、工业界和研究实验室联合研发的一种基于消息传递的并行程序编程事实标准。MPI主要应用于大规模集群计算系统,用其编写的并行程序可以运行在数万个计算节点上。MPI并行程序设计时要利用点对点和广播等通信方式在计算节点间传递数据。MPI程序执行时,在集群的每个节点上启动多个进程,节点间的进程通过InfiniBand等高速网络显式地交换数据,并行协同完成计算任务。
2.2.5 Pthread
Pthread是IEEE POSIX标准。该标准定义了创建和控制线程的一整套API。Pthread是基于共享内存的并行编程模型,由用户负责管理线程和任务分配。
从章节2.1和章节2.2可以看出,雷达信号处理的高性能计算系统在功耗、计算能力、支持的并行编程模型、并行算法开发的难易程度等方面存在较大差异,如表1所示。表1中CPU的计算能力为双精度,其余均为单精度。
由于高性能计算的硬件平台架构差异巨大,软件编程模型并行机理与执行效率也完全不一样,这就使得基于高性能计算的雷达信号处理算法设计面临很多挑战。若要充分发挥出软硬件的计算能力,既需要良好的算法设计,也需要软硬件协同的优化。
最近几年,基于新的软硬件架构来设计和实施雷达信号处理并行算法飞速发展,国内的中国电子科技集团有限公司第十四研究所、第三十八研究所、西安电子科技大学、北京理工大学、武汉滨湖电子有限责任公司、航天南湖电子信息技术股份有限公司等单位在新型计算系统和并行算法设计等方面做了大量的工作,重点集中在CPU并行算法设计和国产化处理器适配方面。文献[14]使用多核CPU与众核GPU对并行雷达信号处理算法进行了详细分析。文献[15]在FPGA上利用OpenCL实施并行脉冲压缩。文献[16]基于TMS320C66X DSP利用OpenMP并行编程模型设计并行FFT算法。文献[17]在CPU上利用OpenMP实施并行动目标检测算法。文献[18]研究了基于ArrayFire库的并行信号处理算法性能。
使用高性能计算平台加速雷达信号处理时,需将雷达信号处理的计算任务进行划分,按照计算任务粒度来划分,可以分为细粒度的指令级并行、粗粒度的线程级并行和进程级并行。指令级并行是通过流水线等技术实现多条指令同时并行执行。CPU内部一般都支持指令级流水线并行。线程级并行是指多个线程同时并行处理计算任务,各线程之间共享同一进程的内存空间。这些线程由用户管理或者系统自动管理,例如OpenMP的线程就由系统管理。由于线程切换系统开销较小,因此对于并发度高而且实时性要求高的应用适合使用线程级并行。进程级并行是指多个进程同时并行处理计算任务,每个进程独享自己的内存空间。进程之间的切换比线程之间的切换代价大。
雷达信号处理过程中有着很强的并行性。对处理流程进行分析可以发现雷达信号处理子模块之间存在流水线并行,例如脉冲压缩的输出结果为动目标检测的输入,而动目标检测的输出结果为求模模块的输入,求模模块接收动目标检测的输入并输出结果给恒虚警检测。因此在并行程序设计时,将信号处理的子模块作为计算子任务;然后采用流水线的并行策略,将算法子模块分配到不同的线程上;最后通过线程通信控制指令实现数据的流动,实现利用多个核运行多个线程共同完成雷达信号的并行处理。
在信号处理子模块内部,其并行性体现在处理模块是按照脉冲进行处理的,例如在脉冲压缩处理中,每个脉冲的处理过程相同,因此在计算时可以通过将不同脉冲分配到不同的计算核心上并行处理,以提高计算效率。另一个并行性体现在很多现代雷达信号处理模块是按照距离单元进行的,而每个距离单元的运算是相同的,例如在计算恒虚警检测时,需要对每个距离单元计算周围环境,并选择合适的CFAR类型进行处理。因此在进行计算时,可以考虑将每个距离单元的计算过程分配到不同的计算核心上进行处理,从而起到加速的目的。从上述讨论可以得出,在对信号处理过程并行化时,需要根据不同的任务粒度选择不同的并行计算模式。
传统雷达信号处理系统基于FPGA加DSP的模式开发,研究人员需要掌握大量的专业硬件知识,因此系统的设计、实施和调试周期都比较长。正如表1所列,现在的CPU也提供了强大的计算能力。在一些信号处理系统对体积和功耗要求不高的应用场景,可以使用基于CPU的雷达信号处理模式,从而提高了开发效率。本章节将给出一个针对通用CPU利用Pthread设计并行雷达信号处理的示例。
目前CPU支持的并行编程模型包括Pthread、OpenMP、MPI和OpenCL等。Pthread能够在不同的操作系统上运行,具有良好的可移植性,所有线程都可以访问全局的共享内存区域,减少了线程之间数据通信的代价,但是在访问共享内存时需要注意线程安全问题。Pthread多线程库提供了互斥量管理、线程管理、同步管理以及信号量管理等功能,方便多线程程序的开发。由于雷达信号处理中要管理大量IO数据的读写,需要很多独立的线程来承担这些任务,而OpenMP一般对线程是隐式管理,因此不太适合这个场景。MPI属于进程级并行处理,进程之间的数据交换代价比较大,雷达信号处理对系统的实时性有很高的要求,因此MPI也不是一个好的选择。OpenCL目前在GPU中使用最多,在CPU上的计算效率和优化技巧文献报道不多,因此最终针对CPU采用Pthread来设计雷达信号处理并行算法。
流水线并行计算技术类似于工业领域中的生产线。使用流水线技术设计并行算法时先把一个大的计算任务分解为几个小的计算任务,这些任务按照一定的顺序执行。一个任务组由一个单独的线程处理,一般称一个流水线处理线程为一个流水级或一级流水,每个级完成一小部分计算任务,并向下一级提供计算数据。
要处理的雷达回波数据由5个脉组组成,分别为5×2 048、5×4 096、12×2 048、5×16 384和5×16 384。输入数据首先经过反异步干扰处理,剔除异常值;之后经过脉冲压缩处理提高回波信号的分辨率和信噪比;然后经过动目标检测,滤除背景杂波,提取运动目标的回波;最后经过恒虚警检测实现目标检测功能。
在设计并行雷达信号处理系统之前,首先需要通过计时函数对各个模块进行分析,评估需要的计算资源。本实验采用的计算平台为E5-2609 8核8线程CPU,操作系统为Ubuntu14.04,内存为DDR4 2 133 MHz、8 GB,编译器为Intel ICPC 15.0.0。在此CPU上测试的串行算法时间为26.67 ms。
设计多线程流水线并行的关键问题就是要保证每个脉组处理过程前后依赖的同时将每一个线程上的任务量(或者计算时间)划分尽可能相等。另外流水级间的通信是设计流水线并行的一个重要组成部分。为了达到实时处理,最后使用5个线程组成流水线,每一个线程上的处理过程分为6个步骤:
步骤1等待来自上一级的信号量,该信号表示上一级流水已经将结果处理完毕,本级流水可以开始计算;
步骤2计算本级流水任务;
步骤3等待来自下一级的信号量,该信号量表示下一级流水计算完毕,并且可以将本级流水结果写入到下一级的内存中;
步骤4将结果写入下一级内存中;
步骤5向上一级流水发送信号量,表示本级流水执行完毕;
步骤6向下一级流水发送信号量,表示本级流水执行完毕。
采用流水线并行后测试的计算时间为6.18 ms,相比串行时间的加速比为4.3倍,计算效率高达86%,可见采用多线程实现的并行算法效率很高,能保证系统的实时性。
对于FPGA上基于OpenCL的雷达信号处理算法设计、实现与优化。传统基于FPGA的雷达信号处理算法主要通过VHDL或Verilog实现,这两种硬件描述语言的开发需要大量的硬件知识,使得开发难度大、开发效率较低。而OpenCL是使用扩展的C语言作为并行计算开发语言,开发效率高。但由于是一种新的开发方式, FPGA上OpenCL的编译工具、调试工具和数学库等还存在很多不足,因此在算法设计、调试和优化方面还有很多工作要做[19-20]。
基于OpenCL的雷达信号并行化处理的性能可移植性分析。目前的雷达信号处理由于使用多种语言开发,使得针对一种计算平台开发的雷达信号处理模块在另外一种计算平台上运行时必须花比较大的代价进行代码重写和性能优化。如果在开发时采用跨平台的编程语言OpenCL,就很容易实现代码的功能可移植性。然而由于不同种类计算硬件内部结构和编译器的巨大差异,使得基于OpenCL开发代码还不能实现计算性能的可移植性,造成相同的代码在性能类似的硬件上运行时算法的性能差别比较大。因此,基于OpenCL的雷达信号并行处理的性能可移植性亟需研究者解决。未来可以利用设计新的性能模型和性能自调优等技术来解决。
雷达数据处理并行化研究。目前,对雷达信号处理算法的并行化研究已经取得了较大的进展,随着智能化雷达技术的发展,为实现对目标的自动跟踪和智能识别,数据智能处理算法也日趋复杂。数据处理的实时性需要研究,因此雷达数据处理的并行化也是一个值得探究的方向。
随着智能雷达系统的发展与信号处理复杂度的提升,再加上软件定义雷达开发模式的兴起,使得雷达信号处理的实时性面临很多挑战。因此,利用高性能计算技术来加速雷达信号处理算法是很重要的研究方向。本文对比分析了高性能计算相关的软硬件技术,利用软硬件协同思想解释了雷达信号处理系统的内在并行计算特性,据此设计了多线程流水线并行信号处理算法,并对未来的发展方向进行了展望。研究人员认为,随着高性能计算技术的发展,雷达信号处理的时效性将不断突破,高性能计算将更好地服务于雷达行业。