论文部分内容阅读
SIFT特征(Scale-invariant feature transform)是一种具有多尺度以及具有光照不变性和旋转不变性的特征。在遥感图像处理中,基于SIFT特征的图像匹配稳定性强,且能满足多尺度和多传感器的图像之间的匹配。但SIFT特征具有计算复杂度高的缺陷,限制了其在一些场景下的应用。自从NVIDIA推出CUDA(Compute Unified Device Architecture)这一并行计算平台,降低了在图形处理器(GPU)上的编程难度以后,越来越多的科研人员以及工程师利用GPU加速遇到的计算问题。本文面向遥感任务的卫星在轨智能处理设计理念,针对空间任务需求和在轨数据处理带来的挑战,为遥感卫星的星载微型超级计算中心设计SIFT算法的并行加速方案。本文利用OpenMP技术和CUDA技术实现了多GPU下的SIFT算法加速。首先对SIFT算法进行了可并行行分析,给出了在异构模式下,主机端和设备端的任务分配。同时给出了在多GPU下的数据分块,以及并行化方式。随后针对SIFT算法中计算量大的步骤做了并行化处理。针对高斯滤波,本文将二维的高斯滤波分解为先对行做高斯滤波,再对列做高斯滤波,并在此基础上利用GPU加速。在行滤波阶段,利用线程束共享寄存器数据,减少内存的使用,并将中间结果以转置的方式存入共享内存,在避免存储体冲突的情况下还能减少对全局内存的访问。在极值点检测优化中,采用和高斯分离滤波类似的策略,同时引入了原子操作来保证每次对比的正确性。在特征点生成的优化中,引入了共享内存减少原子操作带来的冲突,提高程序的并行化率,同时将数据绑定到纹理内存,增加程序的缓存命中。最后在单GPU的SIFT算法基础上,实现了SIFT算法的多GPU加速,并使用CUDA流将多个数据分块的数据拷贝和内核函数的执行重叠起来,减少程序运行时间。在Jetson TX2硬件平台上对本文的实现做测试,单GPU计算下的特征点个数比CPU计算下的特征点个数平均少百分之八左右,但加速比都达到了82以上,并且随着图像分辨率增大而增大。两个GPU计算下的特征点个数和单GPU计算下的特征点个数基本一致,加速比达到1.5倍左右。本文在多GPU下实现的SIFT算法,整体加速效果比较显著,在小分辨率以及大分辨率下都能很好的加速。