高光谱复原算法在GPU上的实现研究+源程序(2)
时间:2018-09-13 15:35 来源:毕业论文 作者:毕业论文 点击:次
1 引言 1.1 课题背景和意义 由于成像光谱仪在高光谱测量的基础上有图谱合一的优势,成像高光谱成为国内外研究热点。无论何种成像光谱仪都要对干涉图进行光谱复原处理,因此成像高光谱成为研究热点的同时,高光谱复原技术的研究也引人注目。 由于高光谱具有波段多,波段宽度窄,光谱分辨率高,光谱相应范围广等特点,其在遥感技术中的应用相对于多光谱更为广泛。与多光谱遥感影像相比,高光谱影像不仅在信息丰富程度方面有极大提高,在处理技术上也更为合理有效。 干涉光谱复原技术[2]是根据实验获得的干涉图与研究需要的光谱图之间的一一对应关系,利用傅里叶变换的光谱学原理,将干涉图反演得到光谱图。光谱复原处理包含四个步骤:去直流、切趾、相位校正和快速傅里叶变换FFT。其中,FFT是光谱复原技术的核心。 本课题的主要任务就是利用OpenCL研究FFT算法在GPU上的实现过程和软件实现方法。通过比较FFT算法程序在GPU和CPU上的运行时间来具体分析GPU的优势。 1999年,第一个显卡GPU出现[3]。从GPU产生至今,GPU的运算能力飞速提升,其应用范围也不断拓展。GPU的硬件结构决定其具备高并行度和大量浮点吞吐运算的能力。因此,GPU不仅限于图形运算,也可应用于油气勘探、电脑辅助、金融安全评估等领域。 传统的CPU超级计算机发展迅速,但其效率低、投资大、文护成本高等问题成为其性能提升的制约。而GPU超级计算机技术由于其高效率和低成本被愈加重视,其应用愈加广泛。在复杂繁琐的数学模型拟合和运算上,GPU比CPU快几十甚至几百倍。 由于不断加强的可编程性,GPU不仅应用于图形渲染,其强大的浮点运算和并行运算能力使其应用于通用计算,即GPGPU。而此时,CPU的发展却遇到瓶颈,由于其不断追求通用型,多数晶体管用于控制和Cache,少数晶体管用于计算,其算术逻辑单元没有GPU多,因此CPU计算并行度的提升非常困难。对于复杂繁琐的计算,在GPU上运行比在CPU上运行快得多。 在存储器延迟与带宽、计算与通信、发热与功耗三个方面,CPU的发展遇到困难。而反观GPU,在以上三个方面其性能优于CPU。 总之,依靠GPU的发展,各行各业都能获得性耗比和性价比更高的运算方案,使得各项工作更高效地完成。 1.2 GPU和OpenCL GPU英文全称Graphic Processing Unit,中文翻译为“图形处理器”[4]。GPU是现代计算机中一个专门的图形的核心处理器,其产生的目的就是图形处理。 作为显卡核心,GPU决定该显卡的优劣和多数性能。同时,GPU也是区分2D和3D显卡的关键。处理特效和3D图像时,2D显卡主要依靠CPU来完成任务(软件加速)。而对于3D显卡,其芯片内部集成了特效和3D图像的处理功能(硬件加速)。 由于不断加强的可编程性,GPU不仅应用于图形渲染,其强大的浮点运算和并行运算能力使其应用于通用计算,即GPGPU。将CPU和GPU结合的CPU/GPU系统将成为未来计算机发展的方向。 现在遇到的问题是:对混合结构的设备如何编写程序?一般C或C++的编译目标是CPU,Chapel和Cray的汇编语言的编译目标也是CPU[5]。而Nvidia的CUDA(Compute Unified Device Architecture)只能针对Nvidia的GPU,而非CPU,进行程序编写。 这里,OpenCL(Open Computing Language)便是问题的解决方案。OpenCL的程序不仅可以在AMD、Nvidia、Intel的GPU或CPU上运行,也可以在Sony的PS3上运行。OpenCL不是专用语言,而是一项开放标准。代码编译成功后可以在任何的芯片上执行。著名的Java语言是一次编写,各处运行(各个操作系统),与之相对的,OpenCL是一次编写,各设备上运行(各个设备)。 (责任编辑:qin) |