基于可编程GPU的遥感影像快速处理研究

2020-08-20 11:08杨肇桐
写真地理 2020年15期

杨肇桐

摘要: 低空航拍可以获得大比例尺、高精度的影像,具有响应时间短、灵活等优点,常用于灾害应急制图中。同时,救灾的紧迫性要求遥感影像能够被快速处理。在快速处理领域,一般采用分布式集群计算机和多核CPU来获得大数据量和复杂计算的加速效果,但其局限性比较大,大集群占用太大物理空间,多核CPU性能难以达到要求,而可编程图形处理器(GPU)同时解决了分布式集群和多核CPU的局限性。特别是近年来,可编程图形处理器的并行处理在其他领域得到了很好的应用和发展。因此,研究其在遥感图像快速处理领域中的应用具有重要的现实意义。

关键词: GPU;快速处理;错峰调度;快速傅里叶变换

【中图分类号】P37【文献标识码】B【文章编号】1674-3733(2020)15-0226-02

分析GPU的并行可编程性和CUDA编程模型特征,通过对遥感影像错峰调度、快速傅里叶变换和高斯差分算法的CUDA编程设计,在GPU上实现这3种算法的快速并行处理,并与CPU结果对比,证明GPU能够在数据精度和CPU保持一致的基础上大幅缩短遥感影像处理时间,加速比可以达到一个数量级。

1影像处理算法分析CUDA设计

1.1错峰调度算法分析优化。在改正航摄过程中,由于航摄轴倾斜、中心投影、大气折光、地球曲率等因素影响会产生影像几何变形问题。错峰调度算法模型在进行共线方程计算像点坐标、灰度插值这两个有大量迭代和计算的作业中,可通过选择适合的作业启动时间,实现不同作业高低峰负载的交叉重叠,以充分利用计算资源。

如图1所示,在共线方程和灰度插值迭代过程中,每一步参与计算的顶点的数目是动态变化的,因此计算负载会出现三类变化。(1)渐降类,迭代初始阶段,所有顶点均参与计算,但在后续迭代计算过程中,参与计算的顶点数目呈逐渐下降趋势;(2)循环类,圖中顶点被分组,组内顶点在一个迭代步内处理,组间顶点在不同步内处理,故计算负载循环变化;(3)抛物线类,顶点参与计算的时间点与图的遍历过程紧密相关,计算负载呈现单调渐变特性。三种图算法类的差异化的顶点收敛速度为

这三种变化会导致GPU计算负载低的时候,很多线程处于空转状态。可通过CUDA编程模型对共线方程和灰度插值作业的准确分类和调度启动时间的准确计算,实现在基于GPU的影像几何纠正过程中对于大量遥感影像数据的快速处理。

1.2快速傅里叶变换算法分析。快速傅里叶变换(fast Fourier transform,FFT)的基本思想是利用DFT旋转因子的周期性和对称性,使长序列的DFT分解为更小长度的DFT,然后利用这些小的DFT计算来代替大的DFT计算,从而达到提高效率的目的。FFT算法在CPU端主要的费时操作是因为像幅大、循环次数多、计算较为复杂。设x(n)为长度为N的有限长序列,则其离散傅里叶正变换(DFT)为;

式中,称为旋转因子或蝶形因子。通过两次调用一维快速傅里叶变换即可实现二维快速傅里叶变换。二维快速傅里叶变换的输入相当于一个M行N列的复数矩阵,对其每行进行一维快速傅里叶变换,再对其每列进行一维快速傅里叶变换,这样就达到了变换的目的。根据以上算法分析,每一个像素都要依次进行行列各一次DFT变换。此算法具有相对的数据独立性,可以利用GPU并行处理技术,适合CUDA编程模型。本试验编程调用了CUFFT函数库。CUDA提供了封装好的CUFFT库,它提供了与CPU上的FFTW库相似的接口,能够让使用者轻易地挖掘GPU的强大浮点处理能力,不用自己去实现专门的FFT内核函数。使用者通过调用CUFFT库的API函数,即可完成FFT变换。

