基于异构模式的高光谱数据加速处理方法研究
2022-05-18张远张大伟陈仁华建文
张远 张大伟 陈仁 华建文
0 引言
“风云四号”气象卫星于2016年12月发射,并在轨成功运行.“风云四号”01星大气垂直探测仪首次实现了静止轨道傅里叶高光谱探测,精细观测到大气的垂直结构.干涉式大气垂直探测仪的核心系统是干涉仪,探测仪实际上就是空间工作的傅里叶变换光谱仪[1].为了满足气象卫星更高时空分辨率的大气探测需求,后续将会使用更大面阵的焦平面探测器,获取更大数据量的光谱数据,提高空间分辨率和探测频率,实现短周期的实时天气预报等.随着“风云四号”大气垂直探测仪在光谱分辨率上的重大突破,获取的遥感高光谱数据量会变得更大,海量遥感高光谱数据的较低计算效率成为大气遥感高光谱应用的瓶颈.
为解决海量高光谱数据的高性能处理问题,国内外众多研究人员提出通过使用计算机集群模式、基于消息传递的并行编程环境MPI(Message Passing Interface)、基于图形处理的处理器GPU(Graphic Processing Unit)等提高光谱数据的处理效率[2].基于GPU的CUDA(Compute Unified Device Architecture)通用并行计算的架构技术,利用GPU多计算核心、高内存带宽、浮点运算的运行速度快等特点,可以对海量高光谱数据进行并行优化,提升高光谱数据的处理性能.如今,基于CPU-GPU的异构计算已经成为研究和应用的热点,GPU逐渐成为解决海量高光谱数据的高性能处理问题的有效途径.利用GPU加速技术,国内外学者在高光谱数据处理中尝试了目标检测、图像分类、影像坐标转换、图像处理等算法的并行优化,并且实验取得很大的性能提升.文献[3]研究并实现了基于GPU的光谱相关系数填图(SCM)算法的并行化,将加速比提高到25倍左右;文献[4]在影像坐标转换过程中引入了CPU-GPU协同处理技术,这一技术使得坐标转换效率提高10倍;文献[5]基于正交空间投影的目标检测算法提出了高光谱图像的并行优化处理方法,将串行计算速度提高50倍;文献[6]基于GPU设计了针对遥感图像预处理过程中的几何校正的并行算法,结果表明基于GPU阵列的几何校正有效提高了矫正效率;文献[7]分析和总结了CPU-GPU架构在高光谱影像数据处理系统中的应用,指出这种异构架构在该领域的应用具有可行性且前景广阔;文献[8]利用卷积神经网络(CNN)提取原始图像特征领域,对现有并行算法GCN(GPU based Cube-CNN)计算效率不够高的情况,提出了基于通用矩阵乘法(GEMM)算法的GGCN(GPU based Cube-CNN improved by GEMM)并行算法,提升了算法的效率并有效提高了GPU的利用率.综上所述,对于海量高光谱遥感数据的高性能处理引入基于GPU计算的技术手段是可行的.
本文使用基于CPU-GPU异构计算的遥感高光谱数据加速处理技术,结合使用快速傅里叶变换完成高光谱数据的傅里叶分析,解决海量高光谱数据处理过程中的干涉数据到光谱数据转换效率较低的问题.这一技术是“风云四号”干涉式大气垂直探测仪系统研究中的一项重要环节,对提高光谱分辨率和大气垂直探测能力,提高我国天气预报能力具有重要意义.
图1 CPU和GPU结构Fig.1 The CPU (a) and GPU (b) structures
1 GPU并行运算性能优势
为满足不同的需求,CPU与GPU结构上有较大的区别(图1).CPU在逻辑上有三大组成部分,分别是控制单元、运算单元和存储单元.在结构上,CPU有较大容量的高速缓存(cache),有复杂的逻辑控制与分支预测,这种结构使得运算单元(ALU)只占CPU结构空间较小的一部分.而GPU在结构设计上包含了大量的ALU,即图1b中右上的密集的方格,与CPU相比较,GPU没有复杂的逻辑控制,具有较小的高速缓存,且缓存是为了单个线程(thread)提供数据等.GPU在内存设计上分纹理内存、共享内存、全局内存等.使用特定的内存可以更好地提高数据的访问速度,且有更高的内存带宽,利用大量ALU进行并行处理,计算能力更强.
在实际问题处理中,某些问题或问题中的某一部分解决方式具有很强的并行性,如果按照串行运算处理时,处理时间较长,使用并行计算明显具有时间上的优势,特别是待处理的数据量较大时.而利用GPU就可以很好地解决这类问题,GPU包含了数量众多的更小、更高效的核心,这些核心可以很好地解决多任务并行处理的问题.以Fermi架构为例,GPU设计上包含了多个SM(Streaming Multiprocessors,流式多处理器),而每个SM都支持数以百计的线程并行执行,所以当GPU进行并行运算时,成百上千的线程可以并行执行.CUDA core为GPU的计算核心,相当于微型CPU,线程的管理和执行采用的是SIMT(Single Instruction Multiple Thread)架构,每个线程都有它自己的状态寄存器和指令地址计数器,这就使得GPU擅长解决大规模的数据并行任务.
在结构层次上,GPU往下可分为SM、SP(Stream Processor),CUDA中线程分为Grid、Block、Thread三个组织层次,Grid、Block均为dim3结构.CUDA Thread 最终的并行执行是在实际的物理硬件上实现的,逻辑线程与实际的物理硬件有着一定的映射关系,即Thread对应SP(即CUDA core),Block对应SM,Grid对应Device设备.GPU并行执行时任务线程层次如图2所示.
图2 CUDA Thread层次Fig.2 CUDA Thread levels
串行运算和并行运算的区别在于:串行计算将一个任务分解为大量离散的指令,指令是顺序执行的,而并行计算将一个任务的处理分为几个阶段,每个部分同样分解为一系列的离散指令,在某些阶段,任务适合并行处理时,这些指令可在众多线程中同时执行,提高了解决问题的速度.
2 高光谱数据处理相关算法研究
2.1 Cooley-Tukey FFT 算法
对于一个非周期离散时间信号x(n),其离散傅里叶变换为
(1)
式中,k=0,1,…,N-1,为DFT系数.
离散傅里叶变换(DFT)运算时间复杂度为O(n2).为了简化DFT,利用其周期性、对称性等特点,便出现了快速傅里叶变换(FFT),其时间复杂度为O(nlog2n),其中Cooley-Tukey FFT 算法[9]最为成熟.
快速傅里叶变换用数学公式表示如下:
(2)
(3)
其中:k=0,1,…,N/2-1;DF(k)和GF(k)分别是序列XF(k)的偶数数列和奇数数列.
图3 Cooley-Tukey FFT蝴蝶操作结构Fig.3 Structure of Cooley-Tukey FFT butterfly operation
2.2 FFT在GPU上的并行化
既然Cooley-Tukey FFT 算法采用分治的思想,那么分治过程就会有分解和合并两个阶段,合并阶段进行的是蝴蝶操作.合并过程大致如下:经过前面分解过后,各个序列长度均为1,第一组合并(即蝴蝶操作)是将这些序列两两合并,由于原序列被分为了n个短序列,故一共需要进行n/2次合并.以此类推,共进行log2n组的合并,时间复杂度为O(nlog2n).
每一组合并中有n/2次蝴蝶操作,由于它们之间没有先后顺序关系,因此可以分配足够的线程,使得一组中n/2次蝴蝶操作同时进行,该组计算的并行时间复杂度为O(1),整个计算过程一共需要进行log2n组合并,故采用蝴蝶操作并行化时,整个计算过程的并行时间复杂度为O(log2n).本文利用该方法在GPU上实现FFT的并行化操作,加快高光谱数据的处理速度.
3 基于异构计算的遥感高光谱数据并行处理实现流程
通过对CPU和GPU结构比较,使用CPU 完成数据处理过程中逻辑控制的计算,而GPU完成具有数据密集型的并行处理的计算.明白CPU-GPU的协同处理技术后,使用NVIDIA 的CUDA并行编程框架制订数据并行处理流程,包括高光谱数据的读取、CPU和GPU端内存分配、数据的分块处理、CPU-GPU内存交互、GPU端核函数定义等,建立稳定高效的处理流程,具体流程如图4所示,图4a为传统CPU计算流程,图4b为异构计算流程.异构计算流程如下:
1)CPU和GPU端内存分配.CPU和GPU两者内存地址不同,需要在两端进行内存单独分配,便于CPU和GPU对内存数据操作,为后续的CPU-GPU内存交互做准备.
2)大气遥感高光谱数据的读取.原高光谱数据以二进制格式存储在PC机中,需要数据读至CPU内存中,用于后续高光谱数据的处理.
3)CPU-GPU内存交互.由于CPU 与 GPU端内存相互独立,即两端分配的内存只能在各自端使用,因此在GPU端运行核函数时,需要将用于计算的数据从CPU端内存拷贝到 GPU端内存,核函数计算完成之后,也需要把计算结果拷贝到CPU端,然后在主机端完成后面的处理.
4)GPU端核函数定义.在GPU端定义核函数,将CPU端拷贝来的数据在GPU端进行数据的并行计算,同时设置线程网格(Grid)和 线程块(Block)的大小,确定使用线程的数量.
5)核函数的执行.定义的核函数将在分配的大量线程上运行,线程之间的运行同时进行,互补干扰,这得益于GPU本身的物理结构拥有很多的硬件线程,它们使用单指令多数据运算.
图4 CPU计算和异构计算流程Fig.4 Processes of the CPU-based computing (a) and CPU-GPU heterogeneous computing (b)
4 实验与分析
本实验使用同一台PC机,分别测试基于CPU计算和基于CPU-GPU异构计算处理高光谱数据,处理的数据量均为400份文件,一份文件有36 MB光谱数据,总共14.4 GB的数据,比较两者处理相同任务所用的时间,判断基于CPU-GPU异构计算的并行处理是否具有性能优势.
1)软硬件环境
采用一台PC机,使用NVIDIA 公司的GenForce GTX 1660 GPU显卡,显卡容量6 GB,有1 408个CUDA核心;CPU处理器为Intel(R) Core(TM) i9-9900K,物理内存32 GB.实验在64 bit Windows10系统下进行,采用Visual Studio 2017 集成开发环境,使用C++编程语言,进行基于CPU计算和基于CPU-GPU异构计算的高光谱数据处理.
2)实验结果分析
分别使用基于CPU计算和基于CPU-GPU异构计算的技术处理相同海量高光谱数据,两者所用计算数据均用双精度表示,计算完成干涉图到光谱图的转换时间,使用计时工具计时,并判断计算结果准确性.两者所用时间:前者130 min左右,后者约1.5 min,说明采用异构计算可以明显提升处理性能,速度提升80多倍.为验证结果准确性,这里选取两幅对应的光谱图显示,一幅为基于CPU-GPU异构模式的计算数据图像,一幅为基于CPU的使用matlab函数库计算的数据图像,如图5所示.数据结果比较采用(a-b)/((a+b)/2)误差的形式,a表示图5a即基于CPU-GPU异构模式的计算数据,b表示图5b即使用CPU计算的数据,结果如图6所示,两者相对误差量级基本在10-14,可以说明两种方式处理后的数据是一致的.故使用基于CPU-GPU异构计算的并行加速处理的方法处理大气遥感高光谱数据时,速度明显提升,准确性也可以保证.
图5 基于CPU-GPU异构计算和基于CPU计算得到的光谱图Fig.5 Spectrograms obtained from CPU-GPU heterogeneous computing (a) and CPU-based computing (b)
图6 两种情况计算结果相对误差Fig.6 Relative error between CPU-GPU heterogeneous computing and CPU-based computing
5 结束语
本文针对海量高光谱数据处理效率较低的情况,将基于CPU-GPU异构计算的技术引入到高光谱数据处理中来,并将其用于高光谱数据处理的一套系统中,对整体的性能进行优化,极大地提高了数据处理的效率.实验结果表明,本方法较传统的CPU计算有着较大的性能提升,速度提升80多倍,研究成果将会在“风云四号”干涉式大气垂直探测仪获得的数据处理中得到应用.基于CPU-GPU异构计算的大气高光谱数据并行加速处理技术,是提高高光谱分辨率探测和大气垂直探测能力的要求,对于提高我国天气预报能力具有重要的应用价值.