1.3高斯差分算法分析设计。高斯差分是SIFT匹配算法的关键步骤,它包括影像空间域卷积和生成DOG影像。影像空间域卷积算法简单,即用一个窗口模板移动来平滑整幅影像;再把不同卷积模板卷积的影像对应位置相减即得到高斯差分图像。高斯差分算法在CPU端所需时间主要还是消耗在大量的循环和复杂的计算中。本次试验算法决定使用5幅卷积图像生成1组4层高斯差分影像。为了简便算法,设计把二维卷积变换为先行卷积再列卷积,再利用卷积图像相减得到差分图像。根据以上算法分析,每一个像素点都要先行卷积再列卷积,再对应位置相减。此过程具有天然的数据独立性,非常适合GPU并行CUDA编程模型。根据高斯差分算法分析和CUDA编程模型,整个算法的实现流程如下:(1)CPU读入影像,生成卷积模板;(2)CPU把影像和模板数据开辟,并拷贝显存空间,影像放入全局存储器,采用合并访存的方式访问,因为模板具有重复使用性和不改变性,所以放入共享存储器来提高访问速度,另外还需在全局存储器中开辟5幅中间影像空间和5幅高斯差分结果空间;(3)在GPU端,为了确保列变换之前行变换已完成,采用CUDA中的流控制来依次启动行列两个卷积Kernel函数,利用CUDA编程模型的多线程并行处理技术来拆分多次循环,卷积在各线程内部进行,每个线程负责一个像素点的相减;(4)在CPU端把4幅高斯差分影像拷贝到内存,释放各种GPU存储器资源,并将差分影像写入硬盘。

2CUDA试验及精度时间分析

2.1试验环境。为了更有效地说明图形处理器在遥感影像快速处理领域的作用,所有编程试验均在统一的电脑配置环境下进行,除了添加一个GPU Quadro4000显卡外,其余配置都和经典编程环境一致。算法实现的主要硬件平台:青岛海洋科学与技术-高性能计算中心提供GPU服务器(GPU计算节点8台,每节点配置:2颗Intel Xeon E5-2680v4十四核处理器,主频2.4GHz,256GB DDR4内存,4个Nvidia Kepler K40M GPU加速卡)。算法依赖的主要软件平台:Windows 10、Visual Studio 2019、 NVIDIA GPU Computing Toolkit(CUDA 10)、FFTW和CUFFT函数库。为了更好地体现图形处理器的性能,不仅要对多幅不同像幅的原始遥感影像进行处理,还要分析算法在CPU和GPU上运算数据精度和时间的差异。

2.2CPU与GPU数据精度分析。由于CPU和GPU由不同的处理单元组成,对单浮点和双浮点类型的支持可能不同,因此有可能会造成除法保留的小数位不同,最终造成影像灰度级别的差异。同时,由于算法必须为适合CUDA统一编程模型而作适当的修改,同样可能存在差异,因此必须对比它们的数据精度。在此,仅以单波段正射纠正为例,将基于CPU和GPU获得的影像进行数据精度分析,统计两者的差异。

2.3CPU与GPU时间分析。为了更加充分地说明GPU加速遥感影像处理的能力,采用像幅大小分别为1024像素×1024像素、2048像素×2048像素、4096像素×4096像素的遥感影像进行时间统计对比分析。正射纠正的最高加速比为1947/377=5.16;FFT的最高加速比为2453/233=10.53;高斯差分的最高加速比为3057/330=9.26。GPU处理遥感影像的加速比随着像幅的增大而增加,这说明在不超过GPU存储单元容量的条件下,遥感影像数据量越大越能体现GPU的加速效果,也能得到更大的加速比。仅从表1处理时间上分析,利用GPU并行处理技术可以在4096像素×4096像素像幅的情况下获得比CPU串行高达一个量级的加速比,向影像快速处理迈进了重要一步。

总之,GPU能够在影像正射纠正、快速傅里叶变换和高斯差分方面得到明显的加速,并能够在数据精度上与CPU保持一致的情况下,大幅提高遥感影像的处理速度。遥感影像处理是针对像素的操作,数据处理具有以下特点:数据量大、计算复杂、处理方法固定、处理方法具有内在的并行特性等。遥感影像处理的这些特点决定了它适合于GPU的并行处理架构和CUDA编程模型。认为利用GPU技术能够实现遥感图像快速处理领域的巨大飞跃。

参考文献

[1]张艳萍.遥感图像并行处理算法的研究与应用.2018.

[2]刘宏宇.关于基于可编程GPU的遥感影像快速处理研究.2019